是否有一种方便的方法可以忽略git存储库中所有未跟踪的文件和文件夹?
(我知道.gitignore
。)
所以git status
会再次提供干净的结果。
答案 0 :(得分:235)
如前所述,要从状态中排除,只需使用:
git status -uno # must be "-uno" , not "-u no"
如果您想要永久忽略当前未跟踪的文件,您可以从项目的根目录启动:
git status --porcelain | grep '^??' | cut -c4- >> .gitignore
对git status
的每次后续调用都会明确忽略这些文件。
更新:上面的命令有一个小缺点:如果你没有.gitignore
文件,你的gitignore会忽略自己!发生这种情况是因为在.gitignore
执行之前创建了文件git status --porcelain
。因此,如果您没有.gitignore
文件,我建议您使用:
echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore
这将创建一个子shell,在创建.gitignore
文件之前完成。
命令解释,因为我获得了很多选票(谢谢!)我想我能更好地解释一下这个命令:
git status --porcelain
代替git status --short
,因为manual表示"以易于解析的格式为脚本提供输出。这类似于短输出,但在git版本中保持稳定,无论用户配置如何。"所以我们既有可解析性又有稳定性; grep '^??'
仅过滤以??
开头的行,根据git status manual,这些行对应于未跟踪的文件; cut -c4-
删除每行的前3个字符,这只给出了未跟踪文件的相对路径; |
符号为pipes,它将上一个命令的输出传递给以下命令的输入; >>
和>
符号为redirect operators,它们将上一个命令的输出附加到文件或分别覆盖/创建新文件。sed
而不是grep
和cut
的人来说,另一个变体,这是另一种方式:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore
答案 1 :(得分:43)
如果您想永久忽略这些文件,将其添加到.gitignore
的简单方法是:
git ls-files --others --exclude-standard >> .gitignore
这将枚举未跟踪目录中的所有文件,这些文件可能是您想要的,也可能不是。
答案 2 :(得分:13)
git status -uno
答案 3 :(得分:4)
-u no
也未显示未暂存的文件。 -uno
按预期工作,显示未分阶段,但未隐藏。
答案 4 :(得分:3)
两种方式:
使用参数" -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)
或者你可以将文件和directires添加到.gitignore,在这种情况下它们永远不会出现。
答案 5 :(得分:3)
恕我直言,比接受的答案更好的是使用以下内容:
git config --local status.showUntrackedFiles no
接受的答案不适用于添加不在 .gitignore
中的新文件
答案 6 :(得分:2)
如果您不在Unix 操作系统上,则可以使用 PowerShell
在 Windows 上工作 git status --porcelain | ?{ $_ -match "^\?\? " }| %{$_ -replace "^\?\? ",""} | Add-Content .\.gitignore
但是,.gitignore
文件必须有一个新的空行,否则它会将文本附加到最后一行,无论它是否有内容。
这可能是更好的选择:
$gi=gc .\.gitignore;$res=git status --porcelain|?{ $_ -match "^\?\? " }|%{ $_ -replace "^\?\? ", "" }; $res=$gi+$res; $res | Out-File .\.gitignore
答案 7 :(得分:1)
如果您有很多未跟踪的文件,并且不想“gitignore
”所有文件,请注意,自git 1.8.3 (April, 22d 2013),{{1}即使你没有首先添加该选项,也会提到git status
!
“
--untracked-files=no
”建议用户在花费太长时间时使用git status
选项。
答案 8 :(得分:0)
我来这里是为了解决一个稍微不同的问题。也许这对其他人有用:
我创建一个新分支feature-a
。作为该分支的一部分,我创建了新目录,并且需要修改.gitignore来隐藏其中的一些目录。将新工具添加到创建各种缓存文件夹的项目时,这种情况经常发生。 .serverless
,.terraform
等
在我准备将其合并回master之前,我还有其他事情,因此我再次结帐master
,但是现在git status
再次拾取了那些被禁止的文件夹,因为.gitignore已经还没有被合并。
这里的答案实际上很简单,尽管我必须找到this blog来找出答案:
只需从feature-a
分支中检出.gitignore文件
git checkout feature-a -- feature-a/.gitignore
git add .
git commit -m "update .gitignore from feature-a branch"