我刚刚在我的新项目的根目录上做了一个 git init
。
然后我创建了一个 .gitignore
文件。
现在,当我输入 git status
时,.gitignore 文件出现在未跟踪文件列表中。这是为什么?
git add self && git commit -m "-1 for reverting existential depression" && git remote rm HEAD
how to gitignore .gitinore file
来到这里的,而问题和接受的答案与标题并没有真正的关系。标题可以改进。
.gitignore
文件应该在您的存储库中,因此确实应该按照 git status
的建议添加并提交它。它必须是存储库树的一部分,以便可以合并对它的更改等等。
因此,将其添加到您的存储库中,它不应该被 gitignored。
如果您确实需要,可以将 .gitignore
添加到 .gitignore
文件中,如果您不想提交它。但是,在这种情况下,最好将忽略添加到 .git/info/exclude
,这是一个特殊的签出本地文件,其工作方式与 .gitignore 类似,但不会显示在“git status”中,因为它位于 .git
文件夹中。
另请参阅https://help.github.com/articles/ignoring-files
如果你想在你的 Git 树之外存储被忽略的文件列表,你可以使用 .git/info/exclude 文件。它仅适用于您对 repo 的结帐。
~/.gitignore
中,这样我处理的任何存储库都会忽略它们。
git update-index --assume-unchanged <file>
停止跟踪更改而不更改您的存储库。这在您需要进行本地更改的大型共享项目中非常有用,但没有其他人希望看到您的内容提交给 repo。请参阅blog.pagebakers.nl
您实际上可以将一行 .gitignore
放入您的 .gitignore
文件中。这将导致 git 忽略 .gitignore
文件。我实际上并不认为这是一个好主意。我认为忽略文件应该进行版本控制和跟踪。我只是为了完整性而把它放在那里。
git rm --cached .gitignore
您还可以拥有一个全局用户 git .gitignore
文件,该文件将自动应用于您的 all 您的存储库。这对于 IDE 和编辑器文件(例如 Vim 的 swp
和 *~
文件)很有用。更改目录位置以适合您的操作系统。
添加到您的 ~/.gitconfig 文件中: [core] excludesfile = /home/username/.gitignore 创建一个带有要忽略的文件模式的 ~/.gitignore 文件。将您的点文件保存在另一个存储库中,以便进行备份(可选)。
任何时候你复制、初始化或克隆一个 repo,你的全局 gitignore 文件也将被使用。
如果有人已将 .gitignore
添加到您的存储库,但您想对其进行一些更改并忽略这些更改,请执行以下操作:
git update-index --assume-unchanged .gitignore
.git/info/excludes
存在是有原因的。
--assume-unchanged
的存在也是有原因的。为什么一个比另一个好?
.git/info/excludes
不起作用。
添加 .gitignore
文件并提交后,它将不再显示在“未跟踪文件”列表中。
git add .gitignore
git commit -m "add .gitignore file"
git status
以防其他人有与我们一样的痛苦。我们想排除一个已经提交的文件。
这篇文章更有用: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
文件中。
git status
。
当然 .gitignore 文件会显示在状态中,因为它没有被跟踪,git 认为它是一个好吃的新文件!
但是,由于 .gitignore 是一个未跟踪的文件,因此当您将其放入 .gitignore 时,它会被 git 忽略!
所以,答案很简单:只需添加以下行:
.gitignore # Ignore the hand that feeds!
到您的 .gitignore 文件!
而且,与 August 的回应相反,我应该说 .gitignore 文件不应该在您的存储库中。它只是碰巧可以,这通常很方便。这可能是 .gitignore 被创建为 .git/info/exclude 的替代品的原因,因为它没有被存储库跟踪的选项。无论如何,如何使用 .gitignore 文件完全取决于您。
如需参考,请查看 kernel.org 上的 gitignore(5) manpage。
首先,正如许多其他人已经说过的那样,您的 .gitignore
应该由 Git 跟踪(因此不应被忽略)。让我解释一下为什么。
(TL;DR:提交 .gitignore
文件,并使用 global .gitignore
忽略由您的 IDE 或操作系统创建的文件)
正如您可能已经知道的那样,Git 是一个分布式版本控制系统。这意味着它允许您在不同版本之间来回切换(即使开发已经分流到不同的分支),它还允许多个开发人员在同一个项目上工作。
虽然在快照之间切换时跟踪您的 .gitignore
也有好处,但提交它的最重要原因是您希望与从事同一项目的其他开发人员共享该文件。通过将文件提交到 Git 中,其他贡献者在克隆存储库时将自动获取 .gitignore
文件,因此他们不必担心意外提交不应提交的文件(例如日志文件、缓存目录、数据库凭据等)。如果在某个时候项目的 .gitignore
更新,他们可以简单地提取这些更改,而不必手动编辑文件。
当然,会有一些文件和文件夹是您想要忽略的,但它们是特定于您的,不适用于其他开发人员。但是,这些不应该在项目的 .gitignore
中。还有两个地方可以忽略文件和文件夹:
由您的操作系统或 IDE 创建的文件和文件夹应放在全局 .gitignore 中。好处是这个 .gitignore 应用于您计算机上的所有存储库,因此您不必为每个存储库重复此操作。它不会与其他开发人员共享,因为他们可能使用不同的操作系统和/或 IDE。
不属于项目的 .gitignore 或全局 .gitignore 的文件可以使用 your_project_directory/.git/info/exclude 中的显式存储库排除来忽略。此文件不会与其他开发人员共享,并且特定于该单个存储库
.gitignore
的好消息
.gitignore
仅适用于忽略 Git 尚未跟踪的文件。将已跟踪的文件添加到 .gitignore
不会阻止您提交对该文件的更改。即使这是可能的,当它指示 Git 忽略自身时,您将如何提交更改的 .gitignore
?
想法是将特定于您的项目的文件放入 .gitignore
文件中,然后(如前所述)将其添加到存储库中。例如 .pyc
和 .o
文件、测试套件创建的日志、一些固定装置等。
对于您自己的设置创建但不一定会为每个用户显示的文件(如使用 vim 的 .swp
文件、隐藏的 ecplise 目录等),您应该使用 .git/info/exclude
(如前所述)。
注意以下“问题” 有时您想添加目录但在这些目录中没有文件。简单的解决方案是创建一个包含以下内容的 .gitignore:
*
这个接缝工作正常,直到您意识到没有添加目录(如预期的那样添加到您的存储库。原因是 .gitignore 也将被忽略,因此目录是空的。因此,您应该做这样的事情:
*
!.gitignore
这似乎只适用于您当前的目录,以使 Git
忽略存储库中的所有文件。
更新此文件
.git/info/exclude
用你的通配符或文件名
*pyc *swp *~
如果您已经签入 .gitignore 并且想要忽略对它的修改,请查看 this answer:
尝试使用以下命令: git update-index --assume-unchanged FILENAME_TO_IGNORE 要反转它(如果您想对其进行更改),请使用: git update-index --no-assume-unchanged 更新:这是列出'的方法假设当前目录下的文件未更改: git ls-files -v | grep -E "^[az]" 因为 -v 选项将使用小写字母表示“假定未更改”文件。
就我而言,我想排除现有文件。仅修改 .gitignore 不起作用。我按照以下步骤操作:
git rm --cached dirToFile/file.php
vim .gitignore
git commit -a
通过这种方式,我从缓存中清除了要排除的文件,并将其添加到 .gitignore 中。
导航到 git repo 的基本目录并执行以下命令:
echo '\\.*' >> .gitignore
所有点文件都将被忽略,包括那个讨厌的 .DS_Store 如果你在 Mac 上。
最终用户很可能希望 Git 忽略“.gitignore”文件,因为 Eclipse 创建的特定于 IDE 的文件夹可能与 NetBeans 或其他 IDE 不同。因此,为了保持源代码 IDE 的对抗性,可以轻松地拥有一个不与整个团队共享的自定义 git ignore,因为个别开发人员可能使用不同的 IDE。
我发现对讨厌的 .DS_Store
文件设置忽略的最佳位置是在 .git/info/exclude
文件中。
当您在其中设置 git 存储库时,IntelliJ 似乎会自动执行此操作。
.gitignore
是关于忽略 other 文件。 git 是关于文件的,所以这是关于忽略文件的。然而,当 git 处理文件时,这个文件需要作为列出其他文件名的机制存在。
如果它被称为 .the_list_of_ignored_files
,它可能会更明显一些。
类比是您不想做的待办事项列表。除非您在某处列出它们,否则您不会知道它们是某种“待办事项”列表。
我认为在某些情况下忽略 .gitignore 非常有用。例如,当您有多个团队或大型团队在同一个代码库上工作时。在这种情况下,您需要有某些约定,其中一个约定是关于 git repo 中忽略的内容。它通常是关于忽略 IDE 或 OS 创建的文件和目录、一些生成的日志等。
但是,有一股力量倾向于对 .gitignore
文件进行非常规的更改。 .gitignore
文件可能会被不负责任的人、错误地、使用的工具或在其他情况下进一步更改。
为了对此产生反作用,我们可以执行以下操作:
最初的 .gitignore 应该反映团队中的约定,在它被推送之后,应该通过添加 .gitignore 条目来保护 .gitignore 并再次推送该更改。 .gitignore 文件以这种方式“密封”。
“sealed”.gitignore
文件可以在本地进行更改,而无需将该更改程序传播给团队的其他成员。但是,如果更改在整个团队中得到广泛同意,则可以“解封”它,更改它,然后再次“密封”它。这不可能是错误的,只能是故意的。
可悲的是,您不能 100% 免受愚蠢的侵害,但通过这种方式,您已尽一切努力防止愚蠢的事情发生。
如果你的团队相对较小,拥有非常优秀的专业人士,那么这并不重要,但即使是那些人也会很高兴能少担心一件事。
当您无法对基础架构设置做任何事情时,使用 .git/info/exclude
很酷,只需覆盖您自己的 a** 以免出错。
从正确和错误的立场来看,我投票赞成在 .gitignore
文件中包含 .gitignore 条目,让每个人都可以自由地在本地做任何他们想做的事情,但不会侵犯他人。