我想设置git以全局忽略某些文件。
我已将一个.gitignore文件添加到我的用户根目录(Users/me/中),并向其中添加了以下行:
但它并没有忽略这类文件,知道我做错了什么吗?
- 您可能还想查看Github的忽略建议--help.github.com/articles/ignoring-files;它们有一个常见的忽略模式库。
- 您也可以考虑在单个项目中只使用.gitignore。否则,如果您(或其他人)在新系统上克隆项目,则每次都必须重新创建全局排除文件和配置。
- 我完全同意@stankurdziel。我想不出使用global.gitignore文件的好理由。如果你有一个项目中有人使用各种各样的编辑器和IDE,你可能不想让项目变得杂乱无章。但坦率地说,我会忍受混乱。
- 项目创建的可忽略文件应位于项目.gitignore文件中,计算机上创建的可忽略文件应位于全局.gitignore中(如编辑器/IDE临时文件等)。
- python虚拟环境目录是我的全局或本地excludesfile中的条目的常用用例。
- @pylinux实际上,每个git-scm,个人的ide和特定于工作流的东西可以放在repo中未跟踪的文件.git/info/exclude中,所以不必放在全局文件中。另外,默认和自动全局gitignore文件是$HOME/.config/git/ignore。
您需要设置全局core.excludesfile配置文件以指向此全局忽略文件。
例如
*nix或windows git bash:
1
| git config --global core.excludesfile '~/.gitignore' |
Windows CMD:
1
| git config --global core.excludesfile"%USERPROFILE%\.gitignore" |
对于Windows,它设置为位置c:/users/myusername/.gitignore。上面的命令将只设置git将使用的忽略文件的位置。该文件仍需在该位置手动创建,并用忽略列表填充。
您可以在https://help.github.com/articles/ignoring files/create-a-global-gitignore上阅读该命令。
- 我这样做了,然后我重新保存了*.tmproj文件,它仍然显示为未跟踪的更改。
- @米尔德夫兹:你是说它出现在Untracked files:下的git status中吗?这不应该发生,我刚刚对我的系统做了一个快速测试,它按照我的预期工作。
- 会不会是因为过去跟踪过这个文件?
- 只要它不在您的HEAD或索引中,无论文件是否被跟踪,都不会有任何区别。如果将git status、git config core.excludesfile的输出添加到您的问题中,可能会有所帮助。
- 由于有多个配置级别(系统、全局、本地),您应该检查以找出"有效"的core.excludesFile。型号:git config core.excludesfile。你可能会发现它指的是类似于$HOME/.gitignore_global的东西。
- 我可以在~/.gitignore中的行的开头使用#在全局忽略文件中添加注释吗?
- 最新版本的官方Git Windows工具包使用*nix语法;如果这一行不起作用,请尝试使用*nix语法。
- @dror是的,您可以使用#获取评论--请参阅help.github.com/articles/ignoring-files
- 我不能用%USERPROFILE%变量来实现这个功能。我必须使用*nix目录分隔符输入文件的完整路径。例如core.excludesfile c:/users/user/.gitignore
- 你也可以用%HOME%代替%USERPROFILE%。
- 无法使用%userprofile%变量。我必须在Windows中使用git config--global core.excludesfile'~/.gitignore'将其设置到位置c:/users/myusername/.gitignore。此外,上面的命令将只设置git将使用的忽略文件的位置。该文件仍必须在该位置手动创建,并用忽略列表填充。
- 注意:这在我的Windows7的cmd中有效,但在PowerShell中无效。
- 是的,应该注意的是,如果您是从Windows上的Git-Bash运行它,那么也应该使用~/.gitignore。%USERPROFILE%var将在cmd中工作。
- 记住,如果您在事后应用此更改,那么您需要清除回购的缓存以使更改生效。
- 报价实际上不是必需的,你可以直接进入1(18)。至少在Git 1.9.4上是这样。
- 在我的例子中,%userprofile%不起作用。我试着引用和不引用。我认为它将其作为文件名的一部分。我最终交换了别名后面的实际位置,这是有效的。
- 您好,@charlesbailey,谢谢您的回答。我很久以前就设置了我的全球gitignore,今天我有一个相反的问题:我能忽略我的全球gitignore吗?我有一个报告需要推一个.exe文件。我不想只改变一个回购的全局配置。有什么小窍门吗?谢谢您。
- 哦,抱歉打扰了!我刚得到它与命令git config --local core.excludesfile""一起工作。不管怎样,谢谢,回答得很好。如果你觉得喜欢,你可以在上面加上这个附录。可能会有所帮助。再见。
- 在Windows上,复制上面的示例时要注意引号。确保在命令中使用的是普通的引号。我复制了这个例子,它给了我特殊的引号字符,Git认为这是我的路径的一部分,使它看起来不起作用。
在重新配置全局排除文件之前,您可能需要使用以下命令检查当前配置的文件:
1
| git config --get core.excludesfile |
在我的例子中,当我运行它时,我看到我的全局排除文件被配置为
,其中已经列出了一些东西。因此,在给定问题的情况下,首先检查现有的excludes文件,并向其中添加新的文件掩码可能是有意义的。
- 这很管用。像往常一样设置全局gitignore文件;每行一个条目。
虽然其他答案是正确的,但它们正在设置全局配置值,而全局git忽略文件有一个默认的git位置:
*NIX:
窗户:
1
| %USERPROFILE%\git\ignore |
您可能需要创建git目录和ignore文件,但是您可以将全局忽略放到该文件中,就这样!
来源
Which file to place a pattern in depends on how the pattern is meant to be used.
…
-
Patterns which a user wants Git to ignore in all situations (e.g., backup or temporary files generated by the user’s editor of choice) generally go into a file specified by core.excludesFile in the user’s ~/.gitconfig. Its default value is $XDG_CONFIG_HOME/git/ignore. If $XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/ignore is used instead.
- 太好了,我不知道…但是,这不是生成的文件吗?更新/重新安装时是否可以覆盖?
- 我相信该文件是通过运行某些git命令创建/修改的。因为它是每个用户目录中的一个设置文件,所以我认为它不应该被覆盖。
- 我同意这应该是被接受的答案,但是我没有找到这个答案?H?E?D?O?C?U?M?E?n?T?A?T?我?O?n?帮助文章(help.github.com/articles/忽略文件)
- @AvProgrammer我刚刚编辑了答案,以反映源文档组织方式的变化。
- @cas您有Windows路径的源吗?它对我不起作用。
- 在Windows上,路径也是~/.config/git/ignore。
- 这应该是公认的答案。
- 这样做之后,我还需要运行git config --global core.excludesfile吗?
要从头创建全局gitignore,请执行以下操作:
1 2 3
| $ cd ~
$ touch .gitignore_global
$ git config --global core.excludesfile ~/.gitignore_global |
第一行将目录改为C:/Users/User。
之后,您将创建一个扩展名为.gitignore_global的空文件。
最后将全局忽略设置为该文件。
然后您应该用某种记事本打开它,并添加所需的忽略规则。
从这里开始。
如果您在repo中创建一个名为.gitignore的文件,那么在查看要提交的文件时,git将使用其规则。请注意,Git不会忽略在将规则添加到此文件之前已跟踪的文件以忽略它。在这种情况下,文件必须取消跟踪,通常包括:
1
| git rm --cached filename |
是你的案子吗?
记住运行命令
1
| git config --global core.excludesfile '~/.gitignore' |
将只设置全局文件,但不会创建它。对于Windows,请检查用户目录中的.gitconfig文件,并根据您的喜好对其进行编辑。在我的例子中是这样的:
1 2
| [core]
excludesfile = c:/Users/myuser/Dropbox/Apps/Git/.gitignore |
我可以忽略.tmproj文件,将.tmproj或*.tmproj包含在我的/users/me/.gitignore-global文件中。
注意,文件名是.gitignore-global而不是.gitignore。它没有通过将.tmproj或*.tmproj包含在/users/me目录中名为.gitignore的文件中来工作。
- 只要全局忽略文件与您的core.excludesfile配置相匹配,您将其称为什么并不重要。
- 啊!好主意@Charlesbailey。然而,这可能是作者想要检查的。.tmproj文件未被忽略的原因可能是用户的excludesfile不是.gitignore。
- 我想他认为用户会足够聪明来实现。
您应该为此创建一个排除文件。看看这个要点,这是相当不言自明的。
不过,为了解决您的问题,您可能需要使用git rm --cached path/to/.tmproj取消.tmproj文件的索引(如果您已经将其添加到索引中),或者使用git add和commit取消.gitignore文件的索引。
- 我正努力在全球范围内做到这一点,而不仅仅是按回购协议。
- 是的,这就是我在要旨里提到的。我对最初的问题有点困惑。你做过git rm --cached吗?
- 是的,试过了。在我看来,我遵循了所有建议!我错过了什么?
- 如建议,我将添加您的Git状态并排除问题中的信息:)
在主目录中创建.gitignore文件
向其中添加文件(无法识别文件夹)
例子
1 2 3 4 5 6 7 8 9 10 11 12
| # these work
*.gz
*.tmproj
*.7z
# these won't as they are folders
.vscode/
build/
# but you can do this
.vscode/*
build/* |
检查Git是否已具有全局GitIgnore
1
| git config --get core.excludesfile |
告诉Git文件在哪里
1
| git config --global core.excludesfile '~/.gitignore' |
哇!!
在Windows Linux子系统上,我必须先通过cd ~/,然后通过touch .gitignore导航到子系统根目录,然后更新其中的全局gitignore配置。
我希望它能帮助别人。