我需要一个"机器人用户"通过一些脚本与git bare远程存储库交互。这个裸仓库被称为中央仓库。
这次,这个机器人用户有自己的本地存储库,它不是一个裸存储库(他必须签出分支,合并分支,......)。但是每天晚上,当他醒来工作时,他需要在当地拥有一个完美的中央仓库镜像(除了主人之外的每个分支都可以进化,一些新的分支可以创建,......)。
最好的方法是什么?
答案 0 :(得分:1)
不幸的是,这并不像之前的回答所说的那样简单,因为git pull
只将更改合并到当前分支中。
你的机器人需要做的第一件事是git fetch
- 虽然git pull
(默认情况下)会导致这种情况发生,但我建议直接执行fetch
避免可能混淆的副作用。
执行fetch
时,获得的内容取决于remote.central.fetch
配置选项(对于您指定的名为central
的远程)。 clone
后的默认设置(假设您未向mirror
指定single-branch
,depth
或no-single-branch
clone
之类的内容command ...)将获取所有分支的历史记录,并更新远程分支引用(例如refs/origin/central/master
以指示master
上central
分支的条件。
如果您坚持使用,那么您的本地参考仍然与遥控器不同步。这是否是一个问题取决于您的机器人正在做什么。这里有很多排列......你的机器人可能会在fetch
之前进行本地更改,如果是这样,你想用它们做什么?您的机器人会在fetch
之后进行更改吗?最终它会推动这些更改吗?加上任何数量的“如果你想让历史看起来像X,做Y”的考虑。
我会说,如果您的意图是移动所有本地分支以反映central
上的相应分支,则有两种基本方法:
1)将refspec保留为默认设置,然后迭代更新本地引用的分支以匹配远程。这使您有机会处理任何本地更改(通过将它们合并或重新定位到分支历史记录中),但需要相当多的脚本。
2)将refspec更改为与镜像克隆相似。 (我理解这就是你所得到的,你如何表达这个问题。)这可能是有风险的,因为局部变化可能会被破坏,你仍然需要识别{{1上已删除的任何分支}}。这里的设置类似于
central
答案 1 :(得分:0)
这很简单(如果用完美的镜子你的意思是all branches, but not other refs)。
克隆没有--bare
的裸仓库会产生正常的仓库。完成这一次后,您的机器人只需
git pull
他上班的时候。