Car*_*ina 8 git version-control continuous-integration git-rerere
据我所知,通过保存冲突解决信息来实现项目同步非常有用,但我并不完全清楚如何使用和配置它.
我想配置我的持续集成(CI)环境.建议这样做吗?
请不要在另一个问题上标记副本:启用git rerere是否有任何缺点?.因为我的怀疑与"因此是否有任何不利因素"无关?它会导致哪些潜在的问题不会发生呢?
tor*_*rek 21
git rerere?由于该文件指出,rerere代表再使用再有绳重解决方案.
但这并没有真正解释它是什么.值得首先添加,这里,它git rerere本身 - 命令 - 不是你必须运行的东西.它只有六子:clear,forget,diff,status,remaining,和gc.这些记录中没有或重用分辨率可实际上,git rerere clear和git rerere forget <path>刚刚放弃一些记录分辨率.该gc命令是相似的,而是指那些都老了,而不是目前的.
大多数工作都是在设置的情况下进行的rerere.enabled(这使得Git git rerere在适当的时间运行,没有子命令).你可以git rerere自己运行没有子命令,但这并没有真正做任何重要的事情,因为Git会自己做.
git config rerere.enabled true一旦设置rerere.enabled,当混帐做了合并,合并的任何,包括那些来自git am与git rebase和git cherry-pick等等,而不仅仅是那些从git merge自身和撞击发生冲突,Git会:
git commit当时)你为解决它们所做的工作.这里有一个缺失的步骤,这就是为什么从2开始编号的原因.步骤1是:
如果记录的分辨率完全解决冲突,则步骤2-4变得多余.Git可能仍会运行它们(我不确定它是否会)更新记录的分辨率上的时间戳.
一旦你设置rerere.enabled,它就是合并自己的行为,它们都会产生冲突并且(因为它自动运行git rerere而没有参数)记录它们然后尝试重新使用任何现有的记录分辨率.这是记录最终解决方案的承诺行为(因为Git会自动git rerere为您重新运行).所以这一切都是自动的 - 您只需要通过运行自己的git diff命令确保您以前重复使用的分辨率是正确的.如果没有,只需像往常一样修复文件,添加和提交,Git将用新的解决方案替换录制的分辨率.
请注意,你必须仍然git add和git commit!您应该始终检查合并结果(和/或运行测试) - 尽管您应该始终这样做,无论您的rerere.enabled设置如何.
正如VonC在评论中指出的那样,如果您之前没有记录的合并冲突解决方案,则可以在这些分辨率上"训练"rerere数据库. Git源代码中有一个贡献的脚本来执行此操作; 它也可以在线获得.