Thread (11 messages) flat view 11 messages, 3 authors, 2016-06-15

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help