Java 如何确定Git中唯一的更改行数

Java 如何确定Git中唯一的更改行数,java,git,jenkins,github,gitlab,Java,Git,Jenkins,Github,Gitlab,执行以下命令可以显示文件的本地更改和远程版本之间的行数差异: git diff --shortstat C:\dev\Sprint7 origin/master:C:\dev\Sprint7 示例结果: 18 files changed, 11 insertions(+), 8 deletions(-) 请问,我如何计算唯一更改行的总数 例如,如果Login.jsp文件的第5行被删除,相同的第5行被另一行(或字符串)替换(即,删除和插入在第5行完成),我希望将其计算为1个已更改的行 我可以通

执行以下命令可以显示文件的本地更改和远程版本之间的行数差异:

git diff --shortstat C:\dev\Sprint7 origin/master:C:\dev\Sprint7
示例结果:

18 files changed, 11 insertions(+), 8 deletions(-)
请问,我如何计算唯一更改行的总数

例如,如果Login.jsp文件的第5行被删除,相同的第5行被另一行(或字符串)替换(即,删除和插入在第5行完成),我希望将其计算为1个已更改的行

我可以通过将插入和删除相加,从上面的命令中获得该计数吗


任何帮助都将不胜感激。

我在这里粘贴一个小shell脚本。只需将
gitdiff
命令作为输入,rest将由脚本本身处理

#echo "Input Command : $1"
TOTAL_CHANGES_WITH_FILES="$($1 | grep '^+' | wc -l)"
TOTAL_CHANGED_FILES="$($1 | grep '^+++' | wc -l)"
RESULT=`expr ${TOTAL_CHANGES_WITH_FILES} - ${TOTAL_CHANGED_FILES}`
#echo "Total Changed Lines: ${RESULT}"
echo "${RESULT}"
将此代码保存到文件
changed_lines.sh
,然后使用命令运行此文件
sh changed\u lines.sh“git diff HEAD”
。根据您的配置,将
“git diff HEAD”
替换为
git diff C:\dev\Sprint7 origin/master:C:\dev\Sprint7
。这将只打印更改的行数。如果有什么不对劲。请随意评论。希望这有帮助。

不,你不能。你可以删除第5行,添加第8行,它们可能完全不相关。丹尼尔的可能副本,我感谢你的评论,但你说的是显而易见的!感谢SV,我喜欢bash解决方案,但它没有提供任何行更改=插入,例如git diff--shortstat C:\dev\Sprint7 origin/master:C:\dev\Sprint7提供2个文件更改,48个插入(+),45个删除(-)。您的解决方案显示48。这是否意味着不考虑删除?另外,我如何增强脚本,以使每种文件类型或扩展名的行都发生更改?但在您的问题中提到,您只需要
唯一的更改行
例如,如果Login.jsp文件的第5行被删除,相同的第5行被另一行(或字符串)替换(即,删除和插入在第5行完成),我希望将其计算为1个更改行。
这就是为什么我的解决方案是这样的。那么您希望我也计算删除的行吗?例外情况是,如果编辑同一行(+,-连续表示1),我必须将其计为1。你是这么说的吗?再见,谢谢。更改的行包括删除、插入和更新。I v 2用例:(1)。确定每种文件类型在远程repo中更改的行数。e、 JSP、JS、Java、XML、XLSM。无需本地与远程差异,只需远程git查询。(2) 每个文件类型没有任何更改,ur解决方案已接近,但我们需要为递归git查询指定根文件夹和文件类型。ATM,我的解决方法是,例如,对于JSP>gitdiff--shortstatc:[path to JSP]origin/master:C:[path to JSP]。这意味着有多个已知文件夹的硬编码路径。Shell解决方案很好,但我也很高兴使用git cmds。谢谢SV。我正在尝试将以下内容应用到脚本中,但还没有什么乐趣:shell globbing语法():grep pattern-r--include=*.{jsp,java}rootdir