如何找到源代码转储的git版本?

时间:2013-01-02 19:58:32

标签: git version-control

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

鉴于他们已遵守GPL并发布了修改后的源代码存档,我如何最佳确定他们分支的git版本?

3 个答案:

答案 0 :(得分:3)

因为你需要只针对tarball找到它,所以fork-point的最佳猜测是找到对你的tarball具有最小差异的提交。

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

  1. 将tarball导入某个分支(当然,您无需在任何地方发布)
  2. 切换到该分支
  3. 运行此命令:
  4.   

    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 describegit tag --contains来尝试识别与该Git修订版对应的项目版本。