如何在Git中列出所有文件被修改的文件夹名称?

6

git diff --name-onlygit diff --name-status将列出所有已更改的文件,但是没有命令可以列出包含更改文件的所有文件夹名称。

例如,在这个目录树中:

test/
|
|__B/
|
|____b1.txt
|
|__C/
|
|____c1.txt

如果b1.txtc1.txt有更改,我想要输出BC
2个回答

19

这里有一种方法:

git diff --name-only | xargs -L1 dirname | uniq

解释

  • git diff --name-only: 列出所有更改的文件
  • xargs -L1 dirname: 移除文件名,只保留目录名
  • uniq: 移除重复项

你可以创建 一个别名,这样每次需要使用该命令时就不必输入整个命令:

alias git-diff-folders="git diff --name-only | xargs -L1 dirname | uniq"

目录,不是文件夹 - Michael-O
你可以添加排序功能,以便目录不重复:git diff --name-only | xargs -L1 dirname | sort | uniq - Michał Karpacki

2

这个命令会给出顶层目录的结果。

git status | cut -d'/' -f1

为了更深入的解决方案,我目前正在使用bash中的${PWD##*/}来找到更正确的解决方案。

尝试为您在git中编写一个类似于npm解决方案的解决方案:

获取npm gulp被调用的路径

我不再搜索这个问题的答案了,

git diff --name-only | xargs -L1 dirname | uniq

是由Pᴇʜ提供的正确答案。

在他的编辑后,在我的Mac电脑上可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接