
Re: [boost] [Git] Moving beyond arm waving? On Fri, 4 Feb 2011, Belcourt, K. Noel wrote:
On Feb 3, 2011, at 8:47 PM, Emil Dotchevski wrote:
This may be a dumb question, but if a group of developers wants to collaborate using git, do they really care if in the end they push to a git or a svn repository?
Probably not. I made the proposal in the spirit of experimenting and public access to a live git mirror, which might help people better understand the pros and cons of a migration to git.
Yes it does matter. Very much! There is a common hope that this is not true, but SVN bindings hamstring the usage of git. Getting data from one version-control system into another is usually not that hard. Getting an accurate 1:1 mapping is well nigh impossible. I have burned myself badly by trying shared development on a git mirror parallel to SVN. It only works if git can only see a single copy of git-svn doing the sync. It is manageable with small numbers of git-svn only because the pain is reduced when one mirror has to be rebuilt and its private branches grafted (even my desktop and laptop have desynced several times over a few years). It would be a complete disaster for a team of 5 or more. Each user doing a commit from git necessarily has their own git-svn configured, thus they cannot share their git repos naturally. There is no way to have a central server for git-svn due to differences in the commit semantics. Git pushes a new state and fails if the previous state changed at all, SVN tries to merge and fails if there is a conflict (even though other files may have changed). There are larger differences in merge and branching semantics. I suppose you could have people attempt the moderation of all commits (a real pain). Once you have two or three people using git, all sorts of things can fail when they share git repos with multiple git-svn links. Users may have different URLs for the SVN repo (addressable via --rewrite-root), and there are several other parameters that must be manually set and agreed upon at all mirrors (e.g. --trunk=, --branches=, --tags=, --prefix=). On top of that, different versions of git-svn may do things differently, causing the git views to artificially diverge. These issues and more are alluded to in the "DESIGN PHILOSOPHY" and "CAVEATS" sections of the git-svn manpage. Some of the information is outdated, but the overall points still stand: git usage should be linearized and only shared through SVN or via git-format-patch. http://www.kernel.org/pub/software/scm/git/docs/git-svn.html In summary, a central git mirror can help individual developers seed their own mirrors; but they cannot use normal git workflows as long as SVN holds the master repository. All attempts to do otherwise will be punished by the laws of nature. Later, Daniel P.S. Sorry for the slight incoherence, I don't have time to edit things properly.