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 1194590cd..000000000 --- a/book/09-git-and-other-scms/sections/client-bzr.asc +++ /dev/null @@ -1,138 +0,0 @@ -==== Git and Bazaar - -Among the DVCS, another famous one is https://bazaar.canonical.com[Bazaar^]. -Bazaar is free and open source, and is part of the https://www.gnu.org[GNU Project^]. -It behaves very differently from Git. -Sometimes, to do the same thing as with Git, you have to use a different keyword, and some keywords that are common don't have the same meaning. -In particular, the branch management is very different and may cause confusion, especially when someone comes from Git's universe. -Nevertheless, it is possible to work on a Bazaar repository from a Git one. - -There are many projects that allow you to use Git as a Bazaar client. -Here we'll use Felipe Contreras' project that you may find at https://github.com/felipec/git-remote-bzr[^]. -To install it, you just have to download the file `git-remote-bzr` in a folder contained in your `$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 ----- - -You also need to have Bazaar installed. -That's all! - -===== Create a Git repository from a Bazaar repository - -It is simple to use. -It is enough to clone a Bazaar repository prefixing it by `bzr::`. -Since Git and Bazaar both do full clones to your machine, it's possible to attach a Git clone to your local Bazaar clone, but it isn't recommended. -It's much easier to attach your Git clone directly to the same place your Bazaar clone is attached to -- the central repository. - -Let's suppose that you worked with a remote repository which is at address `bzr+ssh://developer@mybazaarserver:myproject`. -Then you must clone it in the following way: - -[source,console] ----- -$ git clone bzr::bzr+ssh://developer@mybazaarserver:myproject myProject-Git -$ cd myProject-Git ----- - -At this point, your Git repository is created but it is not compacted for optimal disk use. -That's why you should also clean and compact your Git repository, especially if it is a big one: - -[source,console] ----- -$ git gc --aggressive ----- - -===== Bazaar branches - -Bazaar only allows you to clone branches, but a repository may contain several branches, and `git-remote-bzr` can clone both. -For example, to clone a branch: - -[source,console] ----- -$ git clone bzr::bzr://bzr.savannah.gnu.org/emacs/trunk emacs-trunk ----- - -And to clone the whole repository: - -[source,console] ----- -$ git clone bzr::bzr://bzr.savannah.gnu.org/emacs emacs ----- - -The second command clones all the branches contained in the emacs repository; nevertheless, it is possible to point out some branches: - -[source,console] ----- -$ git config remote-bzr.branches 'trunk, xwindow' ----- - -Some remote repositories don't allow you to list their branches, in which case you have to manually specify them, and even though you could specify the configuration in the cloning command, you may find this easier: - -[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 ----- - -===== Ignore what is ignored with .bzrignore - -Since you are working on a project managed with Bazaar, you shouldn't create a `.gitignore` file because you _may_ accidentally set it under version control and the other people working with Bazaar would be disturbed. -The solution is to create the `.git/info/exclude` file either as a symbolic link or as a regular file. -We'll see later on how to solve this question. - -Bazaar uses the same model as Git to ignore files, but also has two features which don't have an equivalent into Git. -The complete description may be found in http://doc.bazaar.canonical.com/bzr.2.7/en/user-reference/ignore-help.html[the documentation^]. -The two features are: - -1. "!!" allows you to ignore certain file patterns even if they're specified using a "!" rule. -2. "RE:" at the beginning of a line allows you to specify a https://docs.python.org/3/library/re.html[Python regular expression^] (Git only allows shell globs). - -As a consequence, there are two different situations to consider: - -1. If the `.bzrignore` file does not contain any of these two specific prefixes, then you can simply make a symbolic link to it in the repository: `ln -s .bzrignore .git/info/exclude`. -2. Otherwise, you must create the `.git/info/exclude` file and adapt it to ignore exactly the same files in `.bzrignore`. - -Whatever the case is, you will have to remain vigilant against any change of `.bzrignore` to make sure that the `.git/info/exclude` file always reflects `.bzrignore`. -Indeed, if the `.bzrignore` file were to change and contained one or more lines starting with "!!" or "RE:", Git not being able to interpret these lines, you'll have to adapt your `.git/info/exclude` file to ignore the same files as the ones ignored with `.bzrignore`. -Moreover, if the `.git/info/exclude` file was a symbolic link, you'll have to first delete the symbolic link, copy `.bzrignore` to `.git/info/exclude` and then adapt the latter. -However, be careful with its creation because with Git it is impossible to re-include a file if a parent directory of that file is excluded. - -===== Fetch the changes of the remote repository - -To fetch the changes of the remote, you pull changes as usually, using Git commands. -Supposing that your changes are on the `master` branch, you merge or rebase your work on the `origin/master` branch: - -[source,console] ----- -$ git pull --rebase origin ----- - -===== Push your work on the remote repository - -Because Bazaar also has the concept of merge commits, there will be no problem if you push a merge commit. -So you can work on a branch, merge the changes into `master` and push your work. -Then, you create your branches, you test and commit your work as usual. -You finally push your work to the Bazaar repository: - -[source,console] ----- -$ git push origin master ----- - -===== Caveats - -Git's remote-helpers framework has some limitations that apply. -In particular, these commands don't work: - -* `git push origin :branch-to-delete` (Bazaar can't accept ref deletions in this way) -* `git push origin old:new` (it will push `old`) -* `git push --dry-run origin branch` (it will push) - -===== Summary - -Since Git's and Bazaar's models are similar, there isn't a lot of resistance when working across the boundary. -As long as you watch out for the limitations, and are always aware that the remote repository isn't natively Git, you'll be fine. 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 8c6a56fb0..000000000 --- a/book/09-git-and-other-scms/sections/import-bzr.asc +++ /dev/null @@ -1,157 +0,0 @@ -==== Bazaar - -(((Bazaar)))(((Importing, from Bazaar))) -Bazaar is a DVCS tool much like Git, and as a result it's pretty straightforward to convert a Bazaar repository into a Git one. -To accomplish this, you'll need to import the `bzr-fastimport` plugin. - -===== Getting the bzr-fastimport plugin - -The procedure for installing the fastimport plugin is different on UNIX-like operating systems and on Windows. -In the first case, the simplest is to install the `bzr-fastimport` package that will install all the required dependencies. - -For example, with Debian and derived, you would do the following: - -[source,console] ----- -$ sudo apt-get install bzr-fastimport ----- - -With RHEL, you would do the following: - -[source,console] ----- -$ sudo yum install bzr-fastimport ----- - -With Fedora, since release 22, the new package manager is dnf: - -[source,console] ----- -$ sudo dnf install bzr-fastimport ----- - -If the package is not available, you may install it as a plugin: - -[source,console] ----- -$ mkdir --parents ~/.bazaar/plugins # creates the necessary folders for the plugins -$ cd ~/.bazaar/plugins -$ bzr branch lp:bzr-fastimport fastimport # imports the fastimport plugin -$ cd fastimport -$ sudo python setup.py install --record=files.txt # installs the plugin ----- - -For this plugin to work, you'll also need the `fastimport` Python module. -You can check whether it is present or not and install it with the following commands: - -[source,console] ----- -$ python -c "import fastimport" -Traceback (most recent call last): - File "", line 1, in -ImportError: No module named fastimport -$ pip install fastimport ----- - -If it is not available, you can download it at address https://pypi.org/project/fastimport/[^]. - -In the second case (on Windows), `bzr-fastimport` is automatically installed with the standalone version and the default installation (let all the checkboxes checked). -So in this case you have nothing to do. - -At this point, the way to import a Bazaar repository differs according to that you have a single branch or you are working with a repository that has several branches. - -===== Project with a single branch - -Now `cd` in the directory that contains your Bazaar repository and initialize the Git repository: - -[source,console] ----- -$ cd /path/to/the/bzr/repository -$ git init ----- - -Now, you can simply export your Bazaar repository and convert it into a Git repository using the following command: - -[source,console] ----- -$ bzr fast-export --plain . | git fast-import ----- - -Depending on the size of the project, your Git repository is built in a lapse from a few seconds to a few minutes. - -===== Case of a project with a main branch and a working branch - -You can also import a Bazaar repository that contains branches. -Let us suppose that you have two branches: one represents the main branch (myProject.trunk), the other one is the working branch (myProject.work). - -[source,console] ----- -$ ls -myProject.trunk myProject.work ----- - -Create the Git repository and `cd` into it: - -[source,console] ----- -$ git init git-repo -$ cd git-repo ----- - -Pull the `master` branch into Git: - -[source,console] ----- -$ bzr fast-export --export-marks=../marks.bzr ../myProject.trunk | \ -git fast-import --export-marks=../marks.git ----- - -Pull the working branch into 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 ----- - -Now `git branch` shows you the `master` branch as well as the `work` branch. -Check the logs to make sure they're complete and get rid of the `marks.bzr` and `marks.git` files. - -===== Synchronizing the staging area - -Whatever the number of branches you had and the import method you used, your staging area is not synchronized with `HEAD`, and with the import of several branches, your working directory is not synchronized either. -This situation is easily solved by the following command: - -[source,console] ----- -$ git reset --hard HEAD ----- - -===== Ignoring the files that were ignored with .bzrignore - -Now let's have a look at the files to ignore. -The first thing to do is to rename `.bzrignore` into `.gitignore`. -If the `.bzrignore` file contains one or several lines starting with "!!" or "RE:", you'll have to modify it and perhaps create several `.gitignore` files in order to ignore exactly the same files that Bazaar was ignoring. - -Finally, you will have to create a commit that contains this modification for the migration: - -[source,console] ----- -$ git mv .bzrignore .gitignore -$ # modify .gitignore if needed -$ git commit -am 'Migration from Bazaar to Git' ----- - -===== Sending your repository to the server - -Here we are! -Now you can push the repository onto its new home server: - -[source,console] ----- -$ git remote add origin git@my-git-server:mygitrepository.git -$ git push origin --all -$ git push origin --tags ----- - -Your Git repository is ready to use. diff --git a/ch09-git-and-other-systems.asc b/ch09-git-and-other-systems.asc index ac6a1589e..af4f22008 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[] [[_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[]