git split repo但具有相同的commit-id

Sri*_*har 0 git git-filter-branch git-subtree

我有一个很大的git repo,我想把它分成2.我能够使用"git filter-branch"或"git subtree split"来完成这个,但是这两种方法都创建了全新的commits-id(SHA).我知道我们正在重写历史,它会改变commit-id.

但是,即使在拆分回购后,我的要求也需要具有相同的commit-id.可能吗?

例:

有下面提交的git repo foo-bar.git

*foo-bar.git*
1fd3dsg refs #1 change-1 to foo
4sad2as refs #2 change-1 to bar
3edsads refs #3 change-2 to foo
5adsggh refs #4 change-2 to bar
Run Code Online (Sandbox Code Playgroud)

现在我们将repo foo-bar.git拆分为foo.git和bar.git.现在foo.git将获得为foo和bar.git做的所有提交将获得为bar提交的所有提交,但是他们的commit-id已经改变.

我得到了什么:

*foo.git*
s43dfsa refs #1 change-1 to foo
a234s2f refs #3 change-2 to foo

*bar.git*
1s3ds3q refs #2 change-1 to bar
3re2ef2s refs #4 change-2 to bar
Run Code Online (Sandbox Code Playgroud)

我期待的是什么.

*foo.git*
1fd3dsg refs #1 change-1 to foo
3edsads refs #3 change-2 to foo

*bar.git*
4sad2as refs #2 change-1 to bar
5adsggh refs #4 change-2 to bar
Run Code Online (Sandbox Code Playgroud)

Sve*_*ven 5

更改提交ID是不可避免的.这些基于每个提交,提交消息和父提交ID的更改.

因为当重新排列单个提交时,父提交ID将更改,因此提交ID不能保持不变.