我创建了一个裸回购来发布我的存储库,但是我不知道如何用主存储库的当前状态来更新裸回购。
添加裸仓库作为远程仓库,然后使用 git push。
git push
如果你想复制主回购中的所有对象,在主回购中这样做:
git push --all <url-of-bare-repo>
或者,在空白回购中进行取回操作:
git fetch <url-of-main-repo>
您不能执行 pull 操作,因为 pull 操作希望与 HEAD合并,而单纯的回购没有 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 大师,如果我说错了什么,我希望得到启发!
更新 : 阅读评论!
更新2022-10-10 : 如果你正在获取一个裸 git 回购,那么你可能需要做一个 git fetch origin master:master,否则你的 git log将不会显示新的提交。使用 git fetch origin *:*更新所有本地分支。有关更多信息,请参见注释。
git fetch origin master:master
git log
git fetch origin *:*
我使用以下命令创建了一个存储库
git clone --bare <remote_repo>
然后我试着用托马斯的答案来更新这个裸体克隆,但是对我没有用。为了更新这个简单的存储库(我认为 Let _ Me _ Be 正是这样要求的) ,我必须创建一个镜像存储库:
git clone --mirror <remote_repo>
然后,我可以在镜像存储库中运行以下命令来获取主存储库的更新:
git fetch --all
我通过阅读 通过提取镜像一个 Git 存储库得到了这个解决方案
除了用 git clone --mirror重现之外,唯一的解决方案是 来自 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
经过一番折腾,我发现这对我很管用。
一次:
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 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
对我来说,这个组合奏效了:
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)