如何忽略存储库中的文件?


93

我有一个文件(config.php),该文件已经提交到Git存储库,但是我想在本地忽略,即我希望该文件保留在存储库中,但是强制Git忽略对其所做的任何更改。

我将文件放入.gitignore,但每次我提交某些内容时,它仍被标记为已更改,并且Git仍在尝试对其进行更改。任何想法,我在想什么或做错了什么?


请添加您的.gitignore文件-这样我们可能会发现与此有关的任何问题。
拉斯,

Answers:


189

如果文件仍然显示在状态中,即使它位于.gitignore中,也请确保尚未对其进行跟踪。

git rm --cached config.php

如果只想在本地忽略它,也可以通过git status使其忽略:

git update-index --assume-unchanged config.php

1
好,谢谢 !如果将我的分支与另一个分支合并,此文件是否会引起某些问题?
prcaen 2011年

1
@ Nimbus147:这不应该成为问题,对该文件的任何更改仍将被忽略(即未添加/提交)。
VonC

如果使用SmartGit,则应使用remove来执行此操作。
Omid-RH

1
有没有办法强制update-index --assume-unchanged远程分支?我想将文件保存在存储库中,但不能被其他人更改,而且无法上载。
p014k

1
@ p014k我不知道。对于这种文件,我将使用其他名称对其进行版本控制,然后在需要时使用内容文件驱动程序自动生成正确的文件(私有)。例如,该过滤器在舞台上不会处于活动状态。请参阅stackoverflow.com/a/54454356/6309及其关联的链接。
VonC

6

忽略签入文件:

git update-index --assume-unchanged file

还原

git update-index --no-assume-unchanged file

全部还原

git update-index --really-refresh 

很有帮助 还原一个文件有效,但还原所有文件无效。
Adem Tepe

4

如果文件已经在存储库中,因此已经在索引/暂存区中,那么对.gitignore的更新不会改变这种情况-它会继续提交。

要从“索引/暂存”区域删除文件,请使用git rm <file>


如果文件在存储库中但尚未暂存怎么办?我试图忽略* .log文件,但仍在“更改”下看到它们。我想忽略所有,该怎么办?
Sandra K

@SandraK如果在最后一次提交时仓库中已经存在该文件的较旧版本(文件路径/名称),则将其视为已跟踪-“索引”将在其记录中包含该文件,因此status将继续告诉您关于那些变化。如果要忽略* .log文件(对于以前添加的跟踪文件和当前未跟踪的文件),则需要同时git rm *.log更新.gitignore文件。首先检查一下某些日志文件是否真的很重要...很容易忘记那个特殊的文件;-)
Philip Oakley

-3

在.gitignore中列出文件后,您将无法更改它。

因此,您可以在一次提交中从列表中删除文件,在下一次提交中进行更改,然后在第三次提交中将文件重新添加到忽略列表中。

我通常要做的是将文件分成两部分,一个是允许的,我可以更改,其中包括第二个文件(如果存在),然后开发人员可以选择在忽略的文件中进行配置更改。


1
一旦文件在.gitignore中列出,您将无法对其进行更改 ” –您可以澄清一下,这是什么意思?我的许多文件中都有很多文件.gitignore并且我一直在不断更改这些文件!这是我第一次听到有人说,一旦将文件添加到.gitignore,就无法更改。
trejder 2014年

1
他实际上是错的。您可以更改它们。Git只是不上传它们,甚至没有给您选择上传它们的选项。
大卫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.