Book Review – Pragmatic Version Control Using Git

Review published at DZone: http://books.dzone.com/reviews/book-review-pragmatic-version

I believe one must have a reasonable acquaintance with at least the three big guns in version control for open source, Subversion, known as SVN (non distributed), Mercurial and GIT.
Pragmatic Version Control Using Git The Pragmatic Starter Kit-Volume 1 By: Travis Swicegood ©2008 ISBN-10: 1-934356-15-8 Publisher: The pragmatic Bookshelf Raleigh, North Carolina, Dallas Texas. $34.95. note that this is version 1.0 of the book, version 2.0 just came out. We are still trying to determine from the publisher if version 2 is out, they say no but the web site says yes?

Git is rapidly becoming the major opensource distributed version control system (DVCS) of choice for many major projects. Competitors such as Mercurial and Bazzar (both DVCS) are important and SVN remains as a major centralized VCS. It has become quite necessary to have at least a basic understanding of each of these systems if you are active in the Open source world. Of these systems arguably the most complex is and comprehensive is git.

Git was originated by Linus Torvalds to help manage the distributed development and merge processes involved with the maintenance of the Linux kernel. It is something of a rite of passage for open source developers to become sufficiently fluent with its use.

The basic documentation on the net and even Linus’s famous talk (available on you tube) got me started but I still have been feeling a bit lost.

While this book is targeted at rank beginners there is plenty here for the advanced user. It succeeds admirably in providing information for all levels of users.

As someone quite new to Git, I found this book to be very well laid out and it has a huge virtue of making no assumptions! I believe that much of the other material I attempted to learn from made big assumptions either about Version Control knowledge from other systems or just plain skipped over concepts and presented raw commands, leaving it to the reader to determine how and when to use what command.

The book gently starts out describing the general case of version control and rapidly introduces clear cogent explanations of how git differs from centralized systems. At the same time the introductory portions of the book use basic examples to introduce versions of various concepts along with the related commands.

I found myself saying often as I read, oh! that’s the way it works!

I also found myself trying to understand more about some of the actual mechanics. This is where another great feature of the book came to the rescue for me. Each chapter has a Git hub repository which you can access to try out each concept or command that is being discussed. That filled in a few holes for me, specifically, for instance, what state is the working directory in and how does a command affect the working directory.

For me the book rates about a 8.5 out of 10, the only thing that might have improved it for me would have been some Tortoise Git explanation. I could also use more on setting up your own repository on various services. This criticism is unfair since Tortoise Git really only became viable after the book was put to bed and there is simply too many variables between hosting providers to cover that point adequately. The material presented is a definite help getting started with the task and I’ll have the book open as I start to work on that for myself. The book also has a web site which has errata, and other comments which may prove helpful http://www.pragprog.com/titles/tsgit/pragmatic-version-control-using-git

Some Windows Pinax help

This is just an overview: See the Wiki here for the nitty gritty…

For widows users: 1st thing which is not obvious is that all the installation steps must be done from the command shell in windows (preferably in admin mode if on Vista), from the correct directory. You do not use the python idle environment, nor do you explicitly invoke python, (except at the very end!!)

You must have SVN and GIT installed and on your path (which the “normal” installations take care of) note that Tortoise SVN is not sufficient (It does not have the command line interface) Slik svn does http://www.sliksvn.com/en/download, both can co-exist, Tortoise Git  http://code.google.com/p/tortoisegit/ is a good install for windows users and includes a complete tool set. The boot and install scripts depend and use these programs to install source code from many locations/libraries, really very cool…therefore you must have a good internet connection!!

You should probably execute the command shell with the “run as administrator” if using Vista, if xp you should be an administrator.

You do not need to do a checkout or download of any files other than the “pinax-boot.py” file, which should be placed in a directory that you want to use as your base installation directory.

a general outline of what happens…..
You run pinax-boot.py
It downloads the base Pinax repos and installation scripts.
You “activate” pinax-env
(it is really running in the command shell)
That changes your prompt. You will then do your directory changes within this new pinax-env prompt……
(this took a while for me to wrap my head around but I now agree that it’s a really neat good idea!!, I would not try without it)
pip install <<<this step processes a very long and involved script which gets numerous dependent/pre-requisite packages and places them properly in the “virtual-environment”
you remain in pinax-env all during this process….and following….
pinax-admin clone_project retrieves the proper stuff from the set of files that you have downloaded and sets up another directory containing just your project as a django project…
It is a good idea to go with the default sqllite db (ie. don’t touch settings!!)
Now follow the directions, again from within pinax-env,, and cd into your project directory and runserver.. You should get a nice pinax complaint about no db.. follow the instructions to syncdb and so on…

See the Wiki here for the nitty gritty…

Eclipse/App Engine/Bloog Part 4, The hard part

Well I had a long and frustrating week/week-end, all sort of run together. I discovered that my new site would not take even moderately long articles. This is apparently a “known problem” and it relates to exploding indexes, as somewhat explained here.

I finally got to corresponding with one of the Bloog Maintainers who had it turned out created a modified site search capability using Google Site Search. According to him  it still does not provide for longer article without some code mods that I have not yet started. But is a prerequisite. I got a copy from Git-hub, where Bloog is hosted. This required that I get and install GIT version control system. I chose to start with Windows based  Git Extensions. It still required that you install the basic GIT. It is only available in Tar format you will need 7zip to unpack although after a posting the developer has now provided a “full” option for Git extensions.

I then tried to apply the new code to my existing Bloog version as I had modified it. That required a differential editor,which I did not have Kdiff3 turned out to be a great choice. It compares entire directory structures and than lets you click through the files and selectively choose to apply a, b to your revised file. Very cool.

I then tried to fire things up, FAIL. I then went back to the Version I had just obtained and I could not get it to fire up either. I then started to look for “real” debug information. Not much available.

Eventually I downloaded PYdev for Eclipse, and that was a major improvement  my entire development environment. In fact I would go so far to say Do not attempt development for APP-Engine without Pydev!! It provides a much better editor, code outlining and a runtime environment. There are several tutorials on setting up Eclipse for app-engine. Use them!!! Supposedly it also provides breakpoints, but I have not been able to get that working yet, but the other improvements are a major joy. The Debug environment did give me better log messages. Through which I was eventually able to make some headway. I found out that the two versions had changed the DB schema slightly so I had to delete a few older records You can see and modify the local datastore using http://localhost:8080/_ah/admin/datastore and bang it all started to work. It actually took a long time to go through each step, and I still have to go back and learn each of the new tools much better.