diff --git a/book/09-git-and-other-scms/sections/client-bzr.asc b/book/09-git-and-other-scms/sections/client-bzr.asc deleted file mode 100644 index e2516201..00000000 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ /dev/null @@ -1,139 +0,0 @@ -==== Git и Bazaar - -Ещё одна известная распределённая система контроля версий https://bazaar.canonical.com[Bazaar^]. -Bazaar -- это бесплатная система с открытым исходным кодом, являющаяся частью проекта https://www.gnu.org[GNU Project^]. - -Её поведение сильно отличается от Git. -Иногда, чтобы сделать то же самое, что и в Git, следует использовать другое ключевое слово, а некоторые такие же ключевые слова имеют другое значение. -В частности, управления ветками сильно отличается и может вызвать путаницу, особенно для кого-нибудь из вселенной Git. -Тем не менее, с Bazaar репозиторием возможно работать из Git. - -Существует много проектов, которые позволяют использовать Git как клиент Bazaar. -Далее, мы будем использовать проект Филипа Контрераса, который можно найти здесь https://github.com/felipec/git-remote-bzr[^]. -Для установки достаточно просто скачать файл `git-remote-bzr` и поместить его в один из каталогов вашего `$PATH`: - -[source,console] ----- -$ wget https://raw.github.com/felipec/git-remote-bzr/master/git-remote-bzr -O ~/bin/git-remote-bzr -$ chmod +x ~/bin/git-remote-bzr ----- - -Так же вам понадобится установленный Bazaar. -И всё! - -===== Создание репозитория Git из репозитория Bazaar - -Им просто пользоваться. -Чтобы клонировать Bazaar репозиторий достаточно добавить префикс `bzr::`. -Так как Git и Bazaar полностью клонируют репозиторий на ваш компьютер, то можно добавить клон Git к локальному клону Bazaar, но так делать не рекомендуется. -Гораздо проще связать клон Git с центральным хранилищем -- тем же местом, с которым связан клон Bazaar. - -Предположим, что вы работали с удалённым репозиторием, находящимся по адресу `bzr+ssh://developer@mybazaarserver:myproject`. -Чтобы его клонировать, нужно выполнить следующие команды: - -[source,console] ----- -$ git clone bzr::bzr+ssh://developer@mybazaarserver:myproject myProject-Git -$ cd myProject-Git ----- - -На текущий момент, созданный Git репозиторий использует дисковое пространство не оптимально. -Поэтому вы должны очистить и сжать его, особенно если репозиторий большого размера: - -[source,console] ----- -$ git gc --aggressive ----- - -===== Ветки в Bazaar - -Bazaar позволяет клонировать только ветки, при этом репозиторий может содержать их несколько, а `git-remote-bzr` может клонировать все. -Например, чтобы клонировать ветку выполните: - -[source,console] ----- -$ git clone bzr::bzr://bzr.savannah.gnu.org/emacs/trunk emacs-trunk ----- - -Чтобы клонировать весь репозиторий, выполните команду: - -[source,console] ----- -$ git clone bzr::bzr://bzr.savannah.gnu.org/emacs emacs ----- - -Последняя команда клонирует все ветки репозитория emacs; тем не менее, конфигурацией допускается указывать только некоторые из них: - -[source,console] ----- -$ git config remote-bzr.branches 'trunk, xwindow' ----- - -Некоторые удалённые репозитории не позволяют просматривать список веток, поэтому их перечисление в конфигурации для команды клонирования может оказаться проще в использовании: - -[source,console] ----- -$ git init emacs -$ git remote add origin bzr::bzr://bzr.savannah.gnu.org/emacs -$ git config remote-bzr.branches 'trunk, xwindow' -$ git fetch ----- - -===== Игнорируем то, что игнорируется в .bzrignore - -При работе с проектом под управлением Bazaar вы не должны создавать файл `.gitignore`, потому что можете случайно добавить его в отслеживаемые, чем могут возмутиться другие пользователи, работающие с Bazaar. -Решением может выступать создание файла `.git/info/exclude`, который может быть как символической ссылкой, так и обычным файлом. -Позже мы рассмотрим пример решения этой проблемы. - -Bazaar использует ту же модель игнорирования файлов что и Git, за исключением двух особенностей, не имеющих эквивалента в Git. -Полное описание можно найти в http://doc.bazaar.canonical.com/bzr.2.7/en/user-reference/ignore-help.html[документации^]. -Эти два отличия следующие: - -1. `!!` позволяет игнорировать определённые шаблоны файлов, даже если они указаны со знаком `!` -2. `RE:` в начале строки позволяет указать https://docs.python.org/3/library/re.html[регулярное выражение Python^]. Git допускает только шаблоны оболочки. - -Следовательно, возможны две ситуации: - -1. Если файл `.bzrignore` не содержит специфических префиксов, то можно просто создать символическую ссылку на него: `ln -s .bzrignore .git/info/exclude` -2. Иначе, нужно создать файл `.git/info/exclude` и адаптировать его в соответствии с `.bzrignore` так, чтобы игнорировались те же файлы. - -Вне зависимости от ситуации, вам нужно следить за изменениями в `.bzrignore`, чтобы файл `.git/info/exclude` всегда соответствовал `.bzrignore`. -На самом деле, если в файл `.bzrignore` будут добавлены изменения в виде одной или нескольких строк с `!!` или `RE:` вначале, то Git просто не сможет их интерпретировать и вам понадобиться изменить файл `.git/info/exclude` так, чтобы игнорировались те же файлы. -Более того, если файл `.git/info/exclude` был символической ссылкой, то сначала нужно его удалить, скопировать `.bzrignore` в `.git/info/exclude` и адаптировать последний. -Однако, будьте осторожны с его созданием, потому что в Git невозможно повторно включить файл в индекс, если исключен родительский каталог этого файла. - -===== Получение изменений с удалённого репозитория - -Используя обычные команды Git можно получить изменения с удалённого репозитория. -Предположим, что изменения находятся в ветке `master`, вы сливаете или перебазируете свою работу относительно ветки `origin/master`: - -[source,console] ----- -$ git pull --rebase origin ----- - -===== Отправка в удалённый репозиторий - -Поскольку Bazaar так же имеет концепцию коммитов слияния, то проблем не возникнет при отправке такого коммита. -Таким образом, вы можете работать в ветке, сливать изменения в `master` и отправлять их. -Вы можете создавать ветки, делать коммиты и тестировать изменения как обычно. -Наконец, вы отправляете проделанную работу в репозиторий Bazaar: - -[source,console] ----- -$ git push origin master ----- - -===== Предупреждение - -Существуют ограничения на выполнение операций с удалённым репозиторием. -В частности, следующие команды не работают: - -* git push origin :branch-to-delete (Bazaar не понимает удаление ссылок таким способом.) -* git push origin old:new (будет отправлена 'old') -* git push --dry-run origin branch (push будет выполнен) - -===== Заключение - -Поскольку модели Git и Bazaar схожи, то не так много усилий требуется для их совместной работы. -Всё будет в порядке пока вы следите за ограничениями и знаете, что удалённый репозиторий изначально не Git. diff --git a/book/09-git-and-other-scms/sections/import-bzr.asc b/book/09-git-and-other-scms/sections/import-bzr.asc deleted file mode 100644 index 1d1b6e33..00000000 --- a/book/09-git-and-other-scms/sections/import-bzr.asc +++ /dev/null @@ -1,157 +0,0 @@ -==== Bazaar -(((Bazaar)))(((Импорт, из Bazaar))) - -Bazaar -- это распределённая система контроля версий очень похожая на Git, поэтому репозиторий Bazaar достаточно легко сконвертировать в репозиторий Git. -Для этого вам необходимо подключить плагин `bzr-fastimport`. - -===== Установка плагина bzr-fastimport - -Для UNIX подобных систем и Windows процедура установки плагина отличается. -В первом случае, самый простой способ это установить пакет `bzr-fastimport`, вместе с которым будут установлены все необходимые зависимости. - -Например, для Debian и подобных, следует выполнить: - -[source,console] ----- -$ sudo apt-get install bzr-fastimport ----- - -Для RHEL выполните следующую команду: - -[source,console] ----- -$ sudo yum install bzr-fastimport ----- - -Для Fedora, начиная с версии 22, новый менеджер пакетов dnf: - -[source,console] ----- -$ sudo dnf install bzr-fastimport ----- - -Если пакет отсутствует в репозитории для вашего дистрибутива, то вы можете установить его как плагин, используя следующие команды: - -[source,console] ----- -$ mkdir --parents ~/.bazaar/plugins # создаст необходимые каталоги для плагинов -$ cd ~/.bazaar/plugins -$ bzr branch lp:bzr-fastimport fastimport # импортирует плагин fastimport -$ cd fastimport -$ sudo python setup.py install --record=files.txt # установит плагин ----- - -Чтобы плагин заработал, вам понадобится модуль Python `fastimport`. -Проверить наличие и установить его можно следующими командами: - -[source,console] ----- -$ python -c "import fastimport" -Traceback (most recent call last): - File "", line 1, in -ImportError: No module named fastimport -$ pip install fastimport ----- - -Если модуль недоступен, то его можно скачать по адресу https://pypi.python.org/pypi/fastimport/[^]. - -Во втором случае (в Windows), `bzr-fastimport` устанавливается автоматически при стандартной установке (все галочки отмечены). -В таком случае дальнейших действий не требуется. - -Процесс импорта Bazaar репозитория отличается в зависимости от того одна ветка в вашем репозитории или несколько. - -===== Проект с одной веткой - -Войдите в каталог, содержащий ваш Bazaar репозиторий и проинициализируйте Git репозиторий: - -[source,console] ----- -$ cd /path/to/the/bzr/repository -$ git init ----- - -Теперь, просто экспортируйте свой Bazaar репозиторий и сконвертируйте его в Git репозиторий используя следующую команду: - -[source,console] ----- -$ bzr fast-export --plain . | git fast-import ----- - -В зависимости от размера проекта, Git репозиторий будет готов через несколько секунд или минут. - -===== Проект с основной и рабочей ветками - -Вы так же можете импортировать Bazaar репозиторий с несколькими ветками. -Предположим, что в вашем репозитории две ветки: одна является основной веткой проекта (myProject.trunk), другая -- рабочей (myProject.work). - -[source,console] ----- -$ ls -myProject.trunk myProject.work ----- - -Проинициализируйте Git репозиторий и перейдите в его каталог: - -[source,console] ----- -$ git init git-repo -$ cd git-repo ----- - -Импортируйте в Git основную ветку с помощью команды: - -[source,console] ----- -$ bzr fast-export --export-marks=../marks.bzr ../myProject.trunk | \ -git fast-import --export-marks=../marks.git ----- - -Импортируйте в Git рабочую ветку с помощью команды: - -[source,console] ----- -$ bzr fast-export --marks=../marks.bzr --git-branch=work ../myProject.work | \ -git fast-import --import-marks=../marks.git --export-marks=../marks.git ----- - -Теперь, команда `git branch` покажет вам две ветки: `master` и `work`. -Проверьте логи, чтобы убедиться в отсутствии ошибок, после этого можно удалить файлы `marks.bzr` и `marks.git`. - -===== Синхронизация индекса - -Вне зависимости от количества веток и выбранного метода импорта, индекс не синхронизируется с `HEAD`, а при импорте нескольких веток -- так же не синхронизируется рабочий каталог. -Эту ситуацию можно легко исправить следующей командой: - -[source,console] ----- -$ git reset --hard HEAD ----- - -===== Игнорирование файлов из .bzrignore - -Теперь давайте посмотрим на файлы, которые следует игнорировать. -Первое, что нужно сделать -- это переименовать `.bzrignore` в `.gitignore`. -Если файл `.bzrignore` содержит одну или несколько строк начинающихся с `!!` или `RE:`, нужно их изменить и, возможно, создать несколько файлов `.gitignore`, чтобы заставить Git игнорировать точно те же файлы, которые игнорируются Bazaar. - -Наконец, создайте коммит со всеми изменениями, внесёнными во время миграции: - -[source,console] ----- -$ git mv .bzrignore .gitignore -$ # modify .gitignore if needed -$ git commit -am 'Migration from Bazaar to Git' ----- - -===== Отправка репозитория на сервер - -Вот и всё! -Теперь вы можете отправить репозиторий на сервер в его новый дом: - -[source,console] ----- -$ git remote add origin git@my-git-server:mygitrepository.git -$ git push origin --all -$ git push origin --tags ----- - -Ваш Git репозиторий готов к использованию. diff --git a/ch09-git-and-other-systems.asc b/ch09-git-and-other-systems.asc index 4ef183f8..adae000e 100644 --- a/ch09-git-and-other-systems.asc +++ b/ch09-git-and-other-systems.asc @@ -20,8 +20,6 @@ include::book/09-git-and-other-scms/sections/client-svn.asc[] include::book/09-git-and-other-scms/sections/client-hg.asc[] -include::book/09-git-and-other-scms/sections/client-bzr.asc[] - include::book/09-git-and-other-scms/sections/client-p4.asc[] [[r_migrating]] @@ -36,8 +34,6 @@ include::book/09-git-and-other-scms/sections/import-svn.asc[] include::book/09-git-and-other-scms/sections/import-hg.asc[] -include::book/09-git-and-other-scms/sections/import-bzr.asc[] - include::book/09-git-and-other-scms/sections/import-p4.asc[] include::book/09-git-and-other-scms/sections/import-custom.asc[]