In this tutorial, I'll show how to setup a completly server free workflow using the bazaar distributed version control system (DCVS). I'll show you all of the possible actions you would ever want to do to your code, like : - having a branch for developement and keeping a branch for hotfixing the current production version. - how to give your code to a team mate so that he can start hacking right off - how to get code back from a team mate to integrate into your own - how to deploy your code to the test server - how to hotfix something in the test server and then merge it back to the main branch (either dev or prod) All of this in ridiculously fine-grained atomic steps. Let's go. 1) Create machines First, we need to have three machines : my own, my team mate's, and the test server. In reality, I created them inside a directory but let's just pretend they are really on sepearet physical locations and that there is no network connection between them. Code will be carried from machine to machine using only tarballs. No server operation will ever be needed so that you don't have to expose any of your machines to the Internet 24/7. This case also applies when one of your machines is accessed with difficulty (inside a VPN, requires a specific software to connect to etc.) Let's lay out the directory structure : chaouche@fictive ~/TMP $ mkdir BZR-TEST My username is chaouche, and I'll be doing all my expriments inside a new directory in ~/TMP/BZR-TEST. ~/TMP was already there so I used it. chaouche@fictive ~/TMP $ cd BZR-TEST/ chaouche@fictive ~/TMP/BZR-TEST $ ls total 0 chaouche@fictive ~/TMP/BZR-TEST $ Let's make 3 directories now, each one will represent a different computer : the TEST computer, my computer (YCHAOUCHE) and my team mate's computer (EMMANUEL) chaouche@fictive ~/TMP/BZR-TEST $ mkdir TEST chaouche@fictive ~/TMP/BZR-TEST $ mkdir YCHAOUCHE chaouche@fictive ~/TMP/BZR-TEST $ mkdir EMMANUEL chaouche@fictive ~/TMP/BZR-TEST $ ls total 12K drwxr-xr-x 2 chaouche users 4.0K Dec 13 10:39 EMMANUEL drwxr-xr-x 2 chaouche users 4.0K Dec 13 10:38 TEST drwxr-xr-x 2 chaouche users 4.0K Dec 13 10:38 YCHAOUCHE chaouche@fictive ~/TMP/BZR-TEST $ Let's start with my computer. This is where the initial code will be produced : chaouche@fictive ~/TMP/BZR-TEST $ cd YCHAOUCHE/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE $ ls total 0 chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE $ Let's make the illusion better by creating the directories you'd find in a real machine : chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE $ mkdir -p home/ychaouche/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE $ mkdir -p opt/srv/www chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE $ ls total 8.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:41 home drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:42 opt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE $ cd home/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home $ ls total 4.0K drwxr-xr-x 2 chaouche users 4.0K Dec 13 10:41 ychaouche chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home $ cd ychaouche/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ ls total 0 chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche 2) Create local repo in my machine So, I'm in my simulated home directory. I'll create two directories : * One is REPO, it's a local repository. It will contain two branches of the code : the development version and the production version. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ mkdir REPO chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ mkdir CODE chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ cd REPO/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ ls total 0 chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ bzr init myapp-prod Created a standalone tree (format: 2a) chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ This will create the myapp-prod repository. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ cd myapp-prod/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-prod $ ls total 0 chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-prod $ emacs readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-prod $ bzr add readme.txt adding readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-prod $ bzr ci Committing to: /home/chaouche/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-prod/ added readme.txt Committed revision 1. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-prod $ ls total 4.0K -rw-r--r-- 1 chaouche users 54 Dec 13 10:57 readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-prod $ 3) Create the dev branche Good. We have create our first file inside the production branch and commited it to the local repository. From now on, I'll be using only the word repository, ommiting "local" because they're all local, we don't have a server with a main central repository, but we still all work on the same two branches : myapp-prod or myapp-dev. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-prod $ cd .. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ ls total 4.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:57 myapp-prod chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ Let's create the developement branch out of the production branch : chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ bzr branch myapp-prod/ myapp-dev Branched 1 revision(s). chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO 4) Checkout the dev branche and commit to it Good : I have just create the initial setup. Now I'll start coding on my own working directory, not the repository one, to keep things clean. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ cd .. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ ls total 8.0K drwxr-xr-x 2 chaouche users 4.0K Dec 13 10:42 CODE drwxr-xr-x 4 chaouche users 4.0K Dec 13 10:58 REPO chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ cd CODE/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ ls total 0 chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ ls total 0 chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ I'll checkout the dev branch : chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ bzr checkout ../REPO/myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ ls total 4.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:59 myapp-dev chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ cd myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ ls total 4.0K -rw-r--r-- 1 chaouche users 54 Dec 13 10:59 readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ And start coding. Let's pretend I edit readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ emacs readme.txt & [1] 4210 chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ bzr ci Committing to: /home/chaouche/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev/ modified readme.txt Committed revision 2. [1]+ Done emacs -fg white -bg black -cr honeydew2 readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ 5) Make sure the commit goes to the repo as well Good. I commited my first modification. It should have gone to the repository. Let's make sure that it did: chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ cd .. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ cd .. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ ls total 8.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:59 CODE drwxr-xr-x 4 chaouche users 4.0K Dec 13 10:58 REPO chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ cd REPO/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ ls total 8.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:58 myapp-dev drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:57 myapp-prod chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ cd myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ ls total 4.0K -rw-r--r-- 1 chaouche users 54 Dec 13 10:58 readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ bzr info Standalone tree (format: 2a) Location: branch root: . Related branches: parent branch: /home/chaouche/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-prod chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ bzr st working tree is out of date, run 'bzr update' AHA ! chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ bzr update M readme.txt All changes applied successfully. Updated to revision 2 of branch /home/chaouche/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ bzr st chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ cd .. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ ls total 8.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 11:00 myapp-dev drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:57 myapp-prod chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ 6) Give the code to Emmanuel chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO $ cd ../../../../EMMANUEL/ chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL $ mkdir -p home/emmanuel/ chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL $ mkdir home/emmanuel/REPO chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL $ mkdir home/emmanuel/CODE chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL $ cd home/emmanuel/ chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel $ ls total 8.0K drwxr-xr-x 2 chaouche users 4.0K Dec 13 15:03 CODE drwxr-xr-x 2 chaouche users 4.0K Dec 13 15:03 REPO chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel $ cd .. chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home $ cd .. chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL $ cd .. What I'll do now is just copy the code from one directory to another but let's pretend Emmanuel got it by email and extracted it to the right directory. chaouche@fictive ~/TMP/BZR-TEST $ cp -r YCHAOUCHE/home/ychaouche/REPO/myapp-dev/ EMMANUEL/home/emmanuel/REPO/ Now let's pretend I'm Emmanuel : chaouche@fictive ~/TMP/BZR-TEST $ cd EMMANUEL/home/emmanuel/REPO/ chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/REPO $ ls total 4.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 15:04 myapp-dev chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/REPO $ cd .. chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel $ cd CODE/ chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/CODE $ ls total 0 chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/CODE $ bzr checkout ../REPO/myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/CODE $ ls total 4.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 15:05 myapp-dev chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/CODE $ cd myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/CODE/myapp-dev $ ls total 4.0K -rw-r--r-- 1 chaouche users 122 Dec 13 15:05 readme.txt chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/CODE/myapp-dev 7) Emmanuel and YChaouche change the code simultaneously. Let's start with Emmanuel chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/CODE/myapp-dev $ emacs readme.txt & [1] 5631 chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/CODE/myapp-dev $ bzr ci Committing to: /home/chaouche/TMP/BZR-TEST/EMMANUEL/home/emmanuel/REPO/myapp-dev/ modified readme.txt Committed revision 3. [1]+ Done emacs -fg white -bg black -cr honeydew2 readme.txt chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/CODE/myapp-dev $ cd .. chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/CODE $ cd .. chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel $ cd REPO/myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/REPO/myapp-dev $ bzr up M readme.txt All changes applied successfully. Updated to revision 3 of branch /home/chaouche/TMP/BZR-TEST/EMMANUEL/home/emmanuel/REPO/myapp-dev chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/REPO/myapp-dev $ Now from YChaouche's side chaouche@fictive ~ $ cd TMP/BZR-TEST/YCHAOUCHE/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE $ ls total 8.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:41 home drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:42 opt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE $ cd home/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home $ ls total 4.0K drwxr-xr-x 4 chaouche users 4.0K Dec 13 10:42 ychaouche chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home $ cd ychaouche/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ ls total 8.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 10:59 CODE drwxr-xr-x 4 chaouche users 4.0K Dec 13 10:58 REPO chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ cd CODE/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ ls total 4.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 11:00 myapp-dev chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ cd myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ ls total 4.0K -rw-r--r-- 1 chaouche users 122 Dec 13 11:00 readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ emacs readme.txt & [1] 5701 chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ bzr ci Committing to: /home/chaouche/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev/ modified readme.txt Committed revision 3. [1]+ Done emacs -fg white -bg black -cr honeydew2 readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ cd .. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ cd .. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche $ cd REPO/myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ bzr up M readme.txt All changes applied successfully. Updated to revision 3 of branch /home/chaouche/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ bzr info Standalone tree (format: 2a) Location: branch root: . Related branches: parent branch: /home/chaouche/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-prod chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ bzr st chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev $ 8) Getting Emmanuel's code Allright. Emmanuel and I have commited code to the dev-branch. Let's now suppose we have come to a point where code is ready to go for tests. First, we need to merge our changes together inside the dev branch. Let's do this : chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/REPO $ tar cvzf myapp-dev.tgz myapp-dev/ myapp-dev/ myapp-dev/readme.txt myapp-dev/.bzr/ myapp-dev/.bzr/branch-lock/ myapp-dev/.bzr/branch-format myapp-dev/.bzr/checkout/ [...] myapp-dev/.bzr/repository/indices/4529364019e970e86f38f60b93bf5218.tix myapp-dev/.bzr/repository/indices/dab927ec9c7ef53b771a9c9199cfa450.rix myapp-dev/.bzr/repository/lock/ chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/REPO $ ls total 12K drwxr-xr-x 3 chaouche users 4.0K Dec 13 15:42 myapp-dev -rw-r--r-- 1 chaouche users 6.5K Dec 13 15:43 myapp-dev.tgz chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/REPO $ cp myapp-dev.tgz ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/ chaouche@fictive ~/TMP/BZR-TEST/EMMANUEL/home/emmanuel/REPO $ 9) Merge Emmanuel's code with mine Now on my side : chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ mkdir emmanuel-dev chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ mv myapp-dev.tgz emmanuel-dev/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ cd emmanuel-dev/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/emmanuel-dev $ ls total 8.0K -rw-r--r-- 1 chaouche users 6.5K Dec 13 15:43 myapp-dev.tgz chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/emmanuel-dev $ tar xzvf myapp-dev.tgz myapp-dev/ myapp-dev/readme.txt myapp-dev/.bzr/ myapp-dev/.bzr/branch-lock/ myapp-dev/.bzr/branch-format [...] myapp-dev/.bzr/repository/lock/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/emmanuel-dev $ cd .. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ ls total 8.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 16:04 emmanuel-dev drwxr-xr-x 3 chaouche users 4.0K Dec 13 15:41 myapp-dev chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ cd myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ ls total 4.0K -rw-r--r-- 1 chaouche users 206 Dec 13 15:29 readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ bzr merge ../emmanuel-dev/myapp-dev/ M readme.txt Text conflict in readme.txt 1 conflicts encountered. chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ emacs readme.txt& [1] 6269 chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ 10) Commiting to the dev branch chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ bzr ci Committing to: /home/chaouche/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev/ modified readme.txt Committed revision 4. [1]+ Done emacs readme.txt chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE/myapp-dev $ 11) Putting the dev branch in the test server chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ tar czf dev.tgz myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ ls total 20K -rw-r--r-- 1 chaouche users 9.9K Dec 13 16:26 dev.tgz drwxr-xr-x 3 chaouche users 4.0K Dec 13 16:04 emmanuel-dev drwxr-xr-x 3 chaouche users 4.0K Dec 13 16:11 myapp-dev chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ mkdir -p ~/TMP/BZR-TEST/TEST/opt/repos/myapp/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ cp dev.tgz ~/TMP/BZR-TEST/TEST/opt/repos/myapp/ chaouche@fictive ~/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/CODE $ cd ~/TMP/BZR-TEST/TEST/opt/repos/myapp/ chaouche@fictive ~/TMP/BZR-TEST/TEST/opt/repos/myapp $ ls total 12K -rw-r--r-- 1 chaouche users 9.9K Dec 13 16:30 dev.tgz chaouche@fictive ~/TMP/BZR-TEST/TEST/opt/repos/myapp 13) Checkout the repo to /srv/www/ chaouche@fictive ~/TMP/BZR-TEST/TEST/opt/repos/myapp $ tar xzf dev.tgz chaouche@fictive ~/TMP/BZR-TEST/TEST/opt/repos/myapp $ ls total 16K -rw-r--r-- 1 chaouche users 9.9K Dec 13 16:30 dev.tgz drwxr-xr-x 3 chaouche users 4.0K Dec 13 16:11 myapp-dev chaouche@fictive ~/TMP/BZR-TEST/TEST/opt/repos/myapp $ chaouche@fictive ~/TMP/BZR-TEST/TEST/opt/repos/myapp $ cd ../../../ chaouche@fictive ~/TMP/BZR-TEST/TEST $ mkdir -p srv/www/ chaouche@fictive ~/TMP/BZR-TEST/TEST $ chaouche@fictive ~/TMP/BZR-TEST/TEST/srv/www $ bzr checkout ~/TMP/BZR-TEST/TEST/opt/repos/myapp/myapp-dev/ chaouche@fictive ~/TMP/BZR-TEST/TEST/srv/www $ ls total 4.0K drwxr-xr-x 3 chaouche users 4.0K Dec 13 16:40 myapp-dev chaouche@fictive ~/TMP/BZR-TEST/TEST/srv/www $ 14) Make a hotfix on the test server chaouche@fictive ~/TMP/BZR-TEST/TEST/srv/www/myapp-dev $ emacs readme.txt & [1] 6473 chaouche@fictive ~/TMP/BZR-TEST/TEST/srv/www/myapp-dev $ bzr ci bzr: ERROR: Cannot commit to branch BzrBranch7(file:///home/chaouche/TMP/BZR-TEST/TEST/srv/www/myapp-dev/). It is bound to BzrBranch7(file:///home/chaouche/TMP/BZR-TEST/TEST/opt/repos/myapp/myapp-dev/), which is bound to file:///home/chaouche/TMP/BZR-TEST/YCHAOUCHE/home/ychaouche/REPO/myapp-dev/. [1]+ Done emacs readme.txt chaouche@fictive ~/TMP/BZR-TEST/TEST/srv/www/myapp-dev $