Git:只列出“未跟踪”的文件(也包括自定义命令)

ujv3wf0j  于 2023-04-19  发布在  Git
关注(0)|答案(9)|浏览(142)

有没有一种方法可以使用像git ls-files这样的命令来只显示未跟踪的文件?
我问的原因是因为我使用以下命令来处理所有已删除的文件:

git ls-files -d | xargs git rm

我想为未跟踪的文件类似的东西:

git some-command --some-options | xargs git add

我能够找到git ls-files-o选项,但这不是我想要的,因为它还显示忽略的文件。我还能够想出以下长而丑陋的命令:

git status --porcelain | grep '^??' | cut -c4- | xargs git add

看起来应该有更好的命令可以使用。如果没有,我该如何创建自定义git命令?

2guxujil

2guxujil1#

要列出未跟踪的文件,请尝试:

git ls-files --others --exclude-standard

如果需要将输出通过管道传输到xargs,明智的做法是使用git ls-files -zxargs -0来记住白色:

git ls-files -z -o --exclude-standard | xargs -0 git add

添加未跟踪文件的不错别名:

au = !git add $(git ls-files -o --exclude-standard)

**编辑:**供参考:git-ls-files

alen0pnh

alen0pnh2#

如果您只想删除未跟踪的文件,请执行以下操作:

  • 警告这将删除所有未跟踪的文件,包括目录 *
git clean -df

如果你还想包含特别忽略的文件,可以添加x。我整天都在使用git clean -dfx
您可以通过编写一个名为git-whatever的脚本并将其放在您的路径中来创建自定义git。

jaxagkaj

jaxagkaj3#

git add -A -n会做你想做的事情。-A将所有未跟踪的 * 和修改的 * 文件添加到存储库中,-n使其成为dry-run,其中不执行添加,但给出状态输出,列出每个文件,* 将 * 已添加。

hiz5n14c

hiz5n14c4#

一切都很简单
要获取所有未跟踪文件的列表使用命令 git status选项 -u(--untracked-files)

git status -u
vof42yt1

vof42yt15#

接受的答案会在文件名有空格时崩溃。我现在不确定如何更新alias命令,所以我将在这里放置改进的版本:

git ls-files -z -o --exclude-standard | xargs -0 git add
0yg35tkg

0yg35tkg6#

我知道这是一个老问题,但在列出未跟踪文件方面,我想我会添加另一个也列出未跟踪文件夹的问题:
你可以使用git clean操作和-n(模拟运行)来显示它将删除哪些文件(包括.gitignore文件):
git clean -xdn
这样做的好处是可以显示未被跟踪的所有文件所有文件夹。参数:

  • x-显示所有未被跟踪的文件(包括被git和其他人忽略的文件,如构建输出等)
  • d-显示未跟踪目录
  • n-最重要的是!**- dryrun,即实际上不删除任何内容,只是使用清理机制来显示结果。

如果你忘记了-n,这样做可能有点不安全。所以我通常在git config中给它取别名。

tvz2xvvm

tvz2xvvm7#

当查找可能要添加的文件时。git show的输出做到了这一点,但它也包含了很多其他的东西。下面的命令对于获得相同的文件列表很有用,但没有所有其他的东西。

git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'

当在管道中组合以查找匹配特定模式的文件并将其通过管道传输到git add时,这很有用。

git status --porcelain | grep "^?? "  | sed -e 's/^[?]* //' | \
egrep "\.project$|\.settings$\.classfile$" | xargs -n1 git add
x3naxklr

x3naxklr8#

我之前检查的所有答案也会列出要提交的文件。这里有一个简单易行的解决方案,只列出尚未在repo中并且不受.gitignore约束的文件。

git status --porcelain | awk '/^\?\?/ { print $2; }'

git status --porcelain | grep -v '\?\?'
l2osamch

l2osamch9#

我认为这将做同样的事情作为原来的海报打算:
git add .
添加一些警告:

  • 您已运行git status并确认本地目录是干净的
  • 您已经对git status中报告的每个文件运行了git diff,并确认更改是干净的
  • 自动化单元测试涵盖了您的更改
  • 自动化集成测试涵盖了您的更改
  • 您已经通过调试器运行了集成测试,通过观察新代码的白色框来验证新行为
  • 您已经运行了所有的linting / code约定规则,并且它们通过了
  • 您已经运行了所有的单元测试,并且它们都通过了
  • 您已经运行了所有的本地集成测试,并且它们都通过了
  • 您已将更改部署到应用程序审查环境中,并在与其他更改隔离的情况下手动进行了端到端测试
  • 您已经合并了来自主分支的最新测试,并重新运行了所有自动化单元和集成测试,修复了任何合并冲突和测试失败

现在,我的朋友,你已经准备好不受惩罚了。

相关问题