git可以帮助我在应用程序升级期间合并更改

时间:2013-02-13 09:50:46

标签: git configuration merge

我现在为客户进行软件升级(Atlassian软件,jira,confluence等)。我每次遇到的一个问题是客户可能已经对应该处理(保留或忽略)的已安装版本(配置更改,更改的Web模板等)进行了一些自定义。我不确切知道哪些文件发生了变化,我需要确保不要错过任何内容。到目前为止,我的解决方案是提取已安装版本的安装tar.gz并使用rsync(使用--verbose --dry-run --itemize-changes)来识别已更改的内容。然后我做了一些grep和sed magic来过滤掉有趣的部分,然后“手动”应用检测到的变化。

所以基本上我有三个目录; A(旧版本更改),B(旧版本清除)和C(新版本)。我想确定i A与B相比的变化,并可选择将它们应用于C。

现在,我可以使用git来帮助我完成这个过程吗?我特别不喜欢手动应用更改部分。我对git很新,有人能指出我正确的方向还是告诉我为什么这是一个糟糕的主意?

1 个答案:

答案 0 :(得分:2)

传统的做法是使用diffpatch。每个人都知道diff - 它比较文件并打印它们的差异。您也可以将它与整个目录一起使用。但并非所有人都知道您可以获取diff的输出(在正确的模式下)并将其提供给patch -p1或类似的并让它在diff文件中指定更改(通常命名为{{1 }})。

如果您知道安装了哪个版本的工具,只需在临时目录中解压缩它的新副本,然后将其与工作副本进行区分。这将为您提供一个补丁文件(您肯定可以存储在源代码管理中!)。然后可以将该文件应用(“移植”)到其他已安装的实例,包括其他版本,只要没有合并冲突。如果存在冲突,您将收到通知,然后可以手动修复。

顺便提一下,这就是Linux打包的工作原理 - 经销商采用上游资源和他们自己的补丁文件,并在构建/打包时将它们编织在一起。