1004

我刚刚git init在我的新项目的根上做了一个。

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

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

4

19 回答 19

1004

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

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

如果你真的想要,如果你不想提交它,你可以添加.gitignore到文件中。.gitignore但是,在这种情况下,最好将忽略添加到.git/info/exclude.gitignore 一个特殊的签出本地文件,该文件的工作方式与 .gitignore 类似,但由于它位于.git文件夹中,因此不会显示在“git status”中。

另请参阅https://help.github.com/articles/ignoring-files

于 2009-04-20T07:11:45.857 回答
286

如果你想在你的 Git 树之外存储被忽略的文件列表,你可以使用.git/info/exclude文件。它仅适用于您对 repo 的结帐。

于 2009-04-20T07:14:19.283 回答
81

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

于 2009-04-20T07:58:37.743 回答
58

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

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

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

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

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

于 2009-06-10T07:46:20.723 回答
52

如果有人已经将 a 添加.gitignore到您的存储库中,但您想对其进行一些更改并忽略这些更改,请执行以下操作:

git update-index --assume-unchanged .gitignore

来源

于 2011-02-09T20:19:07.487 回答
37

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

git add .gitignore
git commit -m "add .gitignore file"
git status
于 2009-04-20T06:50:37.827 回答
20

以防其他人有与我们一样的痛苦。我们想排除一个已经提交的文件。

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

具体来说,您需要忽略文件实际上是使用命令 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

于 2009-09-25T03:00:21.097 回答
17

当然 .gitignore 文件会显示在状态中,因为它没有被跟踪,git 认为它是一个好吃的新文件!

但是,由于 .gitignore 是一个未跟踪的文件,因此当您将其放入 .gitignore 时,它​​会被 git 忽略!

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

.gitignore # Ignore the hand that feeds!

到您的 .gitignore 文件!

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

作为参考,请查看 kernel.org 上的gitignore(5) 手册页

于 2009-06-11T20:01:50.900 回答
16

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

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

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

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

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

  • 由您的操作系统或 IDE 创建的文件和文件夹应该放在一个全局.gitignore. 好处是这.gitignore适用于您计算机上的所有存储库,因此您不必为每个存储库重复此操作。它不会与其他开发人员共享,因为他们可能使用不同的操作系统和/或 IDE。
  • 不属于项目的文件,也不属于.gitignore全局文件.gitignore,可以使用显式存储库排除在your_project_directory/.git/info/exclude. 此文件不会与其他开发人员共享,并且特定于该单个存储库
于 2014-07-01T10:21:57.260 回答
15

这个想法是将特定于您的项目的文件放入.gitignore文件中,然后(如前所述)将其添加到存储库中。例如.pyc.o文件、测试套件创建的日志、一些固定装置等。

对于您自己的设置创建但不一定会为每个用户显示的.swp文件(如使用 vim 的文件、隐藏的 ecplise 目录等),您应该使用.git/info/exclude(如前所述)。

于 2009-04-20T07:55:16.173 回答
13

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

*

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

*
!.gitignore
于 2011-07-19T12:46:58.860 回答
9

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

更新此文件

.git/info/exclude 

用你的通配符或文件名

*pyc
*swp
*~
于 2009-06-09T08:17:54.573 回答
6

如果您已经签入 .gitignore 并且您想忽略对它的修改,请查看此答案

尝试使用此命令:

git update-index --assume-unchanged FILENAME_TO_IGNORE

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

git update-index --no-assume-unchanged

更新

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

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

因为该-v选项将使用小写字母表示“假定未更改”文件。

于 2016-10-03T23:27:21.560 回答
4

就我而言,我想排除现有文件。仅修改.gitignore不起作用。我按照以下步骤操作:

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

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

于 2014-02-06T13:39:23.867 回答
3

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

echo '\\.*' >> .gitignore

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

于 2009-12-30T13:15:26.747 回答
2

最终用户很可能希望 Git 忽略“.gitignore”文件,因为 Eclipse 创建的 IDE 特定文件夹可能与 NetBeans 或其他 IDE 不同。因此,为了保持源代码 IDE 的对抗性,可以轻松地拥有一个不与整个团队共享的自定义 git ignore,因为个别开发人员可能使用不同的 IDE。

于 2013-03-13T03:32:07.140 回答
1

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

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

于 2012-10-05T13:30:08.307 回答
1

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

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

类比是您不想做的待办事项列表。除非您在某处列出它们,否则您不会知道它们是某种“待办事项”列表。

于 2014-03-17T19:29:39.987 回答
1

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

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

为了对此产生反作用,我们可以执行以下操作:

  1. 最初的 .gitignore 应该反映团队中的约定,
  2. 推送后,应通过添加 .gitignore 条目来保护 .gitignore 并再次推送该更改。.gitignore文件以这种方式“密封”。

可以仅在本地更改“密封.gitignore文件,而无需将该更改者传播给团队的其他成员。但是,如果更改在整个团队中得到广泛同意,则可以“解封”它,更改它,然后再次“密封”它。这不可能是错误的,只能是故意的。

可悲的是,您不能 100% 避免愚蠢,但这样您就已尽一切努力防止愚蠢的事情发生。

如果你的团队相对较小,拥有非常优秀的专业人士,那么这并不重要,但即使是那些人也会很高兴能少担心一件事。

.git/info/exclude当您无法对基础架构设置做任何事情时,使用很酷,只需覆盖您自己的 a** 以免出错。

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

于 2016-08-29T15:36:07.303 回答