gpt4 book ai didi

java - 将转换后的(删除和创建的)文件与 git 进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:26 25 4
gpt4 key购买 nike

我做了很多从 Java 到 Kotlin 的转换。审查具有大量此类转换的 pull 请求是很困难的,因为 git 无法识别Example.java 的删除“属于”创建Example.kt。这意味着我必须在一个窗口中查看已删除文件的差异,并在另一个窗口中查看新创建的文件。

我想知道是否有一种简单的方法来获取并排 View ,最好使用 git 命令行。由于我的例子中的语言(Java 和 Kotlin)有相当大的差异,git 可能无法将转换后的行彼此对齐。然而,这个问题更通用:可以显示并排差异来比较两个不同的文件吗?假设在提交 A 处我们有 Example.java,而提交 B 将其从 Java 转换为 Kotlin 并转换为 Example.kt。

作为奖励,这种并排差异可以对齐 Java 到 Kotlin 转换的转换行吗?我想这不是一件容易的任务,因为 diff 工具需要对语言级别上发生的情况(不仅仅是源文件级别字符差异)有一定的了解,并并排比较那些相似的部分。但谁知道呢,也许有人知道实现这一目标的方法?

最佳答案

在任何相当最新的系统上生成这些对都很容易:

git diff --name-status --diff-filter=AD @~| awk -F$'\t' '
BEGIN { AD["A"]["/"]; AD["D"]["//"] }
{ base=$2; sub(/\.[^.]*$/,"",base); AD[$1][base]=$2 }
END { for ( k in AD["D"] )
if ( AD["A"][k] )
print AD["D"][k]"\t"AD["A"][k]
}'

BEGIN 行只是将 AD 设置为具有不匹配的仿制品基本名称的数组数组,sub 行按基本名称记住添加和删除的文件,END block 打印出匹配的基本名称对。

无论如何,在 Linux 上,很容易发出命令来检查对,

# (the above, just printing the right commands:)
git diff --name-status --diff-filter=AD @~| awk -F$'\t' '
BEGIN { AD["A"]["/"]; AD["D"]["//"] }
{ base=$2; sub(/\.[^.]*$/,"",base); AD[$1][base]=$2; }
END { for ( k in AD["D"] )
if ( AD["A"][k] )
print "vim -O <(git show @~:"AD["D"][k]")\t"AD["A"][k]
}'

然后选择您想要检查的对。

你可以相当容易地让 Git 在任意转换的文本上运行其差异,寻找“Git textconv”,但我认为让任何同步器从渲染的文本向后工作到生成它的原始文本将是一个项目。

关于java - 将转换后的(删除和创建的)文件与 git 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54697158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com