【发布时间】:2018-11-06 16:46:14
【问题描述】:
所以我正在尝试清理一个脚本,该脚本使用git status 获取当前暂存文件的列表,以返回每个暂存文件的相对文件路径。我查看了git status 的文档,看看是否有办法让它返回每个暂存文件的 absolute 路径,但似乎没有一个选项,并且git ls files 和 git diff 将适用于此,因为特定用例是在合并期间。
在合并期间,使用 git diff 不会返回任何内容,而 git status 确实显示所有暂存文件,因此我无法使用 git status。
从我拥有的这个列表中,我想通过文件列表 grep 提取包含字符串 "Path: " 的任何行并输出它。基本上,我有一个暂存的 .yml 文件列表,我想提取这些 yml 中对 Path 属性的所有更改。这是我到目前为止所拥有的:
IFS=$'\n'
for file in `git status -s -uno | sed s/^..//`
do
relativePath=$(echo $file | sed 's/^[ \t]*//;s/[ \t]*$//' | tr -d '"')
startPath=`pwd`
grep "Path: " "$startPath/$relativePath"
done
unset IFS
解释:
git status -s -uno | sed s/^..//
- 我将
git status的结果通过管道传送到sed以删除任何多余的空格
relativePath=$(echo $file | sed 's/^[ \t]*//;s/[ \t]*$//' | tr -d '"')
- 我回显文件路径并将其通过管道传输到
sed,以删除在for循环开始时未从初始sed调用中删除的任何额外空格。然后,我将其通过管道传输到tr以从字符串中删除第一个和最后一个双引号,因为我需要将该相对路径与我的起始路径组合起来以获得完整路径。
startPath=`pwd`
grep "Path: " "$startPath/$relativePath"
- 将当前工作目录存储在一个变量中,然后将它与我们的相对路径结合起来并传递给
grep
这个脚本可以工作并提取我需要的数据,但我觉得有一种更简洁的方法可以做到这一点。有没有办法让git status返回每个暂存文件的完整路径,这样我就不必将我的第二个$startPath变量与$relativePath结合起来传递给grep?
【问题讨论】:
-
这是一个关于从 git status 获取完整路径的问题。 stackoverflow.com/questions/5237605/…
-
git diff-index --cached --name-only @