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


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

воскресенье, 23 февраля 2014 г.

Мерджим два реппозитория на git c сохранением истории

Задача не сложная. Есть два git репозитория с исходным кодом. В одном из них основной проект https://github.com/tdd-elevator-training/snake, а другой я писал давненько в отдельном локальном репозитории. Недавно я их решил замерджить. Что и сделал локально в IDE без вопросов - слил файлы, разместил в новом пакете, исправил ошибки компиляции, исправил тесты, дописал интеграционных, потестил ручками - все работает! Но теперь я хочу, чтобы у меня осталась история с локального репозитория (подключаемого проекта), а не только мой мердж.

Итого я имею локально:
- незакомиченный смердженный codenjoy проект с локальным git репозиторием (proj#1).
- удаленный репозиторий https://github.com/tdd-elevator-training/snake (тоже proj#1)
- второй локальный проект (proj#2), из которого брал исходный код для мерджа, хитори которого хочу сейчас сохранить.

Что буду делать? На ум напрашивается вот что:
- подготовить локальный репозиторий proj#2 (помувать папки куда надо) чтобы при мердже с основным он лег в нужное место, закоммитить
- за'pull'ить с удаленного репозитория proj#1 в локальный репозиторий proj#2 все-все, закоммитить мердж
- добавить все изменения из смердженного локлаьного proj#1 в локальный proj#2, закоммитить
- за'push'ить содержимое репозитория proj#2 на удаленный репозиторий proj#1

Что получилось:
User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ mkdir CodingDojo

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ git mv src CodingDojo

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ rm -rf pom.xml

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ rm -rf .idea/

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ rm -rf target/

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ rm -rf .gitignore

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ rm -rf RubicsCube.iml

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ ls
CodingDojo

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ git commit -m "перенес папку перед мерджем"
[master 2ec6dd1] перенес папку перед мерджем
 30 files changed, 0 insertions(+), 0 deletions(-)
 rename {src => CodingDojo/src}/main/java/com/apofig/Color.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Command.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/CommandParser.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Cube.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Edge.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Edges.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Face.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/FaceValue.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Line.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/Neighbor.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/B.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/B2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/B_.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/D.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/D2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/D_.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/F.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/F2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/F_.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/L.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/L2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/L_.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/R.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/R2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/R_.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/U.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/U2.java (100%)
 rename {src => CodingDojo/src}/main/java/com/apofig/command/U_.java (100%)
 rename {src => CodingDojo/src}/test/java/com/apofig/CubeTest.java (100%)
 rename {src => CodingDojo/src}/test/java/com/apofig/FaceValueTest.java (100%)

User@MYCOMP /d/JavaForFun/RubicsCubeWork (master)
$ cd CodingDojo/src/main/java/com/

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ mkdir codenjoy

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ mkdir codenjoy/dojo

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ mkdir codenjoy/dojo/rubicscube

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ mkdir codenjoy/dojo/rubicscube/model

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ git mv apofig/* codenjoy/dojo/rubicscube/model

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ rm -rf apofig/

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java/com (master)
$ cd ..

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main/java (master)
$ cd ..

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/main (master)
$ cd ..

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src (master)
$ cd test/java/com/

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ mkdir codenjoy

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ mkdir codenjoy/dojo

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ mkdir codenjoy/dojo/rubicscube

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ mkdir codenjoy/dojo/rubicscube/model

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git mv apofig/* codenjoy/dojo/rubicscube/model

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ rm -rf apofig/

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git commit -m "перенес папки перед мерджем"
[master b6b73e2] перенес папки перед мерджем
 30 files changed, 0 insertions(+), 0 deletions(-)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Color.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Command.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/CommandParser.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Cube.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Edge.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Edges.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Face.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/FaceValue.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Line.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/Neighbor.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/B.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/B2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/B_.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/D.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/D2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/D_.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/F.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/F2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/F_.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/L.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/L2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/L_.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/R.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/R2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/R_.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/U.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/U2.java (100%)
 rename CodingDojo/src/main/java/com/{apofig => codenjoy/dojo/rubicscube/model}/command/U_.java (100%)
 rename CodingDojo/src/test/java/com/{apofig => codenjoy/dojo/rubicscube/model}/CubeTest.java (100%)
 rename CodingDojo/src/test/java/com/{apofig => codenjoy/dojo/rubicscube/model}/FaceValueTest.java (100%)

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git remote add origin https://github.com/tdd-elevator-training/snake.git

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git pull https://github.com/tdd-elevator-training/snake.git
warning: no common commits
remote: Reusing existing pack: 28222, done.
remote: Total 28222 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (28222/28222), 62.10 MiB | 196.00 KiB/s, done.
Resolving deltas: 100% (8506/8506), done.
From https://github.com/tdd-elevator-training/snake
 * branch            HEAD       -> FETCH_HEAD
Auto-merging .gitignore
CONFLICT (add/add): Merge conflict in .gitignore
Automatic merge failed; fix conflicts and then commit the result.

// ручками пофиксил конфликт

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master|MERGING)
$ git commit -a -m "merge"
[master d3378ff] merge

// залил последние незакоммиченные изменения 

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git commit -m "залил последние изменения"
[master d3378fe] залил последние изменения

User@MYCOMP /d/JavaForFun/RubicsCubeWork/CodingDojo/src/test/java/com (master)
$ git push https://github.com/tdd-elevator-training/snake.git
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'https://github.com': tdd-elevator-training
Password for 'https://tdd-elevator-training@github.com':
Counting objects: 453, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (259/259), done.
Writing objects: 100% (441/441), 38.56 KiB | 0 bytes/s, done.
Total 441 (delta 162), reused 0 (delta 0)
To https://github.com/tdd-elevator-training/snake.git
   b5c78e4..d3378ff  master -> master 

Пригодится...

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

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