ChatGPT解决这个技术问题 Extra ChatGPT

将忽略的文件排除在 git 状态之外

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

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

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

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


h
hamid k

正如我发现的 in this post.gitignore 仅适用于未跟踪的文件。如果您将文件添加到存储库,您可以:

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

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

git rm --cached <file>

编辑

This article 也解释了这一点


更新索引对我有用。 git status 显示被忽略文件的类似问题......非常烦人。 +1
我仍然有这个问题。上述命令都不适合我。在这两种情况下,git 都表示它不知道有问题的文件,但它们仍然显示在 git status 中:(
@Cfreak git status -- <file> 是否为您的文件显示“未暂存提交的更改”或“未跟踪的文件”?前者是如果您已经在索引中有文件并且我需要更多信息来解决您的问题(最好创建单独的问题并显示 git 消息并在评论中发布指向它的链接)。后者用于 git(尚未)跟踪但不在 .gitignore 文件中的文件,可以自由添加到 index.html 中。
@MBO - 是的。谢谢!您的评论帮助我找到了这个答案:stackoverflow.com/questions/594757/… 这对我有用。
第一个选项就像一个魅力。我已经尝试了第二个,它导致文件被暂存为“已删除”,我绝对不希望这样。
n
newbreedofgeek

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


R
Ramis

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

对于单个文件

git rm --cached <file>

对于整个项目

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

git rm -r --cached . 

提交更改

git add . 
git commit -m ".gitignore was fixed." 

B
Black Mamba

这肯定有效,

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


Z
Zen Of Kursat

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

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

## ignore tmp
/tmp/
./tmp/

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

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

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


B
BastiBen

来自 man git-lsfiles:

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

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

docs/*

希望有帮助。


h
harshul ar

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

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

F
Francislainy Campos

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

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

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

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

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


ß
ßãlãjî

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

git rm -r --cached .

Run git add .

git commit -m "Commit message"

去检查

git status

A
Alex

像这样

git --ignored myfolder

并且只会显示 myfolder 的状态