据我了解,通过保存冲突解决信息对项目同步很有用,但我并不完全清楚如何使用和配置它。
我想为我的持续集成 (CI) 环境进行配置。是否建议这样做?
请不要用另一个问题标记重复:启用 git rerere 有什么缺点吗?. 因为我的怀疑与“那么启用 rerere 有什么缺点吗?它会导致哪些潜在问题不会发生?”
据我了解,通过保存冲突解决信息对项目同步很有用,但我并不完全清楚如何使用和配置它。
我想为我的持续集成 (CI) 环境进行配置。是否建议这样做?
请不要用另一个问题标记重复:启用 git rerere 有什么缺点吗?. 因为我的怀疑与“那么启用 rerere 有什么缺点吗?它会导致哪些潜在问题不会发生?”
git rerere
?如文档所述,rerere
代表重新使用记录的重新解决方案。
不过,这并不能真正解释它是什么。值得首先在这里添加,它git rerere
本身——命令——不是你必须运行的东西。它只有六个子命令:clear
、forget
、diff
、status
、remaining
和gc
。这些都没有记录或重用决议——事实上,git rerere clear
只是git rerere forget <path>
丢弃了一些记录的决议。该gc
命令类似,但指的是旧的,而不是当前的。
大部分工作发生在(这使得 Git在适当的时间运行,没有子命令,为你)的设置。您可以自己不使用子命令运行,但这并没有真正做任何重要的事情,因为 Git 会自己做。rerere.enabled
git rerere
git rerere
git config rerere.enabled true
一旦你设置rerere.enabled
了 ,当 Git 进行合并时——任何合并,包括来自git am
andgit 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 源代码中有一个贡献的脚本来执行此操作;它也可以在线获得。
为您的 CI 环境启用是没有意义的rerere
,因为您的 CI 环境从一开始就不应该解决合并冲突。为什么你认为你会想要它?