github 上面有很多我们能用的开源代码,比如开源的社区代码,clone 下来跑一下,放到自己的服务器上。
过一段时间会对代码删删改改,可之前代码作者也在提交新的代码,两个代码仓库在 clone 下来那一刻就注定没办法走到一起了,话虽是这么说,可并不是说两个分支就从此路人了。代码还是能相互借鉴一下。
上面图是两个分支,两个分支都有提交新的代码,如果在这时把两个分支合并,冲突文件会特别多,相同一个文件会被修改多次。
无论是 Linux 还是 Git,得一即可得天下。 -- 池建强 http://zhuanlan.zhihu.com/mactalk/19796979
这是题外话,我想说的是,linus 有先见之明,在设计 Git 时就帮我们想好了解决方法。 git 可以给代码打补丁,我们可以把其他仓库的代码生成很多补丁,然后把补丁代码添加到自己的仓库中。ps: 关键字 git patch
git 补丁的基本原理就是把两次提交中的改动部分在分支上重新提交一次。
###git 有两种格式的 patch
####使用 git diff 生成标准的 patch
比较上图中 git init 和 0.1 version 两个 commit 中得不同
$ git diff 61343f9..94ce1b5
diff --git a/views/index.erb b/views/index.erb
index ea5c291..5f414c8 100644
--- a/views/index.erb
+++ b/views/index.erb
@@ -7,7 +7,7 @@
<link rel="stylesheet" href="style/normalize.css" media="all">
<link rel="stylesheet" href="style/index.css" media="all">
<link rel="stylesheet" href="style/small.css" type="text/css" media="screen and (max-width:768px)" />
- <script src="script/jquery.min.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="script/main.js"></script>
</head>
<body>
输出的内容就是一个补丁文件。
执行 git diff 61343f9..94ce1b5 >> patch.txt
生成一个文件就能将生成的补丁保存下来。
我们使用 git apply 来应用这个补丁
git apply patch.txt
git commit -am "Patch Apply"
git 标准 patch 就是将别人的提交内容装到 git 缓存区,然后重新提交一次。git diff 生成的 patch 还有一个好处就是将多次提交使用 git diff 生成一个 patch 文件,然后一次性提交就完成了。
还是比较上图中 git init 和 0.1 version 两个 commit 中的不同
git format-patch 61343f9..94ce1b5
命令会生成一个 0001-jquery-cdn.patch 文件这个文件和之前 git diff 生成的文件作用是一样的,只是格式不同,当然使用补丁的方式也不一样,git 专用格式的补丁需要使用 git am 命令。
执行 git am 0001-jquery-cdn.patch
来应用这个补丁。
看看 git log 是不是多了一次提交。如果有冲突需要使用 google 解决。
###结语 两个方式中比较推荐使用git format-patch,由于 git format-patch 生成的补丁中含有这个补丁开发者的名字,因此在应用补丁时,这个名字会被记录进版本库,显然,这样做是恰当的。因此,目前使用 Git 的开源社区往往建议大家使用 format-patch 生成补丁。
EOF
http://tise.c2qu.com/index.php/2014/08/21/27.html
[1]: http://tise.c2qu.com/usr/uploads/2014/08/3738176363.jpg