将忽略的文件置于git状态之外


133

我想阻止Git在中显示忽略的文件git status,因为在已更改但未更新的文件列表中有大量的文档和配置文件会使列表变得无用。

Git显示这些文件正常吗?

我将忽略信息放在.gitignoreGit存储库根目录中的文件中,使用时未添加它们,git add .但似乎它们也没有被完全忽略,因为它们显示在上述列表中,并且显示在列表中由印制git ls-files --others -i --exclude-standard。仅~/.gitignore显示与其中的模式匹配的文件。

难道是因为在更早的阶段我没有忽略它们,所以它们至少被提交了一次?

Answers:


231

正如我在这篇文章中发现,.gitignore仅适用于未跟踪的文件。如果将文件添加到存储库,则可以:

git update-index --assume-unchanged <file>

或通过以下方式将其从存储库中删除

git rm --cached <file>

编辑

本文也对此进行了解释


4
更新索引为我工作。git状态显示被忽略文件的类似问题...非常烦人。+1
安倍·佩特里罗

3
我仍然有这个问题。以上两个命令都不适合我。在这两种情况下,git都说它不知道有问题的文件,但是它们仍然以git状态显示:(
Cfreak 2012年

5
@Cfreak是否git status -- <file>为您的文件显示“未暂缓提交更改”或“未跟踪的文件”?前者是如果您已经在索引中包含文件,并且我需要更多信息来解决您的问题(最好使用显示的git消息创建单独的问题,并在评论中发布指向它的链接)。后者适用于尚未由git跟踪(但尚未在.gitignore文件中)并且可以自由添加到索引中的文件。
MBO

1
@MBO-是的。谢谢!您的评论帮助我找到了这个答案:stackoverflow.com/questions/594757/…对我有用
Cfreak

1
第一选择就像一个魅力。我已经尝试过第二个了,它导致文件被暂存为“已删除”,我当然不希望那样。
卡尔姆

16

我也遇到过这个问题,这可能是因为您在初始提交流程中将被忽略的目录/文件添加到.gitignore之后,它们被GIT标记为“将被跟踪”。

因此,您需要像这样清除git跟踪缓存:

git rm --cached -r [folder/file name]

可以在此处阅读更详细的说明:http : //www.frontendjunkie.com/2014/12/stop-git-from-tracking-changes-to.html

上面的命令还从远程GIT来源中删除了文件夹/文件的残余。因此,您的GIT仓库变得干净了。


11

问题可能是该文件仍在git缓存中。要解决此问题,需要重置git cache。

重置git缓存。这将从索引中删除所有内容。

git rm -r --cached . 

再次添加所有文件:

git add . 

承诺:

git commit -m ".gitignore was fixed." 


1

我假设您不想添加tmp目录(Visual Studio Platform)

1-在您的本地.gitignore文件中添加以下行

## ignore tmp
/tmp/
./tmp/

3-备份和删除本地的tmp文件夹。(在其他地方备份。例如桌面?)

4-将更改提交到本地,而不是同步到远程(例如github)。

完成这些步骤后,您的tmp目录将不再上载。


0

man git-lsfiles

-i, --ignored
Show ignored files in the output. Note that this also reverses any exclude list present.

就我个人而言,我倾向于将doxygen文件保留在我的源代码树中,因此我只是将其添加到了我的.gitignore(位于我的源代码树的最顶层目录中):

docs/*

希望有帮助。


0

以下步骤仅适用于未跟踪的文件。此信息适用于以下配置:

Platform: linux

Git version: git version 1.8.3.1

将要忽略的文件列表放在以下位置的“排除”文件中。

<path till .git directory>/.git/info/exclude

“排除”文件的初始内容

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

“排除”文件的最终内容

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~


*.tar
*.gch

0

根据已接受的答案,您可以假定该文件未更改,因此您在本地计算机上所做的任何操作都不会提交到远程分支。

诸如git update-index --assume-unchanged src/main/resources/config.properties src / main.resources / config.properties是在项目中查找该文件的路径的示例。

现在,如果要从存储库中完全删除文件,则可能要使用remove cached`git rm --cached

此方案可能适用于以下情况:

假设我有一个存储密码的文件。我最初使用错误的详细信息提交了该文件,只是为了让我的同事在他们的计算机上拥有相同的文件。但是,现在我已在本地计算机上添加了正确的详细信息。如何防止使用现在正确的密码详细信息再次误提交该文件?


-1

像这样

git --ignored myfolder

并且仅显示我的文件夹的状态

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.