Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


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

воскресенье, 26 января 2025 г.

Мерж одного репозитория во второй с переписыванием истории в новом месте

У меня есть 2 репозитория, я хочу смержить их вместе но с сохранением истории обоих. Тот репозиторий, который я собираюсь вмержить должен находиться в определенном месте. Оба репозитория клонированы, второй (вмерживаемый) без remote. Первый находится тут `./main_repo`, второй находится `./second-repo` После операции второй вместе с историей должен появиться тут `./main-repo/src/main/resources/new-place`. Но важно понимать, что я хочу чтобы вся хистори была переписана на новом месте. То есть, чтобы в результирующем репозитории кликая на `Show history for selection` в папке `./main-repo/src/main/resources/new-place` я видел всю историю второго репозитория. 

Это сообщение было промптом в GPT с некоторыми итерациями дополнения, чтобы устранить галлюцинации. А дальше скрипт на память.

cd ./second-repo

git filter-branch -f --index-filter '
  git ls-files -s |
  sed "s#\t#&src/main/resources/new-place/#" |
  GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
  mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
' HEAD

cd ../main-repo

git remote add second-repo ../second-repo

git fetch second-repo

git merge second-repo/master --allow-unrelated-histories

git remote remove second-repo

Профит

Комментариев нет:

Отправить комментарий