git, got, gone
Some initial reactions to git:
git is kind of retarded. I hate to be so inflammatory about it so soon, but it's true. Ignoring everything about how git approaches merging for right now, let's consider the most important usability problem with git: it doesn't update changes.
Really. It doesn't. Here's proof. Let's say you already have a local git repository on your system. You're tracking the linux-2.6 kernel branch just like everybody else, and Linus has made some changes. You want 'em. What do you do?
git pull rsync://path/to/linux-2.6.git
Wow! That was great! Oh, wait. The pull script only gets the objects, and it completely misses changes made to metadata tags and heads. Buh? Users are recommended to "periodically" refresh their git repositories to "make sure you['ve] got everything". And how do you get everything? With rsync. Just plain old rsync.
rsync -avz rsync://path/to/linux-2.6.git/ ./.git/
This command gets everything. It outperforms "git pull" by actually assuring that you get a perfect copy of all data, plus tags and heads. So what the hell is the point of using a git script (which uses rsync, by the way), if a simple raw rsync command does a better job? What is the point of even having a git-pull script? Better still: why don't we just replace the existing git-pull-script with one that just reads "exec rsync -avz $1"? I just might.
I don't have these problems with Codeville. (Granted, Codeville ate all my repositories after I reformatted my iBook. That was as much my fault as Codeville's.) With Codeville, you type "cdv update" and that's it.
To compare git to Codeville in another way, Codeville automatically determines which files you've modified. git has a "git-update-cache" script that you must run so that git will note your changes. Codeville doesn't have an update cache script. Once you add a file with "cdv add filename", Codeville automatically tracks its modification time so you don't have to.
I'll admit that this is my first successful foray into using git, and I am not impressed in the slightest. It still seems like a hack, and not even a well-thought-out one at that. Codeville has a higher polish to it, and, of course, all of Bram Cohen's "mad scientist" panache. The one thing I like about git is its high-profile reliance on rsync and the way it stores its metadata. Want to list all of your repo's branches? "ls ./.git/refs/heads/" It's this use of existing tools that could have made git powerful, but has instead made it clunky as git grows to replace something that works with something that Linus thinks should work instead. I don't see a need for a git-pull script that uses rsync if rsync itself can do more, and do it more easily.
No comments:
Post a Comment