如何在执行“git status”命令时排除不需要的文件夹内容

i86rm4rw  于 2023-04-10  发布在  Git
关注(0)|答案(7)|浏览(393)

当我执行git status命令时,我试图避免显示不需要的文件夹内容(例如:- .settings,.metadata等)。
我修改了.gitignore文件,添加了文件夹名,但当我执行git status时,仍然得到了所有这些文件。

az31mfrm

az31mfrm1#

从git项目目录运行这个命令,其中dir是你想要排除的目录。

git status . -- ':!dir'

例如,如果要排除多个目录(例如settingsmetadata)。

git status . -- ':!settings' ':!metadata'
nkoocmlb

nkoocmlb2#

.gitignore仅适用于未跟踪的文件。
要停止在git中跟踪已跟踪的文件,输入

git rm --cached <file>
git rm -r --cached <folder>

然后提交更改

git commit -m "Stop tracking some files"
z4iuyo4d

z4iuyo4d3#

如果你只是不想看到它们,你可以用grep -v删除它们。

kx7yvsdv

kx7yvsdv4#

我不会附和其他人关于.gitignore的用法的说法,因为我相信他们已经涵盖了它,但我喜欢你关于省略git status结果的问题。
我发现没有办法省略特定的目录,除了指定你想要状态的子目录,即git status <subdirectory>,其中当前目录是默认的。
在某些情况下,这是不够的,这取决于项目的组织方式。例如,在Go中使用dep时,有一个vendor目录被检入,并且只排除它是可取的,但我能做的最好的是在一系列子目录上git status(不好玩)。git diff也是如此。

nnt7mjpx

nnt7mjpx5#

根据git词汇表pathspec,如果你想快速查看除**/settings/以外的所有文件夹的更改,下面是方法

git status ':(exclude,top)**/settings/*' ./
dgjrabp2

dgjrabp26#

我还没有找到一个通用的解决方案来解决这个问题,只使用git status命令。然而,对于在Golang项目上开发的排他性场景,你想排除/vendor,我通常会附加'|grep -v vendor'到git状态。

cuxqih21

cuxqih217#

.gitignore和相关工具只对未跟踪的文件起作用。一旦文件被跟踪(添加到Git),您可以将其放入.gitignore中,但它根本不会起作用。除了从存储库中删除这些文件并使其不签入之外,没有好的方法来处理这个问题。
你可能读到过--assume-unchanged,但这是一个非常危险的选择。你可以告诉Git假设一个文件没有改变,但这也意味着确保您不会丢失未提交更改的安全机制对这些文件不起作用。因此,如果您有一个已更改的.settings,然后切换到一个分支,其中检入的.settings文件与您当前所在的分支上的文件不同,文件将被新分支的状态覆盖,并且本地更改将丢失。

相关问题