停止跟踪和忽略git SourceTree中的文件有什么区别

时间:2019-04-23 12:34:29

标签: git atlassian-sourcetree

当我仅将文件添加到忽略列表时(“忽略”即可),对文件进行更改后,它仍会显示在未暂存的部分上。 如何正确忽略它,以免再次被跟踪?

添加忽略列表文件和“停止跟踪”文件有什么区别?

困惑。

2 个答案:

答案 0 :(得分:0)

如果已经添加了文件(例如,它是HEAD修订版的一部分,您正在使用的修订版),则对该文件进行跟踪。在这一点上,该文件不能被忽略。您可以将其添加到.gitignore中,并且git会继续告诉您该文件已被修改(如果是这种情况)。为了让您忽略它,它必须为untracked(如我所说,如果已经被跟踪)。为此,您可以使用git rm --cached the-file将其从修订版中删除,同时将其保留在工作树中。如果文件已经在.gitignore上,则不会再次报告。但是,如果您想返回到仍包含该文件的修订版本之一,会发生什么情况? Git会抱怨。如果您强制结帐,回去怎么办?文件不见了!因此,有时候如果您想完全摆脱历史记录,最好重写历史记录……这完全取决于您需要付出多少努力。

答案 1 :(得分:0)

“停止跟踪”从索引中删除文件。该文件将不包含在下一次提交中。如果该文件已包含在上一次提交中,则git会将其解释为从上一次提交进行到下一次提交时删除文件的指令。如果该文件未包含在上一次提交中,则该文件将成为未跟踪的文件(就像该文件刚刚被创建,而git尚未被告知)。

“忽略文件”为文件的路径创建git忽略规则。忽视规则被广泛误解。忽略规则告诉git,“如果看到路径/文件名与此模式匹配的未跟踪文件,则(默认情况下)应忽略它”。两个关键点:

1)如果您说要忽略跟踪的文件(例如上一次提交中的文件),则实际上不会执行任何操作。 (如果您执行此操作并取消跟踪文件,则可以执行某些操作-可能不是您想要的。我会再说一遍。)

2)尽管用户界面说您可以忽略文件,但实际上忽略规则适用于路径。您要告诉git忽略它可能在当前与该现有文件关联的路径/名称下找到的所有未跟踪文件。

我猜您可能想做的是忽略文件的更改,同时保留历史版本中的当前版本。上述选项不仅没有做到这一点,而且实际上没有没有选项可以做到这一点。 (有许多经常被建议的解决方法,但我不建议其中任何一种,因为它们都有不良的副作用。)

值得注意的是,某些人尝试了“忽略对跟踪的文件不起作用,因此取消跟踪文件”的直接方法。同样,如上所述,如果您希望以后的提交都认为您已删除了文件,那么这才是正确的解决方案。

总而言之,如果您要求在提交中保持文件原样,但是需要对文件进行本地更改(应忽略),则不能很好的支持。 (不仅仅是git无法做到这一点;没有工具可以做到这一点,因为这是一个相互矛盾的要求。)因此,您确实应该退后一步,看看如何可以修改过程而不需要这样做。 / p>

(人们问的最常见原因-可能是也可能不是您的原因-是他们想在本地修改源代码树中的“就地”配置文件。如果您对此问题进行搜索,则会发现一个SO帖子的数量,详细说明了避免该问题的方法。)