坚持下去,这个人会变得粗糙。我正在尝试清理我只能描述为病态的Mercurial仓库,看起来最简单的“修复”是在两个分支之间交换一个目录。我不确定我是否可以充分解释这种情况,但我会试一试。
我们有一个工具可以从大量输入中生成原始源。 (数百或数千个输入文件,类似数量的输出文件。)然后在声明为部署准备好之前,根据需要对此输出进行手动调整和优化。该工具在提供配置文件等的目录中运行。
类似的东西:
proj/.hg
/input
/output
/config-env
现在,发生了一个分支用于调整,而不是(对我来说)共享mq方法的逻辑选择。 (该团队当时并不知道mq,大多数都是CVS培训,但值得赞扬的是,他们 致力于改善工作流程。)
这是生气的地方。
命名分支是原始输出分支,默认分支是手调整分支。
不断创建工具的输出,然后hg update raw
,然后hg merge
,尝试将工具优化合并到输出到原始分支,然后合并 back 进入'default'分支以合并细化和先前的手部补丁,使用合并失败列表作为需要进一步手动编辑的选择列表。
即两个分支之间存在这种疯狂的循环,这使得开发成为脆弱和错误的小噩梦。这就是我想要清理的东西。我想要的是默认分支是原始输出,以及包含手部补丁的新“部署”分支,合并只有一个方向,从默认到部署。仍然不是最优的,IMO,但直到我能说服权力是mq是要走的路,这是一个相当大的改进。
但是。还有更多。随着时间的推移,config-env和输入目录被更改,但更改并未保持干净并且在两个分支之间保持同步。输入和config-env的更改位于默认分支上,但匹配的原始输出位于原始分支上,其中包含过时输入和config-env,并不属于那里。我已经询问过如何删除陈旧文件是不必要的,但有些人认为我们需要保留它们。出于这个原因,我想在两个分支之间仅交换输出目录。
我考虑过像hg convert --branchmap swap.txt --filemap only-output.txt --datesort
这样的东西,但后来意识到我只会在结果仓库中得到输出目录。我可能能够将两个分支中的输出目录逐字地剥离到它们自己的repos中,并且交换分支名称,然后将两个repos合并在一起(no-output,output-with-swapped-branches ),但我认为也许这里有人会有更好的主意。
当然,我的目标是让一个带有mq补丁列表的分支来存储手部补丁,并且该补丁列表是共享仓库的一部分,但是babysteps是有序的。
如果push推进,我认为我们可以消除两个分支上输出目录的大多数历史记录,但我们确实要求在两个分支上保留某些标记版本。