Mar*_*air 74

的输出git status --porcelain,设计很容易在脚本解析,输出的完整路径,而不是相对路径无论在哪里,你的当前目录树中.

每行输出git status --porcelain都有两个前导字符,表示文件的状态(例如,它是否未跟踪,修改,新建,删除等)后跟一个空格,所以如果你只想要所有内容的完整路径,那么输出git status你可以这样做:

git status --porcelain | sed s/^...//
Run Code Online (Sandbox Code Playgroud)

  • 与git status -s相同但没有着色. (7认同)
  • @jxramos 你仍然可以使用 cut 只是改变 git status 命令的标志,`git status --porcelain | 切-c4-`。IMO `cut` 比使用 `sed` 更好,因为更多的系统已经安装了 `cut`。 (2认同)

ear*_*ils 57

我认为切割对此有好处.

git status -s | cut -c4-
Run Code Online (Sandbox Code Playgroud)

  • 对于不熟悉`cut`命令的人,`cut -c 4 -`表示从第四个字符中取字符. (5认同)
  • 在这里我使用sed去除状态代码.之前从未使用-c标志进行剪切.太好了!将它添加到你的.gitconfig中,以获得一个好的开始时间:`de =!$ EDITOR $(git status --porcelain | cut -c4-)&#打开EDITOR中所有已更改的文件 (2认同)

seh*_*ehe 43

啊哈,我我只是理解了这个问题:你想要基地名字吗?请| while read a; do basename "$a"; done执行以下任何操作:

怎么样

  • git diff --name-only

    对于相对于索引的更改

  • git diff --name-only --staged

    为......好上演的chages :)

  • git diff --name-only HEAD

    得到了两个


Joh*_*web 7

要获得文件名,请按照您的要求:

git status --porcelain | sed -e 's!.*/!!'
Run Code Online (Sandbox Code Playgroud)

我看不出这有用.

  • 它肯定取决于您的工作流程.如果您使用的是rspec,则只能运行刚刚更改的测试.rspec $(git diff --name-only) (3认同)

Pet*_*min 5

一个更简单的解决方案,内置于git使用ls-files.

从文档:

选项

-c --cached 在输出中显示缓存文件(默认)

-d --deleted 在输出中显示已删除的文件

-m --modified 在输出中显示修改过的文件

-o --others 在输出中显示其他(即未跟踪)文件

-i --ignored 在输出中只显示被忽略的文件。在索引中显示文件时,仅打印与排除模式匹配的文件。显示“其他”文件时,仅显示与排除模式匹配的文件。标准忽略规则不会自动激活,因此至少需要 --exclude* 选项之一。

-s --stage 在输出中显示暂存内容的模式位、对象名称和阶段编号。

-u --unmerged 在输出中显示未合并的文件(forces --stage)

显示标志的示例也可以组合:

git ls-files -dmo
Run Code Online (Sandbox Code Playgroud)