gpt4 book ai didi

patch - 这意味着将修改后的程序作为补丁分发?

转载 作者:行者123 更新时间:2023-12-04 08:06:00 31 4
gpt4 key购买 nike

我已经阅读了 GNU 项目中关于开源和其他许可证的文章。某些许可证允许您将更改发布为补丁,而不是完整的源代码(例如 Q 公共(public)许可证或 gnuplot 许可证)。这是什么意思?这样的补丁是什么样的?你能举个例子吗?
我不想关注法律情况,而是关注编程 - 一般定义等。

最佳答案

一个 patchdiff 的结果在引用源代码树(通常是项目的原始版本)和修改后的版本之间。
它通常通过 POSIX diff 获得命令。但如今,随着 SVN、Mercurial 或 git 等版本控制工具的普遍使用,补丁通常使用这些工具生成(svn diffhg diffgit diff 等)
在接收端,补丁通常与 POSIX patch 一起应用。命令。
这是一个例子。假设您正在处理一个项目(下面的orig_version 目录)。在进行任何更改之前,明智地创建它的副本(下面的 my_version 目录)并从副本中修改文件:

cp -a orig_version my_version

# Change "This is the original version"
# ... to "This is my modified version"
$ vi my_version/README.txt
让我们看看差异:
$ diff -ruN orig_version my_version
diff -ruN orig_version/README.txt my_version/README.txt
--- orig_version/README.txt 2021-02-16 10:53:05.303423169 +0100
+++ my_version/README.txt 2021-02-16 10:53:00.243495007 +0100
@@ -1 +1 @@
-This is the original version
+This is my modified version

# Rredirect this output so as to
# create a patch file we can send
$ diff -ruN orig_version my_version > /tmp/my.patch
上面的输出显示了两个目录树之间的差异。我们已将差异放在一个文件中,稍后我们可以发送(例如通过邮件)给其他人,然后他们将能够查看更改并使用 patch 应用它们:
# First we create a copy of our project
$ cp -a orig_version test_version

$ cd test_version

$ cat README.txt
This is the original version

# Then we apply the patch
$ patch -p1 < /tmp/my.patch
patching file README.txt

# Let's see the result
$ cat README.txt
This is my modified version
注意:因为我们在 test_version目录,我们使用了 -p1选项以便 patch忽略在 diff 的输出中找到的文件路径的第一个元素( --- orig_version/README.txt 变为 --- README.txt ,与 +++ 行相同)。
25 年前,人们过去常常通过邮件发送和接收补丁,并像我刚才展示的那样应用它们。今天,随着分布式版本控制系统以及 Bitbucket 和 Github 等网站的出现,人们克隆存储库,使用他们的工具来提取最后的更改,获取差异,推送他们的更改,他们发送拉取请求而不是发送补丁邮件。

关于patch - 这意味着将修改后的程序作为补丁分发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66221520/

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