How to combine two git repos, preserving the history of both, and the hashes of one?
我有什么
我读过很多关于组合存储库的问题。我快到了,但我错过了一些东西。
我有两个存储库
1 2 3 4 5 | 1--2--3--4--5 <= current-repo = content is the same = old-repo => a--b--c--d--e |
我想要什么
理想情况下,通过合并两个回购,我将得到一个具有类似历史的回购
1 | 1. a--b--c--d--1--2--3--4--5 <= notice, duplicate old entry"e" is dropped" |
号
我也同意以下内容:
1 2 3 | 2. a--b--c--d--e--1--2--3--4--5 <= duplicate content in"e" and"1" 3. foo--bar--baz--buz--1--2--3--4--5 <= like #1 above, but rehashed"old" history 4. foo--bar--baz--buz--bif--1--2--3--4--5 <= like #4, but"bif" and"1" have duplicate content |
我试过的
我可以(在本地)通过
1 2 3 | cd ~/current-repo git remote add -f old-repo ~/old-repo git replace -f --graft 1 d |
。
现在,我的理解是,在这一点上,我必须推动/拉动
我看到的
我想结合两个git repo,维护一个线性历史,并维护"更新的"存储库的散列。如何到达具有所选历史(上面)或类似历史的存储库?
DR
不,不可能。
细节
通过设计,在开始添加更多历史记录的同时保留散列是不可能的。
提交的sha1散列基于加密签名的思想:它不仅散列提交及其内容、日期、提交者和所有这些内容,而且散列父对象,这意味着它散列导致提交的整个历史。
因此,如果不更改历史被扩展(或以任何其他方式修改)的每个提交的哈希,就无法更改历史。