有没有一种方法可以忽略所有当前的额外文件?

时间:2020-10-30 09:43:31

标签: git

我在git存储库中有一组要忽略的文件。

我知道最简单的解决方案:将它们全部手动添加到.gitignore

我不想忽略所有其他文件,因此path/*不是一个选择。如果我能以某种方式使用path/*,让git解析它,然后保存当前的“额外文件”,那将是完美的,但是就我而言,没有简单的方法可以做到这一点。 >

另一种选择是制作一个脚本,在git status的未跟踪文件之后抓取文件名,然后将输出发送到.gitignore,这可能是我最终要做的事情。

任何提示都值得赞赏。

相关但不是我的主要问题:git不包含git ignore命令是有原因的吗?

3 个答案:

答案 0 :(得分:2)

[一种]替代方法是制作一个脚本,在git status的未跟踪文件之后抓取文件名,然后将输出发送到.gitignore,这可能是我最终要做的。

要编写脚本,请始终尝试使用管道命令。

使用git status,有--porcelain选项 1 可以将其转换为管道命令。考虑还使用git ls-files --others(简称-o),但请注意,您想添加--exclude-standard选项。

相关但不是我的主要问题:git不包含git ignore命令是有原因的吗?

确切地定义它会做什么;写一个并提交,看看是否可以接受。 :-)


1 和往常一样,我对为什么不将此选项拼写为--plumbing表示自己的困惑。

答案 1 :(得分:0)

肮脏的脚本会将所有未跟踪的文件添加到gitignore:

git status -s | awk '{ if ($1 == "??") print $2 }' >> .gitignore

git status的短格式,文件每行打印一次,没有起毛。第一列说明列出的文件的状态。具体来说,未跟踪的文件是??。在git status --help上阅读其他组合。

匹配第一列,并用awk打印第二列,我们将每行附加到.gitignore中。

可能有更好或更干净的解决方案,但这可行。

答案 2 :(得分:-1)

最后,您也可以排除所有内容,然后强行添加您想要的内容。

path/*               # exclude all
!path/keep_this      # but not this
!path/keep_that      # and that