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

How can I stop .gitignore from appearing in the list of untracked files?

我刚刚在新项目的基础上做了一个git init

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

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


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

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

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

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


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


实际上,您可以在".gitignore"文件中放置一行".gitignore"。这将导致git忽略".gitignore"文件。我并不认为这是个好主意。我认为忽略文件应该是版本控制和跟踪的。我只是为了完整起见才把它放出来。


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

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

    1
    2
    [core]
    excludesfile = /home/username/.gitignore
  • 使用要忽略的文件模式创建~/.gitignore文件

  • 将点文件保存在另一个repo中,以便有备份(可选)。

  • 任何时候复制、初始化或克隆回购时,也将使用全局gitignore文件。


    如果有人已经向您的回购协议中添加了.gitignore,但您希望对其进行一些更改,并忽略这些更改,请执行以下操作:

    江户十一〔一〕号

    来源。


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

    1
    2
    3
    git add .gitignore
    git commit -m"add .gitignore file"
    git status


    只是为了避免别人和我们一样痛苦。我们想排除已经提交的文件。

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

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

    你去测试一下

    埃多克斯1〔18〕(如果您说想要排除所有日志文件)

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

    然后

    你跑过去

    埃多克斯1〔19〕(或任何文件名路径/表达式)

    然后在你的.gitignore文件中添加一个*.log行。


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

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

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

    1
    .gitignore # Ignore the hand that feeds!

    到你的.gitignore文件!

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

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


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

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


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

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

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

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

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

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


    注意以下"问题",有时您希望添加目录,但这些目录中没有文件。简单的解决方案是使用以下内容创建.gitignore:

    1
    *

    在您意识到该目录没有添加(如预期的那样)之前,这种接缝可以很好地工作。原因是.gitignore也将被忽略,因此目录是空的。因此,您应该这样做:

    1
    2
    *
    !.gitignore


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

    更新此文件

    1
    .git/info/exclude

    使用您的通配符或文件名

    1
    2
    3
    *pyc
    *swp
    *~


    在我的例子中,我想排除现有的文件。只修改.gitignore不起作用。我遵循以下步骤:

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

    这样,我从缓存中清除了要排除的文件,并将其添加到.gitignore之后。


    如果您已经签入了.gitignore,并且希望忽略对它的修改,请签出此答案:

    Try using this command:

    1
    git update-index --assume-unchanged FILENAME_TO_IGNORE

    To reverse it (if you ever want to commit changes to it), use:

    1
    git update-index --no-assume-unchanged

    UPDATE:

    Here's how to list 'assume unchanged' files under current
    directory:

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

    As the -v option will use lowercase letters for 'assume unchanged'
    files.


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

    1
    echo '\\.*' >> .gitignore

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


    很可能最终用户希望Git忽略".git ignore"文件,因为Eclipse创建的特定于IDE的文件夹可能与NetBeans或其他IDE不同。因此,为了保持源代码IDE的对抗性,很容易让一个定制的git-ignore成为现实,因为单个开发人员可能正在使用不同的IDE,而这个定制的git-ignore不能与整个团队共享。


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

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

    一个类比就是你不想做的待办事项列表。除非你把它们列在某个地方,否则你是不会知道它们的。


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

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

    要对其施加反作用力,我们可以按以下步骤进行:

  • 初始的.gitignore应该反映团队中的约定,
  • 推送后,应通过添加.gitignore条目来保护.gitignore,然后再次推送该更改。.gitignore文件以这种方式"密封"。
  • "sealed".gitignore文件可以在本地更改,而无需将更改者传播给团队的其他成员。但是,如果在整个团队中广泛同意一个变更,而不可能"解封"它,则更改它,然后再次"密封"它。这是不可能的,只能是故意的。

    可悲的是,你不能百分之百地避免愚蠢,但这样你就可以尽一切努力防止愚蠢的事情发生。

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

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

    从正确与错误的立场来看,我投票赞成.gitignore进入.gitignore文件,给予每个人在本地做他们想做的事情的自由,但不侵犯其他人。


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

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