操作git diff输出

操作git diff输出,git,diff,git-diff,Git,Diff,Git Diff,如果我想围绕它编写脚本并编辑实际的新代码行/更新代码行,是否可以对git diff输出进行操作 假设我有git跟踪的文件'foo' 傅: 我编辑它(在第3行中添加“(编辑)”)和 给我 workspace@workspace:~/gitRepo/$ git diff foo diff --git a/foo b/foo index 9c2a709..30fb870 100644 --- a/foo +++ b/foo @@ -1,4 +1,4 @@ line 1 line 2 -line 3 +

如果我想围绕它编写脚本并编辑实际的新代码行/更新代码行,是否可以对git diff输出进行操作

假设我有git跟踪的文件'foo'

傅:

我编辑它(在第3行中添加“(编辑)”)和

给我

workspace@workspace:~/gitRepo/$ git diff foo
diff --git a/foo b/foo
index 9c2a709..30fb870 100644
--- a/foo
+++ b/foo
@@ -1,4 +1,4 @@
line 1
line 2
-line 3
+line 3 (edit)
line 4
我希望能够运行
git diff | scriptthattaddsbartonewstrings
,它可以编辑foo,从而

cat foo
将呈现

line 1
line 2
line 3 (edit)bar
line 4

这是可以想象得到的吗?

是的,它可以。您可以通过管道将任何git命令的输出传输到任何shell命令(grep、sort等),并根据需要对其进行处理。没有任何东西可以阻止您将此输出作为输入传递到shell脚本。

此脚本将在每个修改和添加的行中附加一个字符串(说明:以
+
开头的行)

如果您需要任何修改,请告诉我

#/垃圾箱/垃圾箱
#将此字符串更改为要附加到修改行的任何内容
appending=“bar”
写入文件(){
echo-ne“$content”>“$file”
}
skip_start=true
content=“”
读行时;做
如果$skip_启动;然后
#检查“起跑线”
[[“$line”=@@*]&&skip_start=false
#查找文件名
如果[[“$line”==+++*];然后
file=$(echo“$line”| sed-e的/^+++b\/\(.*\)$/\1/)
fi
持续
fi
#检查当前文件的差异是否已结束
如果[[“$line”==diff\--git*];然后
写入文件
#重置变量
skip_start=true
content=“”
持续
fi
#处理差异
第一个字符=${line:0:1}
如果[[“#$first#u char#”=='##'| |“$first#u char”=='-'];然后
持续
elif[“$first_char”=='+'];然后
line=“${line:1}$追加”
fi
#防止在开头换行
如果[-n“$content”];然后
内容+=“\n”
fi
内容+=“$line”
完成
写入文件

对不起,我是个十足的傻瓜。命名脚本“append”并运行
git diff|sh append
为我提供了
workspace@workspace:~/Desktop/foo$git diff | sh append append:15:append:[[:找不到append:18:append:[[:找不到append:15:append:[:找不到append:18:append:[[:找不到追加:15:append:[:找不到追加:18:append:[:找不到追加:15:append:[:找不到追加:15:append:[:找不到追加:18:append:[:找不到追加:18:append:[:没有找到
任何想法?@user2347638您在哪个系统上使用脚本?在哪个环境下?
[[
是一个特定于bash的命令。我正在运行Ubuntu并使用GNOME外壳。我应该在mac上试用吗?谢谢这里的帮助,顺便说一句——非常感谢您在mac上的出色工作——我将对mac和Ubuntu做一点研究。非常感谢!事实上,我不得不删除第7行的-ne选项,否则它在第1行
-ne]前面加了“-ne”第1行
。除此之外,它就像一个符咒!
workspace@workspace:~/gitRepo/$ git diff foo
diff --git a/foo b/foo
index 9c2a709..30fb870 100644
--- a/foo
+++ b/foo
@@ -1,4 +1,4 @@
line 1
line 2
-line 3
+line 3 (edit)
line 4
line 1
line 2
line 3 (edit)bar
line 4