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

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

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

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

回答(19)

3 years ago

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

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

如果你真的想要你可以将 .gitignore 添加到 .gitignore 文件,如果你没有't want it to be committed. However, in that case it'可能更好地将忽略添加到 .git/info/exclude ,一个特殊的结帐本地文件就像.gitignore一样工作但是没有出现在"git status"中,因为它在 .git 中夹 .

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

3 years ago

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

3 years ago

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

3 years ago

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

  • 添加到 ~/.gitconfig 文件
[core]
excludesfile = /home/username/.gitignore
  • 创建一个包含要忽略的文件模式的 ~/.gitignore 文件

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

每次复制,初始化或克隆存储库时,也会使用全局gitignore文件 .

3 years ago

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

git update-index --assume-unchanged .gitignore

Source .

3 years ago

添加 .gitignore 文件并提交后,它将不再显示在"untracked files"列表中 .

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

3 years ago

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

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

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

你去试试吧

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

这将输出运行它时将被排除的内容 .

然后

你去吧

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

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

3 years ago

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

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

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

虽然在快照之间切换时跟踪_765843也有好处,但提交快照的最重要原因是您希望与正在处理同一项目的其他开发人员共享该文件 . 通过将文件提交到Git,其他贡献者将在克隆存储库时自动获取 .gitignore 文件,因此他们赢得了't have to worry about accidentally committing a file that shouldn' t(如日志文件,缓存目录,数据库凭据等) . 如果在某个时候项目的 .gitignore 已更新,他们可以简单地提取这些更改,而不必手动编辑文件 .

当然,您将会有一些文件和文件夹适用于其他开发人员 . 但是,那些不应该在项目的 .gitignore 中 . 您还可以在其他两个位置忽略文件和文件夹:

  • 操作系统或IDE创建的文件和文件夹应放在global .gitignore中 . 好处是 .gitignore 适用于您计算机上的所有存储库,因此您不会与其他开发人员共享,因为他们可能正在使用不同的操作系统和/或IDE .

  • 使用explicit repository excludes in your_project_directory/.git/info/exclude可以忽略't belong in the project', .gitignore 和全局 .gitignore 中的文件 . 此文件不会与其他开发人员共享,并且特定于该单个存储库

3 years ago

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

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

3 years ago

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

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

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

.gitignore # Ignore the hand that feeds!

到您的.gitignore文件!

而且,与8月's response, I should say that it'相反,并非.gitignore文件应该在您的存储库中 . 它恰好发生,这通常很方便 . 并且's probably true that this is the reason .gitignore was created as an alternative to .git/info/exclude, which doesn'可以选择由存储库跟踪 . 无论如何,你如何使用.gitignore文件完全取决于你 .

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

3 years ago

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

*

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

*
!.gitignore

3 years ago

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

更新此文件

.git/info/exclude

用你的外卡或文件名

  • pyc
  • SWP
    *〜

3 years ago

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

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

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

3 years ago

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

echo '\\.*' >> .gitignore

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

3 years ago

如果您已经签入.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选项将使用小写字母表示“假定未更改”文件 .

3 years ago

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

3 years ago

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

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

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

  • 最初的.gitignore应反映团队中的惯例,

  • 推送之后,应该通过添加.gitignore条目来保护.gitignore并再次推送该更改 . .gitignore 文件以这种方式为“ sealed ” .

sealed.gitignore 文件可以在本地更改,而不会将更改者传播给团队的其他成员 . 但是,如果整个团队中的变更得到广泛认可,那么就更改它,而不是再次变更"seal" . 这不可能是故意的,只是故意的 .

可悲的是,你不能100%保护免受愚蠢,但这样你就已经尽了一切力量来防止愚蠢的事情发生 .

如果你有一个相对较小的团队和非常优秀的专业人士,那么这并不重要,但即便是那些家伙也会欣赏有一点不用担心 .

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

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

3 years ago

我发现在 .git/info/exclude 文件中设置忽略麻烦的 .DS_Store 文件的最佳位置 .

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

3 years ago

.gitignore 是关于忽略其他文件 . git是关于文件的,所以这是关于忽略文件 . 但是,由于git处理文件需要这个文件那里有列出其他文件名的机制 .

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

类比是您不想做的待办事项列表 . 除非你在某个地方列出某些“待办事项”列表,否则你将无法了解它们 .