如何更新我的裸回购?
我创build了一个裸仓库来发布我的仓库,但是我不知道如何用主仓库的当前状态来更新裸仓库。
如果您想要复制主回购库中的所有对象,请在主回购库内执行以下操作:
git push --all <url-of-bare-repo>
或者,在裸回购里面进行取回:
git fetch <url-of-main-repo>
你不能做一个拉,因为一个拉想要合并HEAD
,这是一个光秃秃的回购没有。
您可以添加这些作为遥控器,以保存自己在未来打字:
git remote add <whatever-name> <url-of-other-repo>
那么你可以简单地做
git push --all <whatever-name>
要么
git fetch <whatever-name>
取决于你在回购什么。如果<whatever-name>
是origin
,你甚至可以把它完全抛弃。
免责声明:我不是一个混帐大师。 如果我说错了,我想开悟!
更新:阅读评论!
我使用以下命令创build了一个存储库
git clone --bare <remote_repo>
然后我试着用Thomas的答案更新光秃的克隆,但是这对我没有任何作用。 为了让裸仓库更新(这是我认为Let_Me_Be所要求的),我必须创build一个镜像库:
git clone --mirror <remote_repo>
然后,我可以在镜像存储库中运行以下命令来获取主存储库的更新:
git fetch --all
我通过阅读Mirroring Git Repository By Pulling来了解这个解决scheme
除了用git clone --mirror
重新创build的唯一解决scheme是来自Gregor :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
那么你可以git fetch
,你会看到更新。 奇怪的是,在这之前,即使有一个remote
configuration,它没有在git branch -a
列出的git branch -a
。
假设:
$ 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
。
经过大量的搞乱之后,我发现这对我很有用。
一旦:
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
将裸仓库添加为远程仓库,然后使用git push
。