我刚刚在我的新项目的根上做了一个git初始化。

然后我创建了一个.gitignore文件。

现在,当我输入git status时,.gitignore文件出现在未跟踪文件列表中。为什么呢?


添加.gitignore文件并提交后,它将不再显示在“未跟踪文件”列表中。

git add .gitignore
git commit -m "add .gitignore file"
git status

.gitignore文件应该在您的存储库中,因此它确实应该被添加和提交,正如git状态所建议的那样。它必须是存储库树的一部分,这样对它的更改就可以合并等等。

因此,将它添加到您的存储库中,它不应该被忽略。

如果你真的想要,你可以添加.gitignore到.gitignore文件,如果你不想让它被提交。然而,在这种情况下,最好将忽略添加到.git/info/exclude中,这是一个特殊的本地签出文件,它的工作方式就像.gitignore,但不会显示在“git状态”中,因为它在.git文件夹中。

参见https://help.github.com/articles/ignoring-files


如果你想将被忽略的文件列表存储在Git树之外,你可以使用. Git /info/exclude文件。它只适用于你的回购结帐。


其思想是将特定于项目的文件放入.gitignore文件中,并(如前所述)将其添加到存储库中。例如.pyc和.o文件,测试套件创建的日志,一些fixture等等。

对于您自己的安装程序创建的但不一定会出现在每个用户面前的文件(例如。swp文件,如果您使用vim,隐藏的ecplise目录等),您应该使用.git/info/exclude(如上所述)。


你可以在。gitignore文件中加入一行。gitignore。这将导致git忽略.gitignore文件。我不认为这是个好主意。我认为ignore文件应该被版本控制和跟踪。我只是为了完整起见。


这似乎只适用于当前目录,以便让Git忽略存储库中的所有文件。

更新此文件

.git/info/exclude 

用您的通配符或文件名

* pyc * swp 赶紧*


你也可以有一个全局用户git .gitignore文件,它会自动应用到你所有的回购。这对于IDE和编辑器文件很有用(例如,Vim的swp和*~文件)。更改目录位置以适合您的操作系统。

添加到~/。gitconfig文件: (核心) Excludesfile = /home/username/.gitignore 创建一个~/。Gitignore文件,文件模式被忽略。 将您的点文件保存在另一个repo中,以便您有备份(可选)。

任何时候你复制,初始化或克隆一个repo,你的全局gitignore文件也将被使用。


当然,.gitignore文件会显示在状态中,因为它是未跟踪的,git将它视为一个美味的新文件!

然而,由于.gitignore是一个未跟踪的文件,当你把它放在.gitignore中时,它是一个被git忽略的候选文件!

所以,答案很简单:只需添加一行:

.gitignore # Ignore the hand that feeds!

到你的。gitignore文件!

而且,与August的回答相反,我应该说.gitignore文件不应该在您的存储库中。它只是碰巧可以,这通常是方便的。这可能就是.gitignore被创建为.git/info/exclude的替代品的原因,后者没有被存储库跟踪的选项。无论如何,如何使用.gitignore文件完全取决于您。

作为参考,请查看kernel.org上的gitignore(5) manpage。


以防别人和我们有同样的痛苦。 我们想要排除一个已经提交的文件。

这篇文章更有用: 使用.git/info/exclude太晚了

具体来说,你需要忽略一个文件实际上是使用命令git remove 参见git rm (http://www.kernel.org/pub/software/scm/git/docs/git-rm.html)

你通过去测试它

Git rm——dry-run *.log (如果你说想要排除所有日志文件)

这将输出如果运行它将被排除的内容。

then

你通过运行它

Git rm *.log (或任何你想要的文件名路径/表达式)

然后在.gitignore文件中添加*.log行。


导航到git repo的基本目录并执行以下命令:

echo '\\.*' >> .gitignore

所有的点文件都将被忽略,包括讨厌的. ds_store(如果你是在mac上)。


如果有人已经在你的回购中添加了.gitignore,但你想对它做一些更改,并忽略这些更改,请执行以下操作:

Git update-index——assume-unchanged .gitignore

源。


注意以下“问题”有时您想添加目录,但这些目录中没有文件。简单的解决方案是创建一个包含以下内容的.gitignore:

*

这个接缝工作得很好,直到您意识到目录没有添加到存储库(正如预期的那样)。这样做的原因是.gitignore也将被忽略,因此目录是空的。因此,你应该这样做:

*
!.gitignore

我发现忽略烦人的. ds_store文件的最佳位置是在.git/info/exclude文件中。

当您在IntelliJ中设置git存储库时,它似乎会自动执行此操作。


最终用户很可能希望Git忽略”。gitignore”文件,因为Eclipse创建的IDE特定文件夹可能与NetBeans或其他IDE不同。因此,为了保持源代码与IDE的对立性,很容易忽略一个自定义git,因为每个开发人员可能使用不同的IDE,而不与整个团队共享。


在我的例子中,我想排除一个现有文件。 仅修改。gitignore无效。 我是这样做的:

git rm --cached dirToFile/file.php
vim .gitignore
git commit -a

通过这种方式,我从缓存中清除了我想要排除的文件,并将其添加到.gitignore。


.gitignore是关于忽略其他文件。Git是关于文件的,所以这是关于忽略文件的。然而,当git处理文件时,这个文件需要作为列出其他文件名的机制。

如果它被称为.the_list_of_ignored_files,可能会更明显一些。

一个类比是你不想做的待办事项列表。除非你把它们列在某种“待办事项”清单上,否则你不会知道它们。


首先,正如许多人已经说过的,Git应该跟踪你的.gitignore(因此不应该忽略它)。让我来解释一下原因。

(TL;DR:提交.gitignore文件,并使用全局的.gitignore来忽略由IDE或操作系统创建的文件)

您可能已经知道,Git是一个分布式版本控制系统。这意味着它允许您在不同的版本之间来回切换(即使开发已经分散到不同的分支),它还允许多个开发人员在同一个项目上工作。

Although tracking your .gitignore also has benefits when you switch between snapshots, the most important reason for committing it is that you'll want to share the file with other developers who are working on the same project. By committing the file into Git, other contributers will automatically get the .gitignore file when they clone the repository, so they won't have to worry about accidentally committing a file that shouldn't be committed (such as log files, cache directories, database credentials, etc.). And if at some point the project's .gitignore is updated, they can simply pull in those changes instead of having to edit the file manually.

当然,会有一些文件和文件夹您想要忽略,但这是特定于您的,并不适用于其他开发人员。但是,这些不应该出现在项目的.gitignore中。还有两个地方可以忽略文件和文件夹:

Files and folders that are created by your operating system or IDE should be placed in a global .gitignore. The benefit is that this .gitignore is applied to all repositories on your computer, so you don't have to repeat this for every repository. And it's not shared with other developers, since they might be using a different operating system and/or IDE. Files that don't belong in the project's .gitignore, nor in the global .gitignore, can be ignored using explicit repository excludes in your_project_directory/.git/info/exclude. This file will not be shared with other developers, and is specific for that single repository


我认为在某些情况下,忽略.gitignore是非常有用的。例如,当您有多个团队或一个大型团队在同一个代码库上工作时。在这种情况下,你需要有一些约定,其中一个约定是关于git回购时忽略的内容。它通常是关于忽略IDE或OS创建的文件和目录,一些生成的日志等。

然而,有一种力量倾向于对.gitignore文件进行非常规的更改。.gitignore文件可以被不负责任的人、错误地、被使用的工具或在其他情况下进一步更改。

为了有一个反作用力,我们可以这样做:

首字母。gitignore应该反映团队的惯例, 在它被压入之后,.gitignore应该通过添加.gitignore条目来确保安全,并再次压入该更改。.gitignore文件以这种方式被“密封”。

“密封的”.gitignore文件可以在本地进行更改,而无需将更改者传播给团队的其他成员。然而,如果一个变更在整个团队中得到了广泛的同意,那么就有可能“打开”它,改变它,然后再“密封”它。那不可能是错误的,只能是有意的。

可悲的是,你不能百分之百地保护自己不做蠢事,但这样做你已经尽了一切努力来防止蠢事发生。

如果你的团队规模相对较小,但拥有非常优秀的专业人员,那么这就不重要了,但即使是那些人也会因为少担心一件事而感激不尽。

当你不能对基础设施设置做任何事情时,使用.git/info/exclude很酷,只是覆盖你自己的一个**以免出错。

从正确和错误的角度来看,我赞成在。gitignore文件中加入。gitignore条目,让每个人都可以自由地在本地做任何他们想做的事情,但不侵犯他人。


如果你已经签入了.gitignore,并且你想忽略对它的修改,看看这个答案:

尝试使用这个命令: git update-index——assume-unchanged FILENAME_TO_IGNORE 要反转它(如果你想提交更改),使用: Git update-index——no-assume-unchanged 更新: 下面是如何列出“假定不变”文件在当前 目录: git ls-files -v | grep -E "^[a-z]" 因为-v选项会用小写字母表示" assume unchanged " 文件。