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

Max*_*ams 31 git

我有一个分支(让我们称之为B)忽略某个文件,在某些其他分支(例如分支A)中不会忽略该文件.当我从分支B切换到分支A,然后再次返回到B时,该文件已被删除.

这是正常的吗?我可以看到它会如何发生,在分支B认为它不存在的意义上,分支A认为它是,所以当我回到B时它"整理它".但它有点烦人.

有什么建议?

Von*_*onC 5

由于唯一可行的解​​决方案是始终跟踪文件f,因此您只能在分支中添加带有gitattributes过滤器驱动程序B涂抹/清理过程:

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

检查分支时B:

  • 涂抹过程会改变:

    • 保存f临时文件中的内容
    • f用一个fbis文件替换内容(一个跟踪文件,包含,对于分支B," B内容f")
  • 清洁过程会:

    • 保存f内容(已修改B)fbis(fbis通过f分支中的修改提交B)
    • 恢复f内容(使用临时文件),意思f是未提交(忽略B)

您可以在分支机构增加,还是B,一个自定义的合并驱动器,这将保护fbis从其他分支合并到的情况B:
合并驱动程序将始终保持B的版本fbis内容,确保被忽略的文件f回来,每当分支它的内容B被检查出.

由于这些驱动程序(过滤器和合并)未在其他分支中提交,因此文件"f"将在其他分支中提交并进行所有修改.
在分支机构中B,其内容永远不会改变,但是f每当B签出时,仍然会恢复所做的"本地修改" .

如果不需要内容恢复,则无需管理fbis.
只需保留过滤器驱动程序,您就可以确定无论您f在分支机构中做了哪些修改B,这些更改都将永远不会被提交,从而有效地忽略了f内容.

  • 哇,@ VonC这是一个惊人的答案,非常感谢你.我不确定我是否足够聪明才能理解它......坚持下去,需要另外一杯咖啡...... (2认同)

Cas*_*bel 2

这很正常,虽然我对其中的一步感到有点惊讶。

当你从 B 切换到 A 时,git 发现文件必须更新以匹配 A 的版本,并且会默默地执行此操作,因为你忽略了它,并表示就分支 B 而言,该文件并不重要。它必须这样做 - 唯一的选择是拒绝签出分支 A。(如果文件没有被忽略,它会拒绝,说“未跟踪的工作树文件''将被合并覆盖”。我真的很惊讶在这种情况下它也不会这样做。有人知道这是功能还是错误吗?)

当您切换回时,git 发现分支 B 没有该文件,并将其删除。同样,它必须这样做。它无法读取您的想法并意识到一分钟前存在的被忽略的文件是您想要恢复的文件 - 它只是为您提供分支 B 的内容,该内容表明该文件不存在。

正如 ewall 在评论中建议的那样,如果您希望文件在这些转换中幸存下来,则需要由所有分支跟踪它,或者在所有分支中忽略它。


归档时间:

查看次数:

5669 次

最近记录:

6 年,5 月 前