84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
有两套git代码,为代码A和代码B。代码A是自己在开发的,代码B是另外一套官方代码,两套代码不一样。现在我想将A的一些更改移植到B中?应该要怎么做?打补丁的方法可不可以(能提供资料吗)?因为更改太多,不想一项项的手动移植。如果不行,有什么好办法吗?谢谢!
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
假定代码目录结构一样
$ git format-patch -w # 在A中 是你要生成patch的最前面的一个commit的parent的commit id,根据commit数量会生成多个patch,名字为[0-9]{4}(-.*)+\.patch的样子 $ cp *.patch $ cd $ git am xxx.patch --ignore-whitespace # 需要按顺序来,最后的参数比较重要,因为code style不规范的时候往往有trailing space,git默认对于有trailing space的patch会终止patch的过程
以上会将commit的message自动带入B中
假定目录结构不一样
$ cd $ git diff .. -w --no-prefix > xxx.patch $ cp xxx.patch $ cd $ patch -p0 < xxx.patch
这时需要手动进行commit
注1: patch命令的 -p参数是去掉多少层目录,事实上在目录结构一致的情况下,也可以用patch -p1 < xxx.patch来打patch,这样需要手动commmit注2: 第二种情况冲突时会产生.orig(原文件)和.rej(冲突部分)注3: 第二种情况也可以用git apply来打patch,但我没有用过
patch -p1 < xxx.patch
可以参考我的这篇文章的第二部分:问题驱动的Git学习。
假定代码目录结构一样
以上会将commit的message自动带入B中
假定目录结构不一样
这时需要手动进行commit
注1: patch命令的 -p参数是去掉多少层目录,事实上在目录结构一致的情况下,也可以用
patch -p1 < xxx.patch
来打patch,这样需要手动commmit注2: 第二种情况冲突时会产生.orig(原文件)和.rej(冲突部分)
注3: 第二种情况也可以用git apply来打patch,但我没有用过
Merge的图形化工具,Win下我一般用WinMerge,Linux下用Meld。
可以参考我的这篇文章的第二部分:问题驱动的Git学习。