-
Website
http://justin.harmonize.fm/ -
Original page
http://justin.harmonize.fm/index.php/2009/01/fine-git-is-awesome/ -
Subscribe
All Comments -
Community
-
Top Commenters
-
maacl
1 comment · 2 points
-
davezor
1 comment · 1 points
-
aaronasjones
1 comment · 1 points
-
mebaran
1 comment · 1 points
-
miami web designer
1 comment · 1 points
-
-
Popular Threads
hg clone . ../my_local_branch
Also notable... Although Mercurial's historical refusal to deeply support history rewriting is well-principled and reasonable, Git's support for it is actually sensible given Git's architecture. It turns out that while Mercurial is built on the idea that a version control system should remember differences (and reconstruct the actual files), Git is built on the idea that a version control system should only remember files (and store differences only to save space). Thus, when you edit a Mercurial history you're forcing Mercurial to alter the most important data it has; when you edit a Git history you're merely changing some files (usually only removing files), no different (in principle) from checking in a branch.
Mercurial's architecture makes perfect sense, and gives it a huge head start in speed and size; but Git's architecture really does preserve the things that matter most (the actual files), which makes inherently risky things like rewriting history relatively risk-free.
Thumbs up to Git for a flexible and sensible architecture.
I'm still using Mercurial for its superb Windows support (sorry, guys, gotta use it); but I'm keeping my eye on Git. (By the way, aside from extreme slowness, Git also hasn't gotten git-svn working reliably on Windows -- at least not while I've been watching.)
For instance: http://github.com/mojombo/jekyll/network
Bitbucket also does not have commit commenting, another huge GitHub feature.
As you say though, Bitbucket does have features GitHub lacks (like the hg-powered wiki - GitHub's is not git powered) and issue tracker. The two sites take different approaches to patch management as well (patch queue vs fork queue).
Both sites have many similar features but it's unfair to call them equivalent as each has useful, unique features the other lacks.
I think it would be pretty cool if they could merge and allow you to choose between using hg or git for a project. That would help the social aspects without (hopefully) hurting any of the technical ones.
I can live without the other stuff though they would be nice.
In place editing/committing is something I would probably never ever ever do. I like to test that a change works before commiting it. Maybe for documentation it would be ok, though lots of documentation is generated and you would probably want to make sure it looks the way you want it to before committing.
I had tried hgsvn, which didn't really support pushing. It looks like this isn't quite ready for production use, but I'll be keeping an eye on it for when it is. This is definitely a big step for Mercurial.
It looks like you're one of the contributors? If so, thanks a lot for working on this! This makes Mercurial that much better.
[alias]
serve = !sh -c 'git daemon --reuseaddr --verbose \"$@\" --base-path=. --export-all ./.git' sh
I truly cannot pick which one I like more, but it took me a long time to get to the point where I could even admit that git was good. At first, its poor documentation and wretched user interface just completely turned me off. Having fixed that (mostly) and added support for SVN, I'm willing to admit that it's pretty good.
If you insist in doing it from a web browser, try git instaweb. It's probably more hacky than "hg serve" in the implementation, but it does work too.
That said, I'll give mercurial a try for my next side-project - always a good idea to at least try out new systems.
hgpullsvn (check for and get any updates from the main SVN repository first)
hg qimport ../path/to/your/patch/patchname.patch
hg qpush
svn stat (make sure you like what you see)
svn commit
hg qpop
svn revert -R . (remove the patch effects so you can do hgpullsvn again)
hgpullsvn (refresh the combo svn/hg repository)
hg qdelete patchname.patch
Then, on to your working repository, do:
hg qpop -a
hg pull -u
hg qdelete patchname.patch
hg qpush -a
I switched to git for git-svn until hgsubversion came out and originally I did not like git much either. I like the mercurial documentation and philosophy. Git grew on me a lot for exactly the reasons listed: extremely cheap local branching and ability to edit history. The bookmarks extension is touted as enabling git-style branches, but I haven't found it to work that way in practice at all.
Editing history in mercurial drove me to learn mercurial queues, and now I'm totally addicted to patch queues. mq is also very polished and is a joy to use. It's actually the only thing that keeps me on mercurial. I've looked into patch queues for git, but none of the implementations suit me. StGit makes the index unusable and TopGit is to heavyweight for my development workflow (it's more built for package and patch maintainers). I like the semantics of Guilt (especially the interaction with branching) but it's kinda busted on macs, as all the development has been done on linux machines.
Now I hear they are working on the mercurial version soon though.
I'm not saying you SHOULD be using msys or git; but I am saying that using it is no worse than using any other large, multiplatform library. Certainly Qt would be no better, for example.
There are better reasons; for example, one might dislike the atrociously slow performance of git on Windows after seeing so many people advertise its speed as being one of its best features. Perhaps one might dislike its slapdash implementation in an odd mixture of bash, perl, and C. (And probably others.) I would share those dislikes.