[1] Создание репозитория и потом из него bare репозитория
1) Создадим новую папку collab_source2) Создадим в этой папке текстовый файл mycontent.txt с содержимым:
Unchanged first line from source
Second line
Third line
3) Сделаем из папки collab_source репозиторий Git и сделаем commit файла mycontent.txt с описанием "Base commit from source".
4) Создадим bare репозиторий:
git clone --bare /your/path/to/collab_source /your/path/to/bare_collab
[2] Как участникам команды присоединится к работе
git clone /path/to/repository/bare_collab /path/of/local/copy/Bob_collab git clone /path/to/repository/bare_collab /path/of/local/copy/Lisa_collab
Дерево commit-ов выглядит на данном этапе следующим образом:
[3] Bob делает изменения
1) Он меняет первую строку и содержимое становится таким:First line from source - Changed by Bob
Second line
Third line
2) Далее он добавляет изменения и фиксирует их:
git status git add . git commit -m 'Bobs first commit after changing the first line' git log
3) Далее ему надо передать (push) свои изменения в общий bare репозиторий, но по хорошему сначала надо извлечь (pull) изменения, которые успели передать (push) члены команды до вас:
git pull git push
[4] Lisa делает собственные изменения
1) Ее изменения выглядят так:Unchanged first line from source = Not any more ;) - Lisa
Second line
Third line
Fourth line by Lisa
2) Далее она добавляет изменения и фиксирует их:
git status git add . git commit -m 'Lisa's first commit after changing the first line and adding a new fourth line' git log
3) Далее перед тем как передать (push) свои изменения в общий bare репозиторий, она делает извлечение (pull) изменений, которые успели передать (push) другие члены команды:
Возник merge конфликт |
[5] Разрешение merge конфликта
1) Если Lisa откроет файл то увидит следующее:<<<<<<< HEAD
Unchanged first line from source = Not any more ;) - Lisa
=======
First line from source - Changed by Bob
>>>>>>> 9bab0336e6c9ab984b538f1f7724bf8a9703f55e
Second line
Third line
Fourth line by Lisa
2) Есть следующие варианты:
- Указать порядок и применить оба изменения (т.е. и Боба и Лизы);
- Удалить имеющиеся изменения и наложить ваши изменения;
- Удалить ваши изменения и применить извлеченные;
- Удалить оба.
First line from source - Changed by Bob
Unchanged first line from source = Not any more ;) - Lisa
Second line
Third line
Fourth line by Lisa
Чтобы не делать изменения вручную можно использовать интерактивный инструмент meld. В нем есть три вида (local, base, и remote). Local - это текущая модифицированная версия, base - это прежняя версия без вашей модификации, и remote - это модифицированная удаленная версия. Используя доступные стрелки и индикаторы можно упорядочить изменения.
git add . git commit -m "Merge - Posted Bob's change to the top followed by mine" git status git log git push
C3 - локальный commit от Лизы
C2 - commit от Боба
С4 - новый commit представляющий собой объединенние C3 и C2
4) Чтобы посмотреть граф истории через Git Gui надо зайти в Repository | Visualize all branch history:
В CLI режиме можно воспользоваться командой git log --graph
git log --graph |
[6] Синхронизация остальных членов команды с bare репозиторием
1) Боб может обновиться следующим образом:git pull git log
2) Материнский репозиторий можно обновить следующим образом:
git remote add origin /path/to/bare_collab git pull –u origin master
Добавление remote это одноразовая операция, т.е. добавив однажды можно потом добавлять не нужно.