如何更新我的裸仓库?

时间:2010-08-01 16:02:34

标签: git

我创建了一个裸仓库来发布我的存储库,但我无法弄清楚如何使用主存储库的当前状态更新裸存储库。

7 个答案:

答案 0 :(得分:66)

如果要复制主仓库中的所有对象,请在主仓库中执行此操作:

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,您甚至可以将其全部删除。

免责声明:我不是一个git guru。如果我说错了,我想开悟!

更新:阅读评论!

答案 1 :(得分:59)

我使用以下命令

创建了一个存储库

git clone --bare <remote_repo>

然后我尝试使用Thomas的答案更新裸克隆,但它对我不起作用。为了让裸存储库更新(我认为这就是Let_Me_Be所要求的),我必须创建一个镜像存储库:

git clone --mirror <remote_repo>

然后我可以在镜像存储库中运行以下命令来获取主存储库的更新:

git fetch --all

我通过阅读Mirror a Git Repository By Pulling

来看到这个解决方案

答案 2 :(得分:45)

使用git clone --mirror重新创建的唯一解决方案是from Gregor

git config remote.origin.fetch 'refs/heads/*:refs/heads/*'

然后你可以git fetch,你会看到更新。奇怪的是,在此之前,即使配置了remote,它也没有git branch -a中列出的分支。

答案 3 :(得分:36)

假设:

$ git clone --bare https://github.com/.../foo.git

获取:

$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune

注意:如果您首先--git-dir=foo.git到目录,则不需要cd

答案 4 :(得分:8)

经过多次搞乱后,我发现这对我有用。

在:

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

答案 5 :(得分:3)

将裸存储库添加为远程存储库,然后使用git push

答案 6 :(得分:0)

对我来说,这种组合有效:

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参数用于获取是必需的,否则我将收到错误消息: “拒绝获取非裸存储库的当前分支refs / heads / master”(另请参见https://stackoverflow.com/a/19205680/4807875