164

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

Git显示这些文件是否正常?

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

难道是因为在更早的阶段我没有忽略它们,因此它们至少犯了一次?

4

10 回答 10

279

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

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

或通过以下方式从存储库中删除它们

git rm --cached <file>

编辑

这篇文章也解释了

于 2009-11-30T10:21:05.290 回答
27

我也遇到了这个问题,这可能是因为您在初始提交流程中将忽略的目录/文件添加到 .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 存储库变得干净。

于 2016-04-26T23:18:49.257 回答
22

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

对于单个文件

git rm --cached <file>

对于整个项目

重置 git 缓存。如果您在未添加 .gitignore 文件时提交项目,这是一个很好的命令。

git rm -r --cached . 

提交更改

git add . 
git commit -m ".gitignore was fixed." 
于 2018-06-26T18:39:59.450 回答
4

这肯定有效,

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

于 2016-10-03T08:02:52.183 回答
1

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

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

## ignore tmp
/tmp/
./tmp/

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

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

在这些步骤之后,您的 tmp 目录将不会再次上传。

于 2018-02-17T21:24:19.187 回答
0

man git-lsfiles

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

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

docs/*

希望有帮助。

于 2009-11-30T10:08:11.067 回答
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
于 2018-07-20T12:44:28.227 回答
0

根据接受的答案,您可以假设文件未更改,以便您在本地计算机上执行的任何操作都不会提交到您的远程分支。

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

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

这种情况可能适用于以下情况:

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

于 2020-02-07T15:14:17.450 回答
0

在 .gitignore 文件中进行更改之后。按照这些简单的步骤

git rm -r --cached .

Run git add .

git commit -m "Commit message"

去检查

git status
于 2021-01-25T05:40:39.040 回答
-2

像这样

git --ignored myfolder

并且只会显示myfolder的状态

于 2015-04-08T09:46:30.810 回答