我创建了一个空存储库来发布我的存储库,但是我不知道如何用主存储库的当前状态更新空存储库。
rseugnpd1#
如果要复制主存储库中的所有对象,请在主存储库中执行以下操作:
git push --all <url-of-bare-repo>
或者,在空的repo中执行一个fetch操作:
git fetch <url-of-main-repo>
您不能执行拉操作,因为拉操作要与HEAD合并,而裸存储库没有此功能。您可以将这些添加为遥控器,以便在将来保存一些输入:
HEAD
git remote add <whatever-name> <url-of-other-repo>
然后你就可以
git push --all <whatever-name>
或
git fetch <whatever-name>
如果<whatever-name>是origin,您甚至可以完全忽略它。
<whatever-name>
origin
git fetch origin master:master
git log
git fetch origin *:*
kg7wmglp2#
我使用以下命令创建了一个存储库git clone --bare <remote_repo>然后我尝试使用托马斯的答案更新裸克隆,但它对我不起作用。为了更新裸仓库(我认为这就是Let_Me_Be所要求的),我必须创建一个镜像仓库:
git clone --bare <remote_repo>
git clone --mirror <remote_repo>
然后,我可以在镜像存储库中运行以下命令来获取主存储库的更新:
git fetch --all
我在阅读镜像Git仓库时遇到了这个解决方案
irtuqstp3#
除了使用git clone --mirror重新创建之外,唯一的解决方案是from Gregor:
git clone --mirror
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
然后您可以使用git fetch,您将看到更新。奇怪的是,在此之前,即使配置了remote,它也没有在git branch -a中列出任何分支。
git fetch
remote
git branch -a
57hvy0tb4#
假设:
$ git clone --bare https://github.com/.../foo.git
提取方式:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
注意:如果您先将cd写入目录,则不需要--git-dir=foo.git。
cd
--git-dir=foo.git
j8yoct9x5#
经过多次折腾,我发现这对我很有效。一次:
git clone --mirror ssh://git@source.address:2000/repo git remote add remote_site ssh://git@remote_site.address/repo git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
每次我要同步时:
cd /home/myhome/repo.git git --bare fetch ssh://git@source.address:2000/repo git fetch ssh://git@source.address:2000/repo git push --mirror remote_site
wfsdck306#
添加空存储库作为远程存储库,然后使用git push。
git push
wbgh16ku7#
对我来说,这个组合很有效:
git remote add remote_site https://github.com/project/repo.git git fetch -u remote_site +refs/heads/*:refs/heads/* git fetch -u remote_site +refs/tags/*:refs/tags/* git push --mirror
-u参数对于提取是必需的,否则我会收到错误消息:“拒绝获取到非空资源库的当前分支引用/头/主文件”(另请参见https://stackoverflow.com/a/19205680/4807875)
7条答案
按热度按时间rseugnpd1#
如果要复制主存储库中的所有对象,请在主存储库中执行以下操作:
或者,在空的repo中执行一个fetch操作:
您不能执行拉操作,因为拉操作要与
HEAD
合并,而裸存储库没有此功能。您可以将这些添加为遥控器,以便在将来保存一些输入:
然后你就可以
或
如果
<whatever-name>
是origin
,您甚至可以完全忽略它。git fetch origin master:master
,否则你的git log
将不会显示新的提交。使用git fetch origin *:*
来更新所有本地分支。更多信息请参见注解。kg7wmglp2#
我使用以下命令创建了一个存储库
git clone --bare <remote_repo>
然后我尝试使用托马斯的答案更新裸克隆,但它对我不起作用。为了更新裸仓库(我认为这就是Let_Me_Be所要求的),我必须创建一个镜像仓库:
然后,我可以在镜像存储库中运行以下命令来获取主存储库的更新:
我在阅读镜像Git仓库时遇到了这个解决方案
irtuqstp3#
除了使用
git clone --mirror
重新创建之外,唯一的解决方案是from Gregor:然后您可以使用
git fetch
,您将看到更新。奇怪的是,在此之前,即使配置了remote
,它也没有在git branch -a
中列出任何分支。57hvy0tb4#
假设:
提取方式:
注意:如果您先将
cd
写入目录,则不需要--git-dir=foo.git
。j8yoct9x5#
经过多次折腾,我发现这对我很有效。
一次:
每次我要同步时:
wfsdck306#
添加空存储库作为远程存储库,然后使用
git push
。wbgh16ku7#
对我来说,这个组合很有效:
-u参数对于提取是必需的,否则我会收到错误消息:“拒绝获取到非空资源库的当前分支引用/头/主文件”(另请参见https://stackoverflow.com/a/19205680/4807875)