вторник, 31 января 2017 г.

Сборка двух git в один

Немного про интуитивно-понятный git, для памяти


Имеем два репозитория:
  • work.git - рабочий, в котором всё должно быть
  • history.git - от него нужна только история коммитов

Необходимо слить их в один work.git. В первую очередь необходимо убедиться что со временем всё в порядке. Иначе, в прошлый раз такая неразбериха получилась!
# ntpdate -s ntp.ubuntu.com
Теперь клонируем репозитории:
$ git clone http://user@bitbucket/scm/user_tag/work.git
$ git clone http://user@bitbucket/scm/user_tag/history.git
Препарация исходника: Выносим ссылку (ref) на origin у history.git, создаём директорию history, складываем всё содержимое репозитория туда и делаем коммит.
$ cd history
$ git remote rm origin
$ mkdir history
$ git mv *.* history/.
$ git mv .gitignore history/
$ git commit -m "Prepare to merge into work: `date +%d-%m-%Y,' '%H:%M:%S`"
$ cd ..
Рекурсивный Merge в приёмник: Ставим ссылку на директорию с history.git, делаем merge по стратегии recursive с опцией theirs, сносим ссылку:
$ cd work
$ git remote add history ../history
$ git pull -Xtheirs history master
$ git remote rm history
Если всё-таки облажались со временем:
$ git commit --amend --date='2017-01-31 15:00:00.000000000 +0300' -C HEAD
Наконец, заносим получившееся в приёмник:
$ git push -u origin master
Если получившийся work.git слишком жирный и не лезет в приёмник:
$ git config --global http.postBuffer 2048576000