我需要拥有一个"机器人用户",该"机器人用户"通过某些脚本与git裸露的远程存储库进行交互。这个裸露的存储库称为中央仓库。
这次,该机器人用户拥有自己的本地存储库,这不是裸露的存储库(他必须结帐分支,合并分支,...)。但是每天晚上,当他醒来上班时,他需要在当地的中央仓库中有一个完美的镜子(除了大师外,每个分支都可以发展,可能会创建一些新的分支机构,...)。
最好的方法是什么?
不幸的是,这并不像以前的答案那样简单,因为git pull
仅将更改纳入当前分支。
您的机器人需要做的第一件事是git fetch
-虽然git pull
(默认情况下)确实会导致这种情况,但我建议直接执行fetch
,以避免潜在的副作用。
执行fetch
时,您得到的内容取决于remote.central.fetch
配置选项(对于指示的遥控器central
)。clone
之后的默认设置(假设您没有指定没有no-single-branch
的mirror
,single-branch
或depth
之类的内容,而无需CC_12 clone
命令...central
上的master
分支的条件)。
如果您坚持下去,那么您的本地裁判仍然与遥控器不同步。问题是否取决于您的机器人在做什么。这里有很多排列...您的机器人可能在fetch
之前有本地更改,如果是这样,您想对它们做什么?您的机器人会在fetch
之后进行更改,最终会推动这些更改吗?再加上任意数量的"如果您希望历史记录看起来像X,请执行Y"考虑。
我会说,如果您的目的是移动所有本地分支以反映central
上的相应分支,则有两种基本方法:
1)将RefSpec留在默认设置中,然后在分支上迭代以更新本地ref以匹配遥控器的分支。这使您有机会处理任何本地更改(通过合并或重新列入分支机构历史记录),但是需要大量的脚本。
2)更改RefSpec,看起来像在镜子克隆上。(我知道这是您所能获得的,您如何措辞问题。)这可能是有风险的,因为本地变化可能会被抓住,您仍然必须确定在central
上删除的任何分支。这里的设置将是
git config remote.central.fetch +refs/*:refs/*
它很简单(如果是完美的镜子,则是所有分支,但不是其他参考)。
在没有--bare
的情况下克隆裸仓的会导致正常回购。完成一次后,您的机器人只需
git pull
当他上班时。