Продолжаем начатую тему работы с ветками. Рассмотрим практическое применение команд push, pull, merge на двух примерах: синхронизация веток между несколькими компьютерами (одиночная работа), совместная работа над одним проектом в небольшом коллективе.
Сценарий №1
Петр работает над своим проектом FuzzyCoding на нескольких компьютерах (например, на домашнем и на рабочем). Перед тем как уйти с одного рабочего места на другое Петр фиксирует сделанные изменения, чтобы можно было продолжить работу на другом компьютере. Петр использует синхронизацию своих веток на разных компьютерах при помощи USB-flash диска. Когда он заканчивает работу, то копирует новые ревизии из локальной ветки на флеш-диск командой bzr push. Придя на другое рабочее место синхронизирует локальную ветку, копируя новые ревизии с флеш-диска командой bzr pull.
Рассмотрим этот сценарий более детально.
Подготовка USB-flash диска
Рассмотрим этот сценарий более детально.
Подготовка USB-flash диска
Петр уже создал новую ветку на своем компьютере и работает в ней некоторое время. Для переноса своей ветки на другой компьютер он решил использовать USB-диск. Петр может просто использовать команду bzr push в своей рабочей ветке, чтобы передать ревизии и рабочие файлы на USB-диск. Базар полностью поддерживает такую работу.
Однако, имеет смысл сделать некоторые подготовительные действия на USB-диске. Дело в том, что команда push не только копирует новые ревизии в другую ветку, но еще и обновляет рабочие файлы в другой ветке в том случае, если ветка локальная. Поскольку подключенный USB-диск практически всегда является локальным диском, то bzr будет стараться создать и обновить ваши рабочие файлы. В то же время для синхронизации веток вам совсем не требуется переносить и рабочие файлы (поскольку они присутствуют в истории и могут быть легко восстановлены). Поэтому с практической точки зрения необходимо исключить рабочие файлы с USB-диска и синхронизировать только историю.
Для одной ветки это можно сделать так: создать новую ветку и удалить дерево рабочих файлов.
E:\USB_sync>bzr init
Created a standalone tree (format: pack-0.92)
E:\USB_sync>bzr remove-tree
Для одной ветки это можно сделать так: создать новую ветку и удалить дерево рабочих файлов.
E:\USB_sync>bzr init
Created a standalone tree (format: pack-0.92)
E:\USB_sync>bzr remove-tree
Здесь мы создали новую ветку командой init в каталоге E:\USB_sync (E: это наш USB-диск при использовании Windows, на Linux флеш-диски монтируются в /mnt/flash или другое место). А затем удалили рабочее дерево командой remove-tree.
Другим вариантом является создание общего репозитория для веток на USB-диске, новые ветки в котором автоматически будут создаваться без рабочих файлов:
E:\>bzr init-repo --no-trees USB_repo
Shared repository (format: pack-0.92)
Location:
shared repository: USB_repo
E:\>bzr init-repo --no-trees USB_repo
Shared repository (format: pack-0.92)
Location:
shared repository: USB_repo
Опция командной строки --no-trees указывает, что по умолчанию для всех веток в этом репозитории рабочие файлы создаваться не будут.
Копирование новых ревизий на USB-диск
Для отправки новых ревизий на USB-диск Петр использует команду push:
C:\work\bzr-day\FuzzyCode>bzr push E:\USB_sync
Pushed up to revision 3.
Создание копии ветки на другом компьютере
Придя на другое рабочее место со своим USB-диском Петр создает копию ветки для работы:
C:\work\bzr-day>bzr branch E:\USB_sync FuzzyCode
Branched 3 revision(s).
Теперь он может продолжать работу со своей веткой FuzzyCode. По окончании работы Петр снова отправляет новые ревизии на USB-диск командой push.
Синхронизация рабочей ветки с USB-диском
Для получения новых ревизий с USB-диска в свою рабочую ветку Петр использует команду pull:
C:\work\bzr-day\FuzzyCode>bzr pull E:\USB_sync
All changes applied successfully.
Now on revision 4.
Рабочая ветка успешно обновлена, можно продолжать работу.
Иногда ветки могут разойтись
Если же Петр забыл синхронизировать рабочую ветку с USB-диском и зафиксировал новые изменения, то при попытке сделать push или pull он получит сообщение, что ветки "разошлись". В этом случае Петр должен объединить ветки командой merge:
C:\work\bzr-day\FuzzyCode>bzr merge E:\USB_sync
+N dir/
+N foo.txt
All changes applied successfully.
C:\work\bzr-day\FuzzyCode>bzr commit -m "Объединение рабочей ветки с копией ветки на USB-диске"
Committing to: C:/work/bzr-day/FuzzyCode/
added dir
added foo.txt
Committed revision 5.
После этого команда push позволит синхронизировать копию на USB-диске с рабочей веткой.
Мы рассмотрели простой пример синхронизации веток между несколькими компьютерами. В качестве промежуточной ветки также можно использовать и некоторый общедоступный сервер, например SFTP/FTP.
В следующей части мы рассмотрим сценарий совместной работы над проектом в небольшом коллективе.
В следующей части мы рассмотрим сценарий совместной работы над проектом в небольшом коллективе.
Комментариев нет:
Отправить комментарий