我正在尝试从StarTeam迁移到git,我正面临一些问题......
当我多次从现有StarTeam导入数据时,每次尝试时提交校验和都不同。
我只能将每个分支导入为单独的repo,然后使用git将分支推送到我的主repo作为本地分支。由于校验和不同,我认为git在创建正确的历史树时遇到了困难。
使用 git cat-file commit 我发现父母sha1是不同的。
如果内容相同,有没有办法强制git使它们成为相同的提交?
答案 0 :(得分:3)
如果内容相同,有没有办法强制git使它们成为相同的提交?
不,SHA-1计算也包括父提交的id。
答案 1 :(得分:1)
提交ID取决于内容和父级,但也取决于作者和提交者的名称,电子邮件和时间戳。它看起来非常像你的导入器没有应用一个或多个时间戳,因为猜测提交者的时间戳,因为跟踪作者和提交者是不常见的。
要检查此问题,请执行git cat-file -p
commit_id
,以进行两次您认为应该相同的提交。父ID中的差异将由导致此问题的因素造成影响,请检查author
和committer
行末尾的时间戳以及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。