Что у меня есть
У меня прочитано много SO вопросов о объединение хранилищ .Я почти у цели, но мне чего-то не хватает.
У меня есть два репозитория current-repo
, которые опубликованы и опубликованы, и old-repo
, которых нет.У меня есть единственная копия.Их истории выглядят примерно так:
1--2--3--4--5 <= current-repo
=
content is the same
=
old-repo => a--b--c--d--e
Что я хочу
В идеале, если объединить два репо, я получу репо с историей, например
1. a--b--c--d--1--2--3--4--5 <= notice, duplicate old entry "e" is dropped"
Я также согласился бы на следующее:
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
То, что я пробовал
Я могу добраться до этой точки (локально) с помощью
cd ~/current-repo
git remote add -f old-repo ~/old-repo
git replace -f --graft 1 d
Теперь,я понимаю, что на данный момент я должен нажать / потянуть refs/replace/*
.Я не хочу, чтобы мои пользователи выполняли этот шаг.
Решения git graft
(и, возможно, некоторые git replace
), которые я видел, имели шаг git filter-branch
.Я попробовал это, а также git rebase
-ing, но были переписаны только хеши из истории current-repo
.Я тоже не хочу этого.Мне все равно, будет ли история из old-repo
get перефразирована.Как я уже говорил, это репо не публикуется и не передается.По сути, в следующий раз, когда мои пользователи сделали git fetch
, они получат кучу старой истории, в дополнение к той «новой» истории, которую они пропустили.
tl; dr
Я хочу объединить два репозитория git, поддерживая линейную историю и поддерживая хеши «более нового» репозитория.Как мне попасть в хранилище с выбранной историей (см. Выше) или чем-то подобным?