我创建了一个裸仓库来发布我的存储库,但我无法弄清楚如何使用主存储库的当前状态更新裸存储库。
答案 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
来看到这个解决方案
答案 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)