Re: git-svn set-tree bug
From: Joakim Tjernlund <hidden>
Date: 2016-06-15 22:43:15
On Sun, 2007-06-10 at 23:58 -0700, Steven Grimm wrote:
Eric Wong wrote:quoted
Doable? Yes. However, I think using grafts is quite hackish and unreliable[1]. I'd rather just have users using set-tree if they want to deal with non-linear history in the first place.Agreed about grafts being hackish and unreliable. But they were what I had to work with, given that I know little enough about git-svn's internals to be able to implement Junio's more robust idea. IMO set-tree is not much of an option. In my environment it is unacceptable for there to be any possibility of accidentally and silently overwriting some other change that just happened to hit the svn repo right before I committed my change, which (unless it has changed since I last tried it) set-tree will happily do. I can get away with doing that maybe once before my company's release manager will, quite justifiably, require me to stop using git and switch back to the standard svn client.quoted
I'd personally avoid any sort of non-linear history when interacting with SVN repositories, however.Which is a shame since git loses a lot of its utility without nonlinear history. For example, the script I posted uses git to do merges between svn branches. It works wonderfully even if, as you and Junio point out, its use of grafts to record svn merges scales poorly and is potentially susceptible to corruption. Thanks to the ability to record the fact that my merges between svn branches were actually merges, my git clone has a more complete picture of what's in my svn repository than the svn repository itself does!
Exactly, I too think that this is a much needed feature for git-svn. I have also noted that this modified(added a git svn dcommit) script works: rm -rf mygitsvn rm -rf mysvnrepo rm -rf mysvnwork mkdir mysvnrepo cd mysvnrepo svnadmin create . cd .. svn checkout file:///$PWD/mysvnrepo mysvnwork mkdir -p mysvnwork/trunk cd mysvnwork/ cat << EOF > trunk/README # # (C) Copyright 2000 - 2005 # Wolfgang Denk, DENX Software Engineering, wd@denx.de. # # See file CREDITS for list of people who contributed to this # project. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # EOF svn add trunk svn ci -m "first commit" trunk cd .. git-svn clone file:///$PWD/mysvnrepo -t tags -T trunk -b branches mygitsvn cd mygitsvn git checkout --track -b svn remotes/trunk git checkout -b merge echo new file > new_file git add new_file git commit -a -m "New file" echo hello >> README git commit -a -m "hello" echo add some stuff >> new_file git commit -a -m "add some stuff" git checkout svn mv -f README tmp echo friend > README cat tmp >> README git commit -a -m "friend" git svn dcommit git pull . merge git svn dcommit but, as expected, then merge commit is still gone.