什么是git版本控制中的补丁?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是git版本控制中的补丁?相关的知识,希望对你有一定的参考价值。

我是git和版本控制的新手,所以我想弄清楚补丁是什么,它与我在git中做的其他活动有什么不同?

我什么时候申请补丁?每次我承诺都会发生吗?

答案

你可以在这个blog post中看到如何创建一个补丁(你想要传达的变化集合并应用于另一个仓库)

(图片来自2008年博客文章“Bioruby with git: how would that work?”,由Jan AERTS出版)

另见Contributing to Rails with Git作为另一个具体例子。

如今,GitHub拉取请求使得gazHub repos上的apply patches非常容易,当你不是直接贡献者时(即你没有权利直接推送回购)这很有用。 实际上,最近GitHub引入了“Better Pull Request Emails”来改进新补丁的通知。

另一答案

Patch是一个Unix程序,它根据单独文件(称为补丁文件)中包含的指令更新文本文件。

因此,换句话说,它可能意味着带有指令的文件或处理该文件并将其应用于某个程序的程序。

现在,什么是补丁文件?假设您有一个包含2行的文本文件:

This is line A.
This is line B, or otherwise #2.

然后你改变了第一行,现在你的文件看起来像这样:

This is SPARTA.
This is line B, or otherwise #2.

您如何描述对文件内容的更改?你可以说第一行“这是A行”。被替换为“这是SPARTA。”,甚至第一行的最后一个单词“A”替换为另一个单词“SPARTA”。而这正是diff告诉我们的。假设我有这个文件的两个版本,一个叫file1.txt,另一个叫file2.txt,然后我运行diff并得到这个:

$ diff -u file1.txt file2.txt 
--- file1.txt   2011-11-26 11:07:03.131010360 -0500
+++ file2.txt   2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
 This is line B, or otherwise #2.

对变更进行描述后,您可以将其应用于初始内容并获取修改后的内容。这些改变,以“补丁”式程序可以理解的统一格式,称为补丁文件。这就像不是从他们教你如何钓鱼的人那里钓鱼,这样你就可以自己将鱼从水中挖出来。现在,让我们将我们的补丁应用于file1.txt,使其看起来与file2.txt完全一样:

$ cat file1.txt 
This is line A.
This is line B, or otherwise #2.
$ cat file2.txt 
This is SPARTA.
This is line B, or otherwise #2.
$ diff -u file1.txt file2.txt > changes.patch
$ cat changes.patch 
--- file1.txt   2011-11-26 11:09:38.651010370 -0500
+++ file2.txt   2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
 This is line B, or otherwise #2.
$ patch < changes.patch 
patching file file1.txt
$ cat file1.txt 
This is SPARTA.
This is line B, or otherwise #2.
$ 

您可能认为只有两个版本的此文件更容易。那么,在这个简单的情况下,这是真的。但是当你有很多文件,并且这些文件非常大时,有几行更改而不是整个文件的两个副本会更有效率。

在谈论git时,补丁文件仍然意味着相同的事情,但自己使用diff +补丁将是一场噩梦。例如,您将始终必须签出两个版本的文件(甚至整个存储库)才能进行比较。听起来不那么好,是吗?因此,git会为您处理所有艰苦的工作 - 它将您的本地文件与您正在使用的存储库中的文件进行比较,并将其显示为“diff”,或将“diff”应用为patch也提交您的更改,甚至允许您应用一些已经存在的补丁文件。在没有深入细节的情况下,git与其他版本控制系统(如SVN,甚至CVS或perforce)完全相同。

希望能帮助到你!

另一答案

补丁是一个小文件,用于指示存储库中已更改的内容。它通常在团队外部的人具有只读访问权限但具有良好的代码更改时使用。然后他创建一个补丁并将其发送给您。您应用它并将其推送到git存储库。然后每个人都从更新版本中受益,并且补丁的作者不需要读/写访问权限。

它主要是一个安全的东西(至少,这是人们使用它的东西)。

另一答案

补丁是一个或多个文件之间的一组差异,以显示它们之间的不同之处。您通常只会生成一个补丁,以向某人显示您已更改的内容。您可能会这样做的一个示例是当您在开源应用程序中找到并修复错误,然后将修复程序发布到其错误跟踪器上时。

另一答案

补丁文件表示可以按任何顺序应用于任何分支的单组更改。通过使用补丁,您将获得一个或多个文件之间的差异。稍后,您可以应用差异(补丁)来获取新文件的更改。 Git中的补丁有很多用途。如果您的工作目录中有未提交的更改,并且您需要将更改应用于其他位置,只需创建一个修补程序并应用该修补程序。

git diff > mypatch.patch

如果您的存储库中有新文件(未跟踪),那么您应该在创建补丁(不提交)之前暂存该文件,并使用以下命令

git diff --cached > mypatch.patch 

您可以稍后应用补丁:

git apply mypatch.patch

如果你想对git存储库进行一些更改,你没有写权限,只需进行更改并在两者之间创建补丁,并将补丁发送给有权应用补丁的人,由此您的更改应添加到该git存储库。

以上是关于什么是git版本控制中的补丁?的主要内容,如果未能解决你的问题,请参考以下文章

什么是git服务器

关于git的认知

Git分布式版本控制工具使用指南

Git原理架构详解

Git入门

如何管理在每个 git 版本中添加私有代码片段?