使用不同的校验和进行相同的提交..

时间:2014-06-02 00:12:45

标签: git

我正在尝试从StarTeam迁移到git,我正面临一些问题......

当我多次从现有StarTeam导入数据时,每次尝试时提交校验和都不同。

我只能将每个分支导入为单独的repo,然后使用git将分支推送到我的主repo作为本地分支。由于校验和不同,我认为git在创建正确的历史树时遇到了困难。

使用 git cat-file commit 我发现父母sha1是不同的。

如果内容相同,有没有办法强制git使它们成为相同的提交?

3 个答案:

答案 0 :(得分:3)

  

如果内容相同,有没有办法强制git使它们成为相同的提交?

不,SHA-1计算也包括父提交的id。

答案 1 :(得分:1)

提交ID取决于内容和父级,但也取决于作者和提交者的名称,电子邮件和时间戳。它看起来非常像你的导入器没有应用一个或多个时间戳,因为猜测提交者的时间戳,因为跟踪作者和提交者是不常见的。

要检查此问题,请执行git cat-file -p commit_id ,以进行两次您认为应该相同的提交。父ID中的差异将由导致此问题的因素造成影响,请检查authorcommitter行末尾的时间戳以及tree哈希以验证内容真的是一样的。

如果一切都匹配,但时间戳和父ID可以使用git filter-branch进行批量重写,那么它就是为了清理这样的混乱而构建的。在最简单的情况下,您可以使用git filter-branch --env-filter='export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"' -- --all

答案 2 :(得分:1)

  

如果内容相同,有没有办法强制git使它们成为相同的提交?

您可以获取这些分支,然后使用 grafts points 手动设置分支的正确父级。
虽然now git replace + git filter-branch is the way to replace a parent commit
just git replace

您也可以rebase your imported branch on top of the correct parent