git:如何忽略所有当前未跟踪的文件?
有没有一种简便的方法可以忽略git存储库中所有未跟踪的文件和文件夹?git:如何忽略所有当前未跟踪的文件?,git,gitignore,Git,Gitignore,有没有一种简便的方法可以忽略git存储库中所有未跟踪的文件和文件夹? (我知道.gitignore) 因此,git status将再次提供一个干净的结果。两种方法: 将参数-uno用于git status。下面是一个例子: [jenny@jenny_vmware:ft]$ git status # On branch ft # Untracked files: # (use "git add <file>..." to include in what wil
(我知道
.gitignore
)
因此,git status
将再次提供一个干净的结果。两种方法:
- 将参数
用于-uno
。下面是一个例子:git status
[jenny@jenny_vmware:ft]$ git status # On branch ft # Untracked files: # (use "git add <file>..." to include in what will be committed) # # foo nothing added to commit but untracked files present (use "git add" to track) [jenny@jenny_vmware:ft]$ git status -uno # On branch ft nothing to commit (working directory clean)
[jenny@jenny_vmware:ft]$git状态 #分公司金融时报 #未跟踪的文件: #(使用“git add…”包含在将提交的内容中) # #福 提交时未添加任何内容,但存在未跟踪的文件(使用“git add”跟踪) [jenny@jenny_vmware:ft]$git状态-uno #分公司金融时报 没有要提交的内容(工作目录清理)
- 或者您可以将文件和目录添加到
,在这种情况下,它们将永远不会显示.gitignore
git status-uno
如前所述,要从状态中排除,只需使用:
git status -uno # must be "-uno" , not "-u no"
如果要永久忽略当前未跟踪的文件,可以从项目根目录启动:
git status --porcelain | grep '^??' | cut -c4- >> .gitignore
以后每次调用git status
都会显式忽略这些文件
UPDATE:上述命令有一个小缺点:如果您没有.gitignore
文件,那么您的gitignore将忽略自身!这是因为文件.gitignore
是在执行git status--chi瓷
之前创建的。因此,如果您没有.gitignore
文件,我建议您使用:
echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore
这将创建一个子shell,该子shell在创建.gitignore
文件之前完成
命令解释因为我获得了很多选票(谢谢!),我想我最好解释一下命令:
- 使用
代替git status--ceral
,因为states“以一种易于解析的脚本格式提供输出。这与short输出类似,但在git版本之间,无论用户配置如何,都将保持稳定。”因此,我们具有可解析性和稳定性李>git status--short
仅过滤以grep'^???
开头的行,根据,这些行对应于未跟踪的文件李>??
删除每行的前3个字符,这只为我们提供了未跟踪文件的相对路径李>cut-c4-
符号为,将上一个命令的输出传递给下一个命令的输入李>|
和>
符号是,分别将上一个命令的输出附加到文件或覆盖/创建新文件
grep
和cut
的人,这里有另一种方法:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore
如果您有很多未跟踪的文件,并且不想“gitignore
”所有这些文件,请注意,git status
将提到--untracked files=no
,即使您最初没有添加该选项
“git status
”建议用户在花费太长时间时考虑使用--untracked=no
选项
-u no
也不显示未老化的文件-uno
可根据需要工作并显示未老化的文件,但隐藏未跟踪的文件。如果要永久忽略这些文件,将其添加到中的简单方法是:
更改为git树的根目录
git ls文件--其他--排除标准>>。gitignore
这将枚举未跟踪目录中的所有文件,这些文件可能是您想要的,也可能不是您想要的。如果您不在类似Unix的操作系统上,这将在Windows上使用PowerShell
git状态——瓷器^?{$\-匹配“^\?\?”}{$\-替换“^\?\?”,“}”添加内容。\.gitignore
但是,.gitignore
文件必须有一个新的空行,否则无论最后一行是否有内容,它都会将文本追加到最后一行
这可能是一个更好的选择:
$gi=gc.\.gitignore$res=git status——瓷器^?{$\-匹配“^\?\?”}{$\-替换“^\?\?”,”}$res=$gi+$res$res | Out File.\.gitignore
我来这里是想解决一个稍微不同的问题。也许这对其他人有用:
我创建了一个新的分支功能-a
。作为这个分支的一部分,我创建了新的目录,需要修改.gitignore来抑制其中的一些目录。向创建各种缓存文件夹的项目添加新工具时,经常会发生这种情况.serverless
,.terraform
等
在我准备将该文件夹合并回主文件夹之前,我还想做些别的事情,所以我再次签出master
,但现在git status
再次拾取那些被抑制的文件夹,因为.gitignore尚未合并
这里的答案其实很简单,但我必须找到答案:
只需从feature-a
分支签出.gitignore文件即可
git checkout feature-a -- feature-a/.gitignore
git add .
git commit -m "update .gitignore from feature-a branch"
比公认答案更好的方法是使用以下内容:
git config--local status.showUntracked文件编号
当添加了不在中的新文件时,接受的答案不起作用。gitignore
如果每个人都在发布前进行RTFM,我们都不会得到任何代表:-)一种编辑的简便方法。gitignore
是git status | cat>>temp和vim temp
。然后编辑文件,删除前几行和最后一行,以及后面的
和后面的空白。然后cat temp>>。gitignore和&rm temp
。如果之前不存在.gitignore
,则