gpt4 book ai didi

linux - 创建显示较少删除行的补丁

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:55 27 4
gpt4 key购买 nike

我需要在两个目录中的不同版本软件之间创建一个补丁,该补丁将交付给我的客户。他们需要能够将该补丁应用到旧版本以将其更新到新版本。由于安全要求(查找恶意代码等),我必须亲眼阅读这个补丁的每一行。我不想阅读所有删除的代码,因为如果有 15 万行删除和 10 万行添加,我必须通读 25 万行,而实际上只有 10 万行值得阅读。

目前我将使用以下方法创建补丁:

diff -N -r --unified=1 old new > patch.diff

然后使用以下方法应用补丁:

cp -r old new
cd new
patch -N -p1 < ../patch.diff

例如,我有这样的目录结构:

[user@hostname test]$ tree -af
.
├── ./new
│   ├── ./new/a.txt
│   ├── ./new/b.txt
│   └── ./new/c.txt
└── ./old
├── ./old/a.txt
└── ./old/c.txt

新版本增加了一个新文件b.txt,修改了a.txt,c.txt虽然去掉了所有行但仍然存在。运行我当前的补丁创建将导致此差异:

[user@hostname test]$ diff -N -r --unified=1 old new
diff -N -r '--unified=1' old/a.txt new/a.txt
--- old/a.txt 2019-07-01 18:09:59.586410797 -0400
+++ new/a.txt 2019-07-01 18:17:19.680446218 -0400
@@ -3,2 +3,3 @@
a
+h
a
@@ -8,2 +9,3 @@
a
+awdwd
a
@@ -11,23 +13,5 @@
a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
b
+foo
+bar
b
@@ -39,2 +23,9 @@
c
+d
+d
+d
+d
+d
+d
+d

diff -N -r '--unified=1' old/b.txt new/b.txt
--- old/b.txt 1969-12-31 19:00:00.000000000 -0500
+++ new/b.txt 2019-07-01 18:10:52.943204070 -0400
@@ -0,0 +1 @@
+this is an entirely new file
diff -N -r '--unified=1' old/c.txt new/c.txt
--- old/c.txt 2019-07-01 18:16:11.820985994 -0400
+++ new/c.txt 2019-07-01 18:14:59.775620402 -0400
@@ -1 +0,0 @@
-this is a file that will be empty in the new version

理想情况下,我不必阅读 a.txt 中所有删除的“b”行。补丁文件可以仅指示要删除的行号而不包含其内容,或者可以折叠大于 N 的整个已删除部分 - 只要仍然可以安全地应用补丁,对我来说无所谓。

最佳答案

git 不支持以您想要的形式生成补丁,并且如果提供了补丁也不想应用,因为它无法验证补丁是否按预期应用。我意识到这种安全措施可能不适用于您的用例,但它确实适用于 git 补丁旨在服务的用例。

所以,例如,如果你有一个文件

a
b
c

你把它编辑成

a
c

您可能想要一个只写“删除第 2 行”的补丁;但是当你将补丁应用到目标副本时,git 担心副本可能已被修改——因为 git 的全部目的是分布式开发。如果目标被编辑,那么第 2 行现在什么都不是

b

那么技术上就有冲突了。

(git format-patch 有一个-D 选项,这与你想要的有关,但它只是省略了整个被删除的文件。)

因此您需要一些其他工具。为此,我不知道一个好的。您可以编写一些自定义脚本,但复杂性和风险比最初看起来要高。

关于linux - 创建显示较少删除行的补丁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56843325/

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