我需要一个“机器人用户”,它可以通过一些脚本与git裸远程存储库进行交互。这种裸露的回购被称为中央回购。
A这一次,这个机器人用户有自己的本地存储库,而不是裸存储库(他必须签出分支,合并分支,.)。但是每天晚上,当他醒来工作时,他需要在当地有一个完美的中央回购的镜子(除了主人之外,每一个分支都可以进化,一些新的分支可以被创造出来,.)。
做这件事的最好方法是什么?
发布于 2017-09-25 20:38:23
不幸的是,这并不像前面的答案那样简单,因为git pull只将更改合并到当前分支中。
您的机器人需要做的第一件事是git fetch -虽然git pull (默认情况下)确实会导致这种情况发生,但我建议直接执行fetch以避免潜在的混乱副作用。
当您执行fetch时,您得到的信息取决于remote.central.fetch配置选项(对于您所指出的远程命名的central )。clone之后的默认设置(假设您没有为clone命令指定像mirror、single-branch或depth这样的不带no-single-branch的东西.)将获取所有分支的历史记录,并更新远程分支参考(例如,refs/origin/central/master以指示master分支在central上的状态)。
如果你坚持这样做,那么你的本地裁判仍然与遥控器不同步。这是否是个问题取决于你的机器人在做什么。这里有很多排列..。您的机器人可能在fetch之前进行了本地更改,如果是的话,您想对它们做些什么?您的机器人会在fetch之后进行更改吗?最终它会推动这些更改吗?再加上任何数量的“如果你希望历史看起来像X,做Y”的考虑。
我要说的是,如果您的目的是移动所有本地分支以反映central上相应的分支,那么有两种基本方法:
1)将refspec保留在默认设置中,然后遍历更新本地引用的分支,以与远程匹配。这为您提供了处理任何本地更改的机会(方法是合并或将它们重新定位到分支历史中),但这需要相当多的脚本。
2)改变萤火虫规格,使其看起来像照镜子的克隆人。(我觉得这就是你的意思,你是如何表达这个问题的。)这可能是有风险的,因为本地更改可能只会受到打击,而且您仍然需要识别在central上删除的任何分支。这里的设置应该是这样的
git config remote.central.fetch +refs/*:refs/*发布于 2017-09-25 17:34:50
这很简单(如果说完美镜像,你指的是all branches, but not other refs)。
在没有--bare的情况下克隆裸露的回购结果是正常的回购。在做了一次之后,你的机器人只需要
git pull当他开始工作的时候。
https://stackoverflow.com/questions/46409739
复制相似问题