镜像git非验证库



我需要拥有一个"机器人用户",该"机器人用户"通过某些脚本与git裸露的远程存储库进行交互。这个裸露的存储库称为中央仓库。

这次,该机器人用户拥有自己的本地存储库,这不是裸露的存储库(他必须结帐分支,合并分支,...)。但是每天晚上,当他醒来上班时,他需要在当地的中央仓库中有一个完美的镜子(除了大师外,每个分支都可以发展,可能会创建一些新的分支机构,...)。

最好的方法是什么?

不幸的是,这并不像以前的答案那样简单,因为git pull仅将更改纳入当前分支。

您的机器人需要做的第一件事是git fetch-虽然git pull(默认情况下)确实会导致这种情况,但我建议直接执行fetch,以避免潜在的副作用。

执行fetch时,您得到的内容取决于remote.central.fetch配置选项(对于指示的遥控器central)。clone之后的默认设置(假设您没有指定没有no-single-branchmirrorsingle-branchdepth之类的内容,而无需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

当他上班时。

最新更新