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

我对git和版本控制都很陌生,所以我想弄清楚一个补丁是什么,它与我在git中做的其他活动有什么不同?

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

你可以在这个博客文章中看到如何创build一个补丁(你想要沟通的变化的集合,并应用到另一个补丁)

git补丁

另请参阅使用Git作为另一个具体示例来贡献Rails 。

如今,GitHub拉取请求使得在GitHub仓库上应用补丁非常容易,当您不是直接贡献者时(即,您无权直接推送回购),这非常有用。
实际上,最近GitHub推出了“ 更好的拉取请求邮件 ”来改进新补丁的通知。

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

所以,换句话说,它可能意味着文件的指令或程序处理该文件并将其应用于某些内容。

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

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

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

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

你会如何描述文件内容的变化? 你可以说第一行“这是A行”。 换成了“This is SPARTA”,甚至用第一行的最后一个单词“A”replace为另一个单词“SPARTA”。 而这正是差异告诉我们的。 比方说,我有两个版本的文件,一个叫做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 + patch自己将是一场噩梦。 例如,为了比较它们,您将永远需要检出两个版本的文件(甚至整个存储库)。 听起来不好,是吗? 所以git会为你处理所有的辛苦工作 – 它将你的本地文件与你正在使用的版本库中的文件进行比较,并且可以将它显示为“diff”,或者将“diff”作为一个补丁又名提交您的更改,甚至让您应用一些已经有的补丁文件。 没有深入细节,在这个意义上,git是完全相同的其他版本控制系统,如SVN,甚至CVS或perforce。

希望能帮助到你!

修补程序是一个小文件,用于指示存储库中的更改内容。 当你的团队以外的人拥有只读访问权限,但是有很好的代码更改时,通常会使用它。 然后他创build一个补丁并发送给你。 你应用它并将其推送到git存储库。 然后,每个人都从更新后的版本中受益,并且修补程序的作者不需要读取/写入访问权限。

这实际上主要是一个安全的事情(至less,这是人们使用它)。

补丁是一个或多个文件之间的一组差异,以显示它们之间的差异。 你通常只会生成一个补丁来向别人展示你已经改变了什么。 你可能会这样做的一个例子是当你在一个开源应用程序中find并修复一个bug,然后将修复发布到他们的bug跟踪器上。

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

 git diff > mypatch.patch 

如果您的存储库中有新文件(未跟踪),则应在创build修补程序(不提交)之前对文件进行暂存,然后使用以下命令

 git diff --cached > mypatch.patch 

您可以稍后应用该修补程序:

 git apply mypatch.patch 

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