何时使用.git/info/exclude而不是.gitignore来排除文件?

239

我有点困惑于使用.git/info/exclude.gitignore排除文件的优缺点。

它们都在仓库/项目级别上,所以它们有何不同,我们何时应该使用.git/info/exclude

4个回答

309
.gitignore的第一个优点是它被纳入到版本库中,不像.git/info/exclude。第二个优点是你可以有多个.gitignore文件,每个目录/子目录一个,用于特定目录的忽略规则,而.git/info/exclude则不行。
因此,.gitignore文件是版本化的,并存在于所有副本中。因此,在大型团队中,所有人都会忽略相同类型的文件(例如*.db*.log);而使用几个.gitignore文件可以允许更具体的忽略规则。
.git/info/exclude仅适用于单个副本。它没有被版本化,因此在一个人的副本中忽略的内容在另一个人的副本中并不存在。例如,如果有人使用Eclipse进行开发,那么该开发人员可能会将.build文件夹添加到.git/info/exclude中,因为其他开发人员可能不使用Eclipse。
通常,应该普遍忽略的文件/忽略规则应该放在.gitignore中,而只想在本地副本中忽略的文件应该放在.git/info/exclude中。

但是根据Git官方文档,最好将其放入~/.gitignore文件中,文档链接为https://git-scm.com/docs/gitignore。 - Deven
@DevendraSwami,我不确定你在上面的评论中提到的具体条目应该放在~/.gitignore中。我的理解是忽略规则可以分为3个级别 - $PROJECT/.git/info/exclude用于(项目、用户)特定的忽略规则,$PROJECT/<任意数量的目录>/.gitignore用于项目特定的忽略规则,适用于任何地方的用户(提交时),~/.gitignore用于用户特定的忽略规则,适用于该用户在该机器上的任何项目。根据目标,您选择将条目放在哪个位置。 - Anshul Goyal
是的,你说得完全正确。我的评论与这个问题有关 https://dev59.com/crjoa4cB1Zd3GeqPAYwp - Deven
我试图将sln文件本身添加到排除文件中。不管我尝试什么方法都不起作用,解决方案仍然被识别为已更改。 - Shimmy Weitzhandler
4
@ShimmyWeitzhandler,您的repo中是否已经有了sln文件?如果是的话,那么排除或忽略操作将无法阻止git跟踪它的更改。请尝试以下两种方法之一: git rm --cached <path-name>可以将其从仓库中删除,但在本地保留。 git update-index --skip-worktree <path-name>将忽略对文件的更改,但仍然保留在仓库中。好奇一下:为什么要将sln文件排除在外?它是.Net解决方案的重要部分,对吧? - Koen

74

谷歌搜索:三种排除文件的方法

  1. .gitignore适用于这个代码库的每个克隆版本(版本控制,每个人都会有它),
  2. .git/info/exclude仅适用于您本地副本的这个代码库(本地,不与他人共享),
  3. ~/.gitignore适用于您电脑上所有的代码库(本地,不与他人共享)。

3.实际上需要在您的计算机上设置一个配置:

git config --global core.excludesfile '~/.gitignore'

1
该链接的博客错误地将文件名称为.git/info/excludes,而实际上应该是.git/info/exclude,这一点已经被它所链接到的文档确认过了。 - mwfearnley
17
第三种方法是通过在~/.gitconfig中的设置进行全局计算机忽略。 - hmijail
说到排除文件,还有一个命令:git update-index --assume-unchanged ...。它适用于已经在代码库中的文件。 - TWiStErRob

25

我们想分享一下(现实生活中的)经验:当我们需要在每个开发环境上自定义一些配置文件,但仍希望源代码被保留在仓库中并可供其他开发人员使用时,我们开始使用.git/info/exclude。

这样,一旦克隆和修改本地文件后,可以将其从提交中排除,而不会影响仓库中的原始文件,但也不一定被忽略。


11
使用.gitignore来忽略与项目有关的规则。使用exclude或全局忽略文件来忽略与您的环境有关的规则。
例如,我的全局忽略文件会忽略由我正在使用的任何编辑器生成的临时文件 - 这个规则是特定于我的环境的,对于同一项目上的其他开发人员可能会不同(也许他们使用不同的编辑器)。另一方面,我的项目.gitignore文件会忽略诸如API密钥和构建工件之类的东西 - 这些是为项目而设计的,应该对项目中的每个人都相同。
这样能帮到你吗?

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