我有一个分支(我们称它为 B)忽略了某个文件,该文件在其他一些分支(例如分支 A)中没有被忽略。当我从分支 B 切换到分支 A,然后再回到分支 B 时,文件已被删除。
这正常吗?从某种意义上说,分支 B 认为它不存在,而分支 A 认为它存在,所以当我回到 B 时,它会“整理它”,我可以看到它会如何发生。但这有点烦人。
有什么建议吗?
最佳答案
由于唯一可行的解决方案是始终跟踪文件“f
”,因此您可以仅在分支B
中添加一个smudge/clean process。用gitattributes filter driver :
当检查分支 B
时:
涂抹过程会发生变化:
- 将
f
的内容保存到一个临时文件中 - 将
f
的内容替换为一个fbis
文件(一个跟踪文件,对于分支B
,“B
f
") 的内容
- 将
清理过程将:
- 在
fbis
中保存f
内容(在B
中修改)(fbis
与一起提交f
分支B
中的修改) - 恢复
f
内容(使用临时文件),意味着f
未提交(在B
中忽略)
- 在
您仍然可以在分支 B
中添加 custom merge driver这将在从其他分支 merge 到 B
的情况下保护 fbis
:
merge 驱动程序将始终保留 B
版本的 fbis
内容,确保被忽略的文件 f
在分支 B< 时恢复其内容
已 checkout 。
由于这些驱动程序(过滤器和 merge )未在其他分支中提交,因此文件“f”及其所有修改在其他分支中提交。
在分支 B
中,它的内容永远不会改变,但对 f
所做的“本地修改”仍然会在 B
checkout 时恢复.
如果不需要该内容恢复,则无需管理 fbis
。
只要保留过滤器驱动程序,您就可以确保无论您在分支 B
中对 f
做任何修改,这些更改将永远不会被提交,有效地忽略 f
内容。
关于当我切换分支时,Git 正在删除一个被忽略的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2691618/