2

一家商业公司已经分叉了一个开源项目并添加了他们自己的命令行选项。我的问题是分叉是很久以前的事了,我想更新代码以利用新功能。

鉴于他们已遵守 GPL 并发布了修改后的源的存档,我怎样才能最好地确定他们分支的 git 版本?

4

3 回答 3

3

由于您只需要针对 tarball 找到它,因此对 fork-point 的最佳猜测是找到与您的 tarball 差异最小的提交。

如果您认为您的 fork 是从某个已发布的标记版本开始的,您可以使用以下命令:

  1. 将你的 tarball 导入到某个分支(当然你不需要在任何地方发布它)
  2. 切换到那个分支
  3. 运行此命令:

eval "git for-each-ref --shell --format 'echo -n %(objectname) " "; git diff %(objectname) --minimal | wc -l' refs/tags" | sort -n -k 2 -r | tail

此命令将在第一列中打印提交名称,在第二列中更改行数(大约,因为它也计算 diff 的标题,但应该不会有太大变化),按更改行数排序。您的分叉点应该是那里的最后一行。

它是如何工作的:它在每个标签和你的 tarball 输入之间运行 git diff,具有统一的格式,没有任何上下文和这个差异的计数行。然后它按更改的行数排序。

于 2013-01-03T08:36:13.163 回答
0

假设您可以访问原始开源项目和商业分支的 Git 存储库,您可以使用git merge-base

git merge-base original_project/master commercial_fork/master

这将找到两者最近的共同祖先original_project/master commercial_fork/master。该命令的输出是当前派生分支的 Git 修订版。您可以使用git describegit tag --contains尝试识别与该 Git 修订相对应的项目版本。

于 2013-01-02T20:37:43.123 回答
0

在您的公司开始编辑之前查看最后一个提交 id(分叉点)。

然后在 os repo 中找到该提交 ID。

然后我建议区分两个存储库的最新提交,修补您公司存储库中的更改并尝试将其应用于新分支中的操作系统存储库。修复一些冲突,测试,测试,测试,希望你的好!

于 2013-01-02T20:01:41.803 回答