Реинтегрировать файлы в подпапку репозитория GIT - PullRequest
0 голосов
/ 17 сентября 2018

Существует GIT хранилище (REPO1). Давным-давно он имел следующую раскладку:

bin
    file.sh
src
    file.cpp

Затем bin был перенесен в CVS (REPO2). Макеты стали:

REPO1

src
    file.cpp

REPO2

file.sh

Теперь я хочу переместить file.sh обратно в bin подпапку REPO1 с ее историей. Я перенес CVS в новый GIT репозиторий REPO3, используя cvs2git.

Истории репо:

REPO1    REPO3
N          X
|          |
|          |
D          |
|          |
O2        O'2
|          |
O1        O'1
  • D - фиксация при удалении bin из REPO1.
  • O1 , O2 - общие коммиты. У них есть O'1 и O'2 братьев и сестер в REPO3, но с разными идентификаторами фиксации (дерево файлов изменено).

Теперь я хочу иметь следующую историю:

M
| \
N  X
|  |
D  |
| /
O2
|
O1
  • M - объединить коммит

Я пытался использовать git subtree -P bin REPO3, но он дублировал историю file.sh в период, когда файл жил в REPO1.

M
| \
N  X
|  |
D  |
|  |
O2 O'2
|  |
O1 O'1

Затем я попытался использовать git checkout -b temp_branch O2; git cherry-pick O'2..X, чтобы получить только "новые" коммиты от REPO3, но это не удалось из-за разной компоновки REPO3 (нет папки bin ).

Может быть, есть более стандартный способ выполнить мою задачу? Или я пропускаю какой-то шаг, который бы мне помог?

1 Ответ

0 голосов
/ 17 сентября 2018

cvs2git создает файл в формате fast-import. Это относительно простой формат, который можно изменить с помощью текстовых инструментов, таких как sed. Попробуйте изменить все пути внутри быстрого импорта и добавить префикс пути bin/.

Описание формата быстрого импорта можно найти здесь: https://git -scm.com / docs / git-fast-import

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...