【问题标题】:When would you use .git/info/exclude instead of ~/.gitignore (core.excludesFile) to exclude files?你什么时候会使用 .git/info/exclude 而不是 ~/.gitignore (core.excludesFile) 来排除文件?
【发布时间】:2020-01-10 00:26:26
【问题描述】:

我有点困惑你什么时候会使用.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 是不同的文件。
  • 我正在寻找 ~/.gitignore 和 .git/info/exclude 之间的区别,而不是 .gitignore(项目目录)和 .git/info/exclude 之间的区别。
  • 问题不就是这个意思吗? .gitignore 的位置无关紧要(除了一些细节)
  • ~/.gitignore 这适用于所有存储库,此 .gitignore 是特定于存储库的
  • 不,这两个位置的 .gitignore 文件服务于完全不同的目的。随意在官方文档中查看相同的内容git-scm.com/docs/gitignore

标签: git version-control gitignore


【解决方案1】:

在全局忽略文件(~/.gitignore$XDG_CONFIG_HOME/git/ignore)中放置文件名或模式将抑制所有存储库中有关它的投诉。在每个存储库忽略文件 (.git/info/exclude) 中放置相同的名称或模式将仅禁止针对该存储库的投诉。

这些都不是天生的优劣;他们只是不同。值得注意的是,古代 Git 仅支持存储库内的 .gitignore.git/info/exclude 文件,即没有每个用户的全局 ~/.gitignore

如果您个人使用的编辑器制作的备份文件的名称以(比如)$ 而不是.bak.~ 结尾,而其他人没有(并且其他人的备份文件已经在一个承诺的.gitignore),你可以把*$放在你的个人~/.gitignore中。如果您只将此编辑器用于这个项目,则将其放入.git/info/exclude 可能更有意义。

如果项目本身产生了很多被忽略的文件,将这些名称放入提交到项目中的.gitignore 文件中是有意义的,但如果有某些原因不能 完成后,将这些模式放入.git/info/exclude 是有意义的:在其他项目中不应忽略它们。

【讨论】:

  • 感谢您详细的回答。我理解你的观点,但是,总的来说(留下一些特殊情况),假设.gitignore~/.gitignore 足以指定应该忽略的内容是否安全?
  • @DevendraSwami 有什么问题不是?
  • @evolutionxbox 据我所知没有。只是想知道我是否遗漏了什么。就像.git/info/exclude 一样,很高兴拥有,但没有提供任何真正的收益。这也可能是一个遗留问题,因为古代 git 没有全局 ~/.gitignore
  • 我不知道,如果今天正在设计 Git并且他们认为在初始设计中包含 ~/.gitignore,他们——Git 设计者——是否会费心完全定义一个.git/info/excludes 文件。不过,从历史上看,如果某个项目的维护者不将您的编辑器备份模式放在他们的 repo 的 .gitignore 文件中,那么就会出现编辑器备份卡住的情况。
  • @torek。谢谢。完全同意。
【解决方案2】:

来自docs

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

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

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

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

问题仍然存在;假设 .gitignore 和 ~/.gitignore 足以指定应该忽略什么?

.gitignore 应该不是问题,因为它是特定于存储库的,但是 ~/.gitignore 可能是一个问题,考虑使用~/.gitingore 对所有本地存储库全局忽略文件的情况,结果是该文件是另一个存储库的必要组件,在这种情况下应该使用$GIT_DIR/info/exclude

【讨论】:

  • 你能举个例子,应该具体包含在 $GIT_DIR/info/exclude 文件中而不是其他两个文件中吗?
  • ~/.gitignore 中指定这些文件不安全,因为您不需要为每个存储库指定它们,因为同一个IDE 通常用于多个项目。
  • 问题依然存在;假设.gitignore~/.gitignore 足以指定应该忽略的内容是否安全?因为,上面给出的例子可以包含在~/.gitignore中。
猜你喜欢
  • 2014-05-19
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 2020-01-10
  • 2010-11-16
  • 1970-01-01
相关资源
最近更新 更多