我已经阅读了关于git的rerere功能的各种内容,我正在考虑启用它.但我没有看到有人提到使用它时可能出现的任何问题.我必须假设有一个缺点,或者它可能默认启用.那么启用rerere有什么缺点吗?哪些潜在的问题会导致不会发生?
好的,所以我真的很喜欢git rerere命令.虽然,我还没有真正使用它,除了让它自动神奇地记录我的冲突并为我解决它们.但是,我确实搞砸了我的冲突解决方案中的一个很大的rebase(使用最新版本重新定义了一个非常陈旧的功能分支).
feature -> a - b - c - d
release -> e - f - g - h
rebase/feature -> e - f - g - h - a' - b' - c' - d'
Run Code Online (Sandbox Code Playgroud)
所以,比方说b'有一个不正确的合并(感谢我!),我想重新录制它.我该怎么办?我已经看过在Rerere Your Boat中提到的git checkout --conflict选项,但是我不太清楚它是如何工作的,如果它适用于这里.也许我必须检查合并冲突状态并在我正确解决此冲突后运行git rerere?
通常情况下,我只会提交rebase分支的提示,但这是一个扔掉.我只是提前处理冲突,因此当我与该功能团队同步时,我们将所需的时间最小化.合理?
我见过人们建议所有开发人员在他们的机器上设置符号链接C:\project\.git\rr-cache到共享文件夹\\server\rr-cache.
但是,如果可以的话,通过将文件夹包含在git存储库中来共享文件夹似乎更方便.我见过人们提到这个解决方案,但实际上并不是这样做的.
有任何想法吗?
git version-control git-merge merge-conflict-resolution git-rerere
我正在使用git rerere,它很有用,但有一个问题:当它自动解析文件时,它不会将其标记为已解析(例如使用git add).因此,如果我运行'git mergetool',它会打开文件,好像它仍然存在所有冲突.
到目前为止,我已经制作了一个我可以调用的小shell脚本,它扫描所有标记为冲突标记冲突的文件(例如>>>>>>>),如果没有,则调用git-add.
有没有更好的方法呢?我错过了git rerere的一些旗帜?
我正在使用git-rerere它的预期目的,在这些分支开发时逐步记录两个分支(主分支和主题分支)之间的冲突解决方案,而不会创建不必要的合并提交.然而,即使在阅读了git-rerere manpage后,我还不清楚rerere何时实际记录了我的冲突解决方案.我检测和解决新合并冲突的标准工作流程是git merge master从主题分支,解决冲突,然后暂存所有文件并提交合并git commit -m "Finished test merge",然后撤消合并使用git reset --hard HEAD^,只留下存储的记录分辨率git-rerere.
然而,这似乎有点傻.创建一个提交,然后撤消它只是为了记录分辨率?在阅读了联机帮助页后git-rerere,我仍然不清楚它何时记录我的决议.仅仅暂存冲突的文件是否足够,或者在解决冲突后我是否真的需要创建合并提交,就像我一直在做的那样?
我正在尝试使用共享的rerere缓存来自动化一次性集成/测试分支.
我们的想法是,当推送分支时,rerere缓存应该是最新的,以便这些合并始终通过.但是,他们没有:
>>> git merge --no-ff invoicing
Staged 'analysisrequest.py' using previous resolution.
Staged '__init__.py' using previous resolution.
Auto-merging __init__.py
CONFLICT (content): Merge conflict in __init__.py
Auto-merging analysisrequest.py
CONFLICT (content): Merge conflict in analysisrequest.py
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)
在这一点上,rerere已经上演了它所记住的决议,并且不存在实际的冲突.我可以运行git commit,然后继续,但我的集成测试构建脚本会看到错误.我已经尝试添加--rerere-autoupdate到git merge命令,但没有任何改变.我已将repo配置为启用并自动应用rerere匹配.
我怎么能要求git merge使用我以前的分辨率并且如果它们足够的话可以继续而不失败?
我可以告诉Git重用现有合并提交中的冲突解决方案吗?在提交时我被禁用了.新的合并提交在合并的"我们的"一侧包含一些额外的提交(但是他们不应该在修改不同的文件集时引入新的冲突).
例如,请使用以下DAG:
m [master] Add new stuff
*
| o [old-master] Merge branch A (conflicts)
|/a [branch A]
n *
* *
*/
*
Run Code Online (Sandbox Code Playgroud)
现在,我想要做的是将提交m和m^分支old-master(然后使其成为新的主).我不想简单地合并master到old-master,因为它会创建一个新的合并提交(尽管没有冲突).我想o用m和a作为父母重新创建提交.
新的DAG应该如下所示:
p [old-master] Merge branch A (same conflict resolution as old commit o)
/|
m | [master] Add new stuff
* |
| a [branch A]
n *
* *
*/
*
Run Code Online (Sandbox Code Playgroud)
我不介意使用rerere,如果我之后可以告诉它记录现有合并commit(o)的解析.
这是交易.master有一个文件file1.我分支,并删除分支中的该文件.同时,我修改了master上的file1.繁荣,冲突.
当我将我的分支合并到master时,解决方法是删除该文件.我试图使用git rerere能够多次执行相同的分辨率,但正如您在下面看到的那样,当您删除文件时,它不会记录分辨率.
我没有具体找到这方面的文件,这只是一个限制rerere吗?
|system| brad-macbook-air in ~/tmp
± bb+ih |master ?| ? touch file1.txt
|system| brad-macbook-air in ~/tmp
± bb+ih |master ?| ? git add . && git commit -m 'File1'
[master (root-commit) 95a807e] File1
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1.txt
|system| brad-macbook-air in ~/tmp
± bb+ih |master ?| ? git checkout -b delete_file_1
Switched to a new branch 'delete_file_1'
|system| brad-macbook-air in ~/tmp
± bb+ih |delete_file_1 ?| ? git …Run Code Online (Sandbox Code Playgroud) 据我所知,通过保存冲突解决信息来实现项目同步非常有用,但我并不完全清楚如何使用和配置它.
我想配置我的持续集成(CI)环境.建议这样做吗?
请不要在另一个问题上标记副本:启用git rerere是否有任何缺点?.因为我的怀疑与"因此是否有任何不利因素"无关?它会导致哪些潜在的问题不会发生呢?