一家商业公司已经分叉了一个开源项目,并添加了自己的命令行选项。我的问题是很久以前的分叉,我想更新代码以利用新功能。
鉴于他们已遵守GPL并发布了修改后的源代码存档,我如何最佳确定他们分支的git版本?
答案 0 :(得分:3)
因为你需要只针对tarball找到它,所以fork-point的最佳猜测是找到对你的tarball具有最小差异的提交。
如果您认为您的fork从某个已发布的标记版本开始,您可以使用:
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,没有任何上下文和此差异的计数行。然后它按照这个行数改变排序。
答案 1 :(得分:0)
查看公司开始编辑之前的最后一次提交ID(叉点)。
然后在os repo中找到commit id。
然后我建议对两个repos的最新提交进行区分,修补公司repo中的更改并尝试将其应用到新分支中的os repo。修复一些冲突,测试,测试,测试,并希望你的好!
答案 2 :(得分:0)
假设您可以访问原始开源项目和商业分支的Git存储库,则可以使用git merge-base
:
git merge-base original_project/master commercial_fork/master
这将找到original_project/master
commercial_fork/master
的最新共同祖先。此命令的输出是fork当前派生自的Git修订版。您可以使用git describe
或git tag --contains
来尝试识别与该Git修订版对应的项目版本。