我如何更新我的裸回购?

我创建了一个裸回购来发布我的存储库,但是我不知道如何用主存储库的当前状态来更新裸回购。

102788 次浏览

添加裸仓库作为远程仓库,然后使用 git push

如果你想复制主回购中的所有对象,在主回购中这样做:

git push --all <url-of-bare-repo>

或者,在空白回购中进行取回操作:

git fetch <url-of-main-repo>

您不能执行 pull 操作,因为 pull 操作希望与 HEAD合并,而单纯的回购没有 HEAD

您可以添加这些作为远程,以节省您自己在未来的一些键入:

git remote add <whatever-name> <url-of-other-repo>

然后你就可以

git push --all <whatever-name>

或者

git fetch <whatever-name>

如果 <whatever-name>origin,你甚至可以完全忽略它。


免责声明 : 我不是一个 git 大师,如果我说错了什么,我希望得到启发!

更新 : 阅读评论!

更新2022-10-10 : 如果你正在获取一个裸 git 回购,那么你可能需要做一个 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 config remote.origin.fetch 'refs/heads/*:refs/heads/*'

然后你可以 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

对我来说,这个组合奏效了:

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)