У меня есть два репо. Первый репо (назовем это A) начался некоторое время назад; Второй репо (B) начался совсем недавно. Теперь мы думаем, что лучше сделать B подкаталогом A. Поэтому я бы хотел это сделать, но сохранить историю коммитов B.
- Я хочу полную историю коммитов. то есть я не хочу просто раздавить историю B в одном патче и добавить ее как новый коммит в A.
- Мне все равно, чтобы сохранить точные SHA1 для B (я понимаю, что это, вероятно, невозможно).
- Мне все равно, чтобы сохранить временные метки коммитов Б. (хотя это было бы неплохо иметь).
- Мне все равно, чтобы сохранить авторство.
- Я просто хочу сохранить различия / патчи каждого из коммитов B.
- Мне не важно сохранять какое-либо представление о двух отдельных репозиториях. На самом деле, я хочу, чтобы вперед был только А.
- Мне не нужно, чтобы B был git-подмодулем A, с его собственным
.git
dir или чем-то подобным.
В конце выполнения любых операций я хочу выполнить три критерия:
- Файлы и каталоги, видимые в
HEAD
из B, находятся в подкаталоге A, т.е. /path/to/repoB/somefile.js
находится в /path/to/repoA/B/somefile.js
- Все сообщения о коммитах B отображаются по порядку в хронологическом конце коммитов A
- Доступны различия каждого коммита (доступны для просмотра
git log
и т. Д.)
Некоторые примеры могут прояснить, что я намереваюсь:
- В репо B, коммит 1 должен добавить
file.txt
- коммит 2 предназначен для редактирования
file.txt
- Итак, в репо А я хочу два новых коммита:
- репо А коммит 98: добавить
B/file.txt
- repo A commit 99: edit
B/file.txt
EDIT:
Объединить git-репозиторий в подкаталоге было предложено в качестве дубликата моего вопроса. Я признаю, что это очень близко к тому, что я спрашиваю, и имеет несколько хороших ответов. Я попытался ответить на вопрос subtree
и ответ rebase --onto
. Оба были очень близки, но были неудовлетворительными: subtree
не позволял git log
просматривать историю через истории репозитория, не ссылаясь на path/to/file/without/repo-subdir
(где я переместил B в repo-subdir
); и rebase --onto
не делали историю B видимой из HEAD
.
.