如何阻止.gitignore出现在未跟踪文件列表中?

时间:2009-04-20 06:42:27

标签: git version-control dvcs gitignore

我刚刚在新项目的根目录上做了git init

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

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

19 个答案:

答案 0 :(得分:914)

.gitignore文件应该在您的存储库中,因此它应该确实添加并提交,如git status所示。它必须是存储库树的一部分,因此可以合并对它的更改等等。

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

如果您真的想要,可以将.gitignore添加到.gitignore文件中,如果您不希望它被提交。但是,在这种情况下,最好将忽略添加到.git/info/exclude,这是一个特殊的结帐本地文件,就像.gitignore一样,但不会出现在“git status”中,因为它位于.git文件夹中。

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

答案 1 :(得分:273)

如果要将忽略文件列表存储在Git树之外,可以使用 .git / info / exclude 文件。它仅适用于您的结帐回收。

答案 2 :(得分:75)

您实际上可以将“.gitignore”行放入“.gitignore”文件中。这将导致git忽略“.gitignore”文件。我实际上并不认为这是个好主意。我认为忽略文件应该受版本控制和跟踪。我只是为了完整而把它放在那里。

答案 3 :(得分:51)

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

  1. 添加到您的~/.gitconfig文件

    [core]
    excludesfile = /home/username/.gitignore
    
  2. 创建一个~/.gitignore文件,其中包含要忽略的文件模式

  3. 将您的点文件保存在另一个仓库中,以便备份(可选)。

  4. 每当您复制,初始化或克隆回购时,您的全局gitignore文件也将被使用。

答案 4 :(得分:42)

如果某人已在您的仓库中添加.gitignore,但您想对其进行一些更改并忽略这些更改,请执行以下操作:

git update-index --assume-unchanged .gitignore

Source

答案 5 :(得分:37)

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

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

答案 6 :(得分:20)

只是让别人有同样的痛苦。 我们想要排除已经提交的文件。

这篇文章更有用: working with .git/info/exclude too late

具体而言,您需要忽略文件实际上是使用命令git remove 请参阅 git rm http://www.kernel.org/pub/software/scm/git/docs/git-rm.html

你去试试

<强> git rm --dry-run *.log
(如果你说要排除所有日志文件)

如果您运行它,将输出排除的内容。

然后

你通过

来运行它

<强> git rm *.log
(或者你想要的任何文件名路径/表达式)

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

答案 7 :(得分:15)

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

对于您自己的设置创建但不一定为每个用户显示的文件(如{vid,隐藏的ecplise目录等,如.swp文件),您应该使用.git/info/exclude(如已经提到了。)

答案 8 :(得分:15)

当然.gitignore文件显示在状态上,因为它没有跟踪,git认为它是一个美味的新文件!

因为.gitignore是一个未经跟踪的文件,但当你将它放入.gitignore时,它是被git忽略的候选者!

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

.gitignore # Ignore the hand that feeds!

到您的.gitignore文件!

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

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

答案 9 :(得分:14)

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

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

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

虽然在快照之间切换时跟踪.gitignore也有好处,但提交快照的最重要原因是您需要与正在处理同一项目的其他开发人员共享该文件。通过将文件提交到Git,其他贡献者将在克隆存储库时自动获取.gitignore文件,因此他们不必担心意外提交不应提交的文件(例如日志文件,缓存目录,数据库凭据等)。如果在某个时候项目的.gitignore被更新,他们只需简单地提取这些更改,而不必手动编辑文件。

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

  • 操作系统或IDE创建的文件和文件夹应放在global .gitignore中。好处是这个.gitignore适用于您计算机上的所有存储库,因此您不必为每个存储库重复此操作。并且它不与其他开发人员共享,因为他们可能使用不同的操作系统和/或IDE。
  • 使用explicit repository excludes in your_project_directory/.git/info/exclude可以忽略不属于项目.gitignore和全局.gitignore的文件。此文件不会与其他开发人员共享,并且特定于该单个存储库

答案 10 :(得分:10)

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

*

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

*
!.gitignore

答案 11 :(得分:7)

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

更新此文件

.git/info/exclude 

使用您的外卡或文件名

*pyc
*swp
*~

答案 12 :(得分:4)

在我的情况下,我想要排除现有文件。 只修改 .gitignore 不起作用。 我按照以下步骤操作:

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

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

答案 13 :(得分:3)

如果您已经签入了.gitignore并且想要忽略对它的修改,请查看this answer

  

尝试使用此命令:

git update-index --assume-unchanged FILENAME_TO_IGNORE
     

要反转它(如果您想要对其进行更改),请使用:

git update-index --no-assume-unchanged
     

<强>更新

     

以下是如何在当前列出'假设未更改的文件   目录:

git ls-files -v | grep -E "^[a-z]"
     

因为-v选项将使用小写字母'假设不变'   文件。

答案 14 :(得分:3)

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

echo '\\.*' >> .gitignore

所有点文件都将被忽略,包括那个讨厌的.DS_Store,如果你在Mac上。

答案 15 :(得分:1)

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

答案 16 :(得分:1)

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

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

类比是您不想做的待办事项列表。除非你把它们列在某个地方,否则就是某种“待办事项”。列表你不会对它们了解。

答案 17 :(得分:1)

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

但是,有一种力量倾向于对.gitignore文件引入非常规更改。 {1}}文件可以由不负责任的人,错误地,使用的工具或其他情况进一步更改。

要对此采取反击力量,我们可以按照以下方式行事:

  1. 最初的.gitignore应该反映团队中的惯例,
  2. 推送之后,应通过添加.gitignore条目来保护.gitignore并再次推送该更改。.gitignore文件是&#34; 密封&#34;就这样。
  3. &#34; 密封&#34; .gitignore文件可以在本地更改,而不会将更改者传播给团队的其他成员。但是,如果整个团队中的变更得到广泛认可,则可能会发生变化,而不是“开封”。它,改变它,而不是&#34;密封&#34;它再次。这不能故意做,只是故意。

    可悲的是,你无法100%保护自己不受愚蠢的影响,但这样你就可以尽一切努力防止愚蠢的事情发生。

    如果你的团队规模相对较小而且非常优秀的专业人士,那么这并不重要,但即便是那些人也会很少担心。

    当你无法对基础设施设置做任何事情时,使用.gitignore很酷,只是覆盖你自己的**而不是犯错误。

    从正确和错误的立场来看,我投票支持在.git/info/exclude文件中输入.gitignore,让每个人都可以自由地在本地做任何他们想要的事情,但不会侵犯他人。

答案 18 :(得分:0)

我发现设置忽略令人讨厌的.DS_Store文件的最佳位置是.git/info/exclude文件。

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