当我执行“git status'”时,我试图避免显示不需要的文件夹内容(例如:.settings,.metadata等)。命令。我在添加文件夹名称后修改了.gitignore文件,但在执行git status时我仍然获取了所有这些文件。
请帮我解决这个问题。
答案 0 :(得分:4)
.gitignore
仅适用于未跟踪的文件。
要停止在git中跟踪已跟踪的文件,请键入
git rm --cached <file>
git rm -r --cached <folder>
然后提交更改
git commit -m "Stop tracking some files"
答案 1 :(得分:1)
我不会回应其他人对.gitignore
的使用所说的内容,因为我相信他们已经介绍了它,但我喜欢你关于忽略git status
的结果的问题。
我发现无法省略特定目录,除了指定您想要状态的子目录,即git status <subdirectory>
,其中当前目录是默认目录。
根据项目的组织方式,这在某些情况下是不够的。例如,在Go中使用dep
时,会有一个vendor
目录被检入,并且最好只排除它,但我能做的最好就是git status
on一系列子目录(不好玩)。同样适用于git diff
。
答案 2 :(得分:1)
我没有找到仅使用git status命令解决此问题的通用解决方案。但是,对于要在其中排除/ vendor的Golang项目进行开发的排他方案,我通常会附加'| grep -v供应商”更改为git状态。
答案 3 :(得分:1)
如果只希望看不到它们,可以用grep -v
删除它们。
答案 4 :(得分:1)
根据 git 词汇表 pathspec
,如果您想快速查看对除 **/settings/
以外的所有文件夹所做的更改,方法如下
git status ':(exclude,top)**/settings/*' ./
答案 5 :(得分:1)
从 git 项目目录运行此程序,其中 dir
是您要排除的目录。
git status . -- ':!dir'
例如,如果要排除多个目录(例如 settings
和 metadata
)。
git status . -- ':!settings' ':!metadata'
答案 6 :(得分:0)
.gitignore
和相关工具仅适用于未跟踪的文件。一旦跟踪文件(添加到Git),您就可以将其放在.gitignore
内,但它根本不起作用。除了从存储库中删除这些文件并让它们没有签入之外,没有好办法处理这个问题。
您可能会阅读--assume-unchanged
,但这是一个非常危险的选择。你可以告诉Git假设一个文件没有改变,即使你有一个chnages。但这也意味着确保您不会丢失未提交的更改的安全机制不适用于这些文件。因此,如果您更改了.settings
,然后切换到已签入的.settings
文件与您当前所在分支上的文件不同的分支,则会使用新分支状态和本地分支覆盖该文件变化都会丢失。