当我切换分支时,Git 正在删除一个被忽略的文件

标签 git

我有一个分支(我们称它为 B)忽略了某个文件,该文件在其他一些分支(例如分支 A)中没有被忽略。当我从分支 B 切换到分支 A,然后再回到分支 B 时,文件已被删除。

这正常吗?从某种意义上说,分支 B 认为它不存在,而分支 A 认为它存在,所以当我回到 B 时,它会“整理它”,我可以看到它会如何发生。但这有点烦人。

有什么建议吗?

最佳答案

由于唯一可行的解​​决方案是始终跟踪文件“f”,因此您可以仅在分支B 中添加一个smudge/clean process。用gitattributes filter driver :

https://raw.github.com/adisp007/ProGit/master/figures/18333fig0702-tn.png

当检查分支 B 时:

  • 涂抹过程会发生变化:

    • f 的内容保存到一个临时文件中
    • f 的内容替换为一个 fbis 文件(一个跟踪文件,对于分支 B,“ Bf")
    • 的内容
  • 清理过程将:

    • 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/

相关文章:

windows - 没有 bash/cygwin 的 git

git - 不小心在我的主文件夹中创建了一个 Git 存储库 : How to remove the repository

git - 如何仅将选定的文件包含到 git 存储库中并排除所有其余文件?

git - 使用git查找文件特定行首次引入token

git - Alias 创建别名

git - RestKit 与 Xcode4 但不作为 GitHub 子模块

ios - 我应该在 iOS 应用程序的 git 存储库中忽略哪些文件/文件夹?

Git SSH 错误 : "Connect to host: Bad file number"

git - 如何将 3 次提交与 1 次 master merge 为 1 次提交?

git - 如何将 git commit date 插入到正在提交的文件中?