У меня проблема с настройкой репозитория: я инициализировал репозиторий в неправильном каталоге и начал его использовать. Я уже сделал несколько веток и снова слил их. Я хотел бы сохранить эту историю.
Как сейчас:
wrongRootProjectDir/
|
+-.git
|
+-realProjectDir
|
+-<Project files>
Как это должно выглядеть:
realProjectDir
|
+-.git
|
+-<Project files>
Так что, в общем, я хотел бы перенести все на одну директорию вверх. wrongRootProjectDir
также содержит только файл .git
и каталог realProjectDir
.
Я нашел несколько подсказок по SO Как мне переместить каталог в репозитории Git для всех коммитов? , что может быть способ. Я запускаю git clone oldrepo newrepo
, чтобы получить резервную копию, и запускаю
git filter-branch --subdirectory-filter realProjectDir -- --all
о новом репо. Казалось, что это работает, однако я потерял структуру слияния и ветвления из старого хранилища. Отфильтрованное репо имеет правильные пути, но в нем отсутствуют коммиты слияния. Кроме того, старые коммиты все еще существуют, поэтому репо выглядит так:
(Commit A)
|
(Commit B)
|
(Commit C)
|
(Commit A')
|
(Commit B')
|
(Commit C')
Где A '- новые коммиты. Есть ли проблема с несколькими ветками и использованием filter-branches
? Итак, сейчас у меня есть каждый коммит дважды , один раз с неправильным старым путем и один раз с новым.
Краткое описание
Есть ли способ переместить полное дерево каталогов на один уровень вверх и сохранить все ветви и слияния без генерации двойных коммитов?
Обновление
Я все еще не могу сохранить свои коммиты слияния и правильное расположение веток. Все сплетено в цепочку коммитов.
Обновление
Добавлено дерево истории:

и после запуска ответвления фильтра с помощью gitk
:

Рабочий каталог чист, когда я запускаю эту команду. Для проверки я скопировал все дерево каталогов с помощью простого cp -r
в другой каталог и протестировал его там. Команда filter-branch работает в том смысле, что она перемещает подкаталог, но все равно выравнивает историю. Насколько я понимаю, я не сделал ничего слишком сложного, только обычное ветвление и слияние.
Update
Я показал неправильную картинку для состояния "до". Я пытался преобразовать не переписанный репозиторий.