比较类似文件并仅应用与两者相关的更改

时间:2012-07-19 00:31:52

标签: git version-control comparison

我将处理两个基于相同样板PHP主题的项目(比如项目A和项目B)。通常情况下,我必须对两者进行相同的更改,即使每个项目中的代码略有不同。

例如,假设我已将function_1()function_2()添加到A/index.php,但我想function_2添加到{{} 1}}。或者删除内容或进行更改也是如此。

对于重大更改,在文件之间来回粘贴是低效的。

我假设这是一个更高级的git教程可能有帮助的东西? - 或者是否有专门为此目的而制作的工具? - 我在哪里可以找到有关处理此类事情的文档。

2 个答案:

答案 0 :(得分:2)

你真正应该做的是创建一个包含公共代码的“模板”分支/ repo。然后,您从该模板分支分支自定义的repos。当您对模板进行更改时,可以将它们合并到自定义的存储库中。

现在,由于您已经存在其他存储库,因此您必须捏造更改。基本上创建一个模板仓库,其中包含已自动更新所有仓库的非自定义更改。然后将自定义的repos作为遥控器添加到此模板repo git remote add customized1 URL并检出相应的分支git checkout -t -b customized1-master customized1/master

然后从模板的主人进行“假”合并到每个自定义主人:

for f in customized1 customized2; do
  git checkout $f-master
  git merge -s ours master
  git push $f $f-master:master
done

你当然可以在推进之前检查它是做了什么。

此时,您已将模板分支作为相关祖先注入到自定义的存储库/分支中。然后,您可以对模板分支进行更改(在此新repo中我的示例中称为master),并在提交后进行真正的合并:

for f in customized1 customized2; do
  git checkout $f-master
  git merge master
  git push $f $f-master:master
done

你几乎肯定想要在你推动这段时间之前检查一下发生了什么。现在,可以轻松地与所有自定义存储库共享对模板的更改。此外,如果您需要新的自定义仓库,可以从模板分支进行分支。

答案 1 :(得分:1)

实际上有一个专门为此制作的工具。如果要在项目之间共享代码,则应将它们视为您要从中提取的库,并且应具有自己的开发分支/存储库。 Git包括将远程存储库添加到项目并独立开发的能力。

您需要3个存储库。存储库A,存储库B和共享存储库C。

共享的代码应该在Repository C中,Repository A和Repository B应该将Repository C添加为远程存储库。以下是有关远程存储库如何工作的指南,应该让您对如何设置此概念有所了解:http://gitref.org/remotes/

干杯,快乐的编码!