1

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

所以基本上我有三个目录;A(旧版本有变化)、B(旧版本干净)和 C(新版本)。我喜欢识别 i A 与 B 相比的变化,并有选择地将它们应用于 C。

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

4

1 回答 1

2

执行此操作的传统方法是使用diffand patch。每个人都知道diff——它比较文件并打印它们的差异。您也可以将它与整个目录一起使用。但并不是每个人都知道您可以获取diff(在正确的模式下)的输出并将其提供给patch -p1或类似的,并让它在 diff 文件(通常命名为*.patch)中进行指定的更改。

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

顺便说一句,这就是 Linux 打包有时的工作方式——发行商获取上游源代码和他们自己的补丁文件,并在构建/打包时将它们编织在一起。

于 2013-02-13T11:55:08.707 回答