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

有没有一种简便的方法可以忽略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 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
    ,在这种情况下,它们将永远不会显示

mode参数用于指定未跟踪文件的处理。它是可选的:默认为all,如果指定,则必须固定在选项上(例如-uno,但不是-u no)


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
    代替
    git status--short
    ,因为states“以一种易于解析的脚本格式提供输出。这与short输出类似,但在git版本之间,无论用户配置如何,都将保持稳定。”因此,我们具有可解析性和稳定性
  • grep'^???
    仅过滤以
    ??
    开头的行,根据,这些行对应于未跟踪的文件
  • cut-c4-
    删除每行的前3个字符,这只为我们提供了未跟踪文件的相对路径
  • |
    符号为,将上一个命令的输出传递给下一个命令的输入
  • >
    符号是,分别将上一个命令的输出附加到文件或覆盖/创建新文件
另一种变体对于那些喜欢使用grep而不是
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
    ,则