我刚刚在新项目的基础上做了一个git init。
然后我创建了一个.gitignore文件。
现在,当我键入git status时,.gitignore文件出现在未跟踪文件列表中。为什么?
- git add self && git commit -m"-1 for reverting existential depression" && git remote rm HEAD。
- 我可以忽略.git/文件夹并将其放入".git ignore"吗?
- 您可以在Linux下的主文件夹中创建一个全局"gitignore",并将其存储在以下位置:git config--global core.excludesfile~/.gitignore_global
- 我是通过搜索how to gitignore .gitinore file来到这里的,这个问题和被接受的答案与标题没有真正的关系。标题可以改进。
- @Matheusrufca:看起来答案是你不应该忽略.gitignore文件。你为什么要?
- 有忽略的用例。GitIgnore。我的团队的工作流要求我为本地开发环境更改一组文件,但不应提交这些文件。工作流程可以用更好的体系结构来改进,但这是我无法控制的。同时,让Git注意这些文件也是一种责任。因此,我只想在本地忽略它们,而不想冒险提交我的.gitignore,因为它不应该与团队共享。
- 在.gitignore文件中添加.gitignore
- cjsimon的Add .gitignore in the .gitignore file不起作用。
.gitignore文件应该在您的存储库中,因此它确实应该被添加和提交,正如git status所建议的那样。它必须是存储库树的一部分,以便可以合并对它所做的更改,等等。
所以,将它添加到您的存储库中,它不应该被gitignored。
如果您真的想要,如果不想提交,可以将.gitignore添加到.gitignore文件中。但是,在这种情况下,最好将ignores添加到.git/info/exclude中,这是一个特殊的签出本地文件,其工作方式与.gitignore类似,但由于它在.git文件夹中,因此不会显示在"git状态"中。
另请参阅https://help.github.com/articles/ignoring-files
- 这难道不是存储库元数据的一部分,而不是被跟踪的文件吗?
- 存储库元数据是存储库的本地元数据。例如,如果您向您的repo添加了一个提交钩子,并且有人克隆了您的repo,他们就不会得到提交钩子。
- 我讨厌我储存库里的这个丑陋的文件
- @悟空,如果你在一个团队工作,难道每个人都不应该忽略同一组文件吗?这就是为什么.gitignore文件被添加到存储库中的原因。没有人说你必须把它作为项目的一部分来部署。
- @内石和悟空,它不一定是你的报告文件。您可以在许多不同的地方使用忽略设置。GitHub有一篇关于IT Help.github.com/ignore-files的伟大文章,您可以在任何地方使用全局忽略设置,并且可以在repo的.git元数据中使用repo特定的设置。
- @如果一半的团队最终忽略了另一半团队实际正在处理的文件(而这个项目开始依赖于这些文件),那么这样做不是很危险吗?
- 全局忽略文件对于特定环境的本地文件非常好。例如,一个.ds_存储文件是特定于OS X上finder.app的,并不真正属于项目的.gitignore文件。Eclipse和Intellij文件也是如此,除非有一条规则,即项目中的每个人都使用特定的IDE。
- @deed02392在使用这些忽略文件时,您当然需要在放入的文件中使用判断,但它们仍然有一些很好的用途。例如,我使用vim,因此在全局gitignore中,我将*.swp文件标记为已忽略。这样我就不必把它添加到我的每个项目中,而那些从不使用VIM的人也不必担心它。
- @Kyralessa我使用的是git svn,而团队的其他成员使用的是svn,所以实际上忽略它对我很有用。
- 对于git svn,我没有gitignore文件。我使用.git/info/excludes,它是一个存储库本地文件,不会显示在"git状态"中,但它的工作方式与gitignore类似。
- 所以,如果您使用.git/info/exclude而不是.gitignore,那么克隆您的repo的其他人不会忽略这些相同的文件?
- 确切地。它对那些你想要浮动但没有比git repo更好的文件夹的文件很有用:)我有时会在.git/info/excludes中忽略一个"etc"文件夹,我在其中放置各种文档、下载等我不想签入的内容。对于git svn,它也可以很好地工作,除非您想将.gitignore文件签入svn repo:。
- @Endolith和其他,如果您希望忽略的文件只应用于您的repo,而不是您的合作者的repo,请使用.git/info/exclude。
- 值得一提的是,将".gitignore"添加到.gitignore文件实际上不会导致它被忽略,而且它仍然以git状态显示。
- 我在一个团队中工作,虽然我们确实想忽略同一组核心模式,但我被要求使用global.gitignore,例如模式*.swp。这是由Vim创建的,我的团队(包括我)中只有一些人使用它来编写代码。
- 我发现有必要约定要忽略的内容,创建初始的.gitignore文件,并通过向其自身添加.gitignore来"密封"它。这样你就可以安全地避免事故发生,但如果你真的想改变它,你可以通过"打开",更新和"密封"它再次。如果需要,每个人都可以在本地管理它,但不需要提交更改。
- 我和我的团队发现最好把项目相关的东西放在.gitignore文件中,把dev/env/machine相关的文件放在.git/info/exclude文件中。这样,我们就不会因为选择了一个特定的开发人员设置而用只与一个人相关的内容来膨胀GitIgnore列表。具体示例:.DS_Store文件只与我相关,因为我使用的是MacOS
- @悟空你更恨它而不是试图管理svn的元数据忽略属性?我承认这有点烦人,但是对于我和我的团队来说,隐藏在存储库中的元数据更容易出错。所以我越来越喜欢简单的文本文件。
- 谢谢老板!!!!!
如果要将忽略文件列表存储在Git树之外,可以使用.git/info/exclude文件。它只适用于您的回购结算。
- +1,这对于那些与项目无关的忽略者来说是很好的,例如Emacs*~备份文件,.ds_从OS X存储等等。
- @Augustlillas我个人更喜欢将这些类型的编辑器、平台特定的文件放在~/.gitignore中,这样我所处理的任何存储库都会忽略它们。
- 跟踪文件后,可以使用git update-index --assume-unchanged 停止跟踪更改,而不更改您的repo。这在需要进行本地更改的大型共享项目中非常有用,但没有其他人希望看到您提交给回购的内容。参见blog.pagebakers.nl
- @Augustlilleaas:每用户gitignore更适合该用例。
- 感谢您的提示,我使用的是git svn,所以服务器上的svn repo的其他用户不会完全想要。gitignore已签入。
- 当您使用git svn时,这尤其有用,因为团队中的其他参与者可能不希望在Subversion存储库中看到与git相关的任何内容。
- .git目录在存储库的基础上,不一定是工作目录。
实际上,您可以在".gitignore"文件中放置一行".gitignore"。这将导致git忽略".gitignore"文件。我并不认为这是个好主意。我认为忽略文件应该是版本控制和跟踪的。我只是为了完整起见才把它放出来。
- 这似乎不起作用。
- 为我工作!版本1.5.6.5。我也同意1800条信息,这不是一个好主意,但我认为它在某些情况下是可以的(比如你使用了Git-SVN存储库,你不希望Git-ish文件进入SVN)。排除文件可能更好。
- 这对我有效
- @ehsanul-文件不能被跟踪(您不应该添加或提交它)。你可以解开它。在仅使用Git的环境中,这可能不是一个好主意,但如果您碰巧使用Git作为颠覆存储库的智能客户端(不需要其他人知道,)—这样的技巧非常棒。
- 我的机器好像坏了
- @ishansrivastava您可能已经跟踪了文件。试着运行git rm --cached .gitignore。
您还可以拥有一个全局用户git .gitignore文件,该文件将自动应用于您的所有回购。这对IDE和编辑器文件(例如,用于VIM的swp和*~文件)很有用。更改目录位置以适应操作系统
添加到您的~/.gitconfig文件中
1 2
| [core]
excludesfile = /home/username/.gitignore |
使用要忽略的文件模式创建~/.gitignore文件
将点文件保存在另一个repo中,以便有备份(可选)。
任何时候复制、初始化或克隆回购时,也将使用全局gitignore文件。
- 我相信这是最好的解决方案,在您的编辑器留下临时文件的情况下,例如*.swp(vim)和*(tm),因为连续地将这些规则添加到每个g i t repo中,并强制其他具有不同IDE的用户检查这些文件是没有意义的。
- 这对于那些不应该被推到任何分支上的无知者来说是非常有效的。当然,将"username"替换为实际的用户名,如果已经有了.gitconfig,则不要再向其添加第二个[core]节-只需将excludesfile行放在现有的[core]节下。
如果有人已经向您的回购协议中添加了.gitignore,但您希望对其进行一些更改,并忽略这些更改,请执行以下操作:
江户十一〔一〕号
来源。
- 不好的主意,有一个原因是.git/info/excludes存在。
- 我想也有一个原因。为什么一个比另一个好?
- 如果文件已经被跟踪,btw .git/info/excludes就不工作。
- 这真的帮助我使用了一个已经提交的.gitignore,我不想为此提交更改。我正在运行Ubuntu 11.04 repos中的git 1.7.4.1,帮助页面将其添加到更新索引中。"此选项还可用作粗文件级机制,以忽略跟踪文件中未提交的更改(类似于.gitignore对未跟踪文件所做的操作)。如果Git需要在索引中修改此文件(例如在提交中合并时),则它将失败(优雅地);因此,如果假定的未跟踪文件在上游更改,则需要手动处理这种情况。"
- 我支持这个答案,因为一般情况下,您需要在主回购初始状态下执行这个操作,并保留Git功能的好处。没有充分的理由忽略此文件(句点)
- 为了完整性的目的,您如何恢复这个操作?--no-assume-unchanged是正确的方法
添加.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中添加相关的模式(例如,*.log),这样如果它们将来出现,它们就不会扰乱您的git status。
- 尽管我的问题与OP的问题无关:感谢您让我知道,在我对.gitignore进行更改后,我需要使用RM"清理"我的回购协议(如果文件已经发出)。noob错误,我知道,但这是我个人第一次看到有人提到这一点。
- 感谢您的反馈。是的,这就是我写这篇文章的原因,我来了这里,然后又花了很长的时间来解决这个问题,我认为写这篇文章会很好。:)
当然,.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中排除的显式存储库忽略。此文件将不会与其他开发人员共享,并且特定于该单个存储库。
- 全球EDOCX1[1]提到得不错
- 我认为在初始设置之后.gitignore文件应该被忽略,所以没有意外的更改。这并不意味着它不能再被改变了,但在某种程度上,它可以避免事故的发生。该文件上的事故可能导致混乱,甚至危及某些工作,因此也应考虑"密封"(忽略自身)。
- @Sasa.gitignore只适用于忽略Git尚未跟踪的文件。向.gitignore中添加已跟踪的文件不会阻止您提交对该文件的更改。即使这是可能的,当修改后的.gitignore指示git忽略自身时,您将如何提交它?
- @nic-我已经在这个线程底部的单独回复中将详细的解释传递给了我的观点。
注意以下"问题",有时您希望添加目录,但这些目录中没有文件。简单的解决方案是使用以下内容创建.gitignore:
号
在您意识到该目录没有添加(如预期的那样)之前,这种接缝可以很好地工作。原因是.gitignore也将被忽略,因此目录是空的。因此,您应该这样做:
这似乎只适用于您当前的目录,使Git忽略存储库中的所有文件。
更新此文件
号
使用您的通配符或文件名
号
在我的例子中,我想排除现有的文件。只修改.gitignore不起作用。我遵循以下步骤:
1 2 3
| git rm --cached dirToFile/file.php
vim .gitignore
git commit -a |
。
这样,我从缓存中清除了要排除的文件,并将其添加到.gitignore之后。
- 我的最佳解决方案。也可以使用git-add。第二,在Git提交之后-m"fixing.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_存储。
- 我不会那么做的。可能有你需要的点文件。相反,我只是随便加上.gitignore和.ds_store。
很可能最终用户希望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似乎会自动执行此操作。
- 用户的全局忽略文件将是一个更好的忽略.ds_存储的地方。