git库整合


有两套git代码,为代码A和代码B。代码A是自己在开发的,代码B是另外一套官方代码,两套代
码不一样。现在我想将A的一些更改移植到B中?应该要怎么做?打补丁的方法可不可以(能提供资料吗)?因为更改太多,不想一项项的手动移植。如果不行,有什么好办法吗?谢谢!

Android Ubuntu git github Linux

YYYAAA 10 years, 4 months ago
  1. 先将B的代码拉下来,然后在本地合并代码。
  2. 这时出现冲突,根据你的描述更改太多,就不要手工合并了,建议使用图形化的工具。
    Merge的图形化工具,Win下我一般用WinMerge,Linux下用Meld。
  3. 合并完后,将更改的文件手动add,再commit就可以了。

可以参考我的这篇文章的第二部分: 问题驱动的Git学习

S.ingle answered 10 years, 4 months ago

假定代码目录结构一样


 $ git format-patch <commmit-id> -w  # 在A中 <commit-id> 是你要生成patch的最前面的一个commit的parent的commit id,根据commit数量会生成多个patch,名字为[0-9]{4}(-.*)+\.patch的样子
$ cp *.patch <path-to-B>
$ cd <path-to-B>
$ git am xxx.patch --ignore-whitespace # 需要按顺序来,最后的参数比较重要,因为code style不规范的时候往往有trailing space,git默认对于有trailing space的patch会终止patch的过程

以上会将commit的message自动带入B中

假定目录结构不一样


 $ cd <path-to-A>
$ git diff <commit-id-start>..<commit-id-end> <file> -w --no-prefix > xxx.patch
$ cp xxx.patch <directory-of-file-in-B>
$ cd <directory-of-file-in-B>
$ patch -p0 < xxx.patch

这时需要手动进行commit

注1: patch命令的 -p参数是去掉多少层目录,事实上在目录结构一致的情况下,也可以用 patch -p1 < xxx.patch 来打patch,这样需要手动commmit
注2: 第二种情况冲突时会产生.orig(原文件)和.rej(冲突部分)
注3: 第二种情况也可以用git apply来打patch,但我没有用过

奈良原一铁 answered 10 years, 4 months ago

Your Answer