在什么情况下,你会使用.git/info/exclude而不是~/.gitignore(core.excludesFile)来排除文件?

3
我有点困惑,你何时使用 .git/info/exclude 而不是 ~/.gitignore (core.excludesFile) 来排除文件?我很清楚什么时候需要使用项目存储库中的 .gitignore 文件,该文件特定于该项目,版本受控并通过克隆与其他存储库共享,但是我无法理解上述两个用户特定的要忽略的文件之间的区别。
因此,我正在寻找 ~/.gitignore.git/info/exclude 之间的区别,而不是 .gitignore (project dir).git/info/exclude
更新:我无法想象何时需要使用 .git/info/exclude,因为我想要忽略的所有文件都在 .gitignore~/.gitignore 中。如果有人可以给出一个应该特别包含在 .git/info/exclude 中的模式/文件示例,那将非常有帮助。

不,那不是我要找的。我已经知道这两者之间的区别了。在项目目录中的.gitignore和~/.gitignore是不同的文件。 - Deven
我正在寻找~/.gitignore和.git/info/exclude之间的区别,而不是.project dir下的.gitignore和.git/info/exclude之间的区别。 - Deven
这不就是问题所讨论的吗?.gitignore文件的位置并不重要(除了一些特定情况)。 - evolutionxbox
~/.gitignore适用于所有仓库,而这个.gitignore是特定于仓库的。 - Saurabh P Bhandari
@SaurabhPBhandari 我的问题是 ~./gitignore.git/info/exclude 有什么不同。如果您能举个例子,那将非常有帮助。先谢谢了。 - Deven
显示剩余2条评论
2个回答

4
将文件名或模式放置在全局忽略文件 (~/.gitignore$XDG_CONFIG_HOME/git/ignore) 中,将会在所有仓库中抑制对它的投诉。将相同的名称或模式放置在每个仓库的忽略文件 (.git/info/exclude) 中,只有该仓库才会被抑制。
这两者并没有固有的优劣之分,它们只是不同。值得注意的是,古老的 Git 只支持仓库内的 .gitignore.git/info/exclude 文件,即没有用户级别的全局 ~/.gitignore
如果您使用一个编辑器,其备份文件的名称以 (比如) $ 结尾,而其他人不是这样做的(且其他人的备份文件已经在提交的 .gitignore 中),那么您可以将 *$ 放入您的个人 ~/.gitignore 中。如果您只使用这个编辑器处理这个项目,那么将其放入 .git/info/exclude 中可能更合适。
如果项目本身生成了许多待忽略的文件,则将这些名称放入提交到项目中的 .gitignore 文件中是有意义的,但如果有某些原因不能这样做,则将这些模式放入 .git/info/exclude 中是有意义的:它们不应该在其他项目中被忽略。

感谢您详细的回答。我理解您的观点,不过,一般情况下(留下一些特殊情况),可以安全地假设 .gitignore~/.gitignore 就足以指定应该被忽略的内容了吗? - Deven
@DevendraSwami 它不是哪些问题引起的关注? - evolutionxbox
据我所知,@evolutionxbox 没有任何东西。只是想知道是否有遗漏的内容。像 .git/info/exclude 这样的东西很好,但并没有提供任何真正的收益。这也可能是一个传统问题,因为古老的 git 没有全局 ~/.gitignore - Deven
1
我不知道如果Git今天被设计,而且他们想在最初的设计中包括~/.gitignore,Git的设计者是否会费心去定义.git/info/excludes文件。然而,从历史上看,那是一个人把编辑器备份放置的地方,如果某个项目的维护者不会把你的编辑器备份模式放在他们的repo的.gitignore文件中。 - torek
@torek。谢谢。完全同意。 - Deven

1

来自文档

特定于特定存储库的模式,但不需要与其他相关存储库共享(例如,存在于存储库内部但特定于一个用户工作流程的辅助文件)应放入$GIT_DIR/info/exclude文件中。

用户希望Git在任何情况下都忽略的模式(例如,用户选择的编辑器生成的备份或临时文件),通常会进入用户~/.gitconfig中由core.excludesFile指定的文件。

如果您正在使用IDE,则通常具有特定于IDE的文件,例如项目设置、工作区设置等。这些文件是用户和存储库(不同的项目使用不同的IDE…)特定的。可以使用$GIT_DIR/info/exclude文件来排除此类文件。

关于此~/.gitconfig,编辑器可能会在目录中保留一些备份或临时文件,例如nano在编辑过程中保持交换文件,因此应全局忽略此类文件以在本地系统中的所有存储库中生效。

仍然有一个问题,可以假设.gitignore和~/.gitignore足以指定应该被忽略的内容吗? .gitignore不应该是一个问题,因为它是特定于存储库的,但是~/.gitignore可能会出现问题。考虑这样一种情况:使用~/.gitingore全局忽略了一个文件,用于所有本地存储库,结果发现该文件是另一个存储库的必要组件,在这种情况下应使用$GIT_DIR/info/exclude。

你能举个例子说明$GIT_DIR/info/exclude文件应该具体包含什么,而其他两个文件不包括什么吗? - Deven
难道在 ~/.gitignore 中指定这些文件不是更安全的做法吗?因为通常同一个 IDE 会用于多个项目,这样你就不需要为每个仓库都指定它们了。 - Deven
问题仍然存在:可以安全地假设.gitignore~/.gitignore足以指定应该被忽略的内容吗?因为上面给出的示例可以包含在~/.gitignore中。 - Deven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接