Thread (7 messages) flat view 7 messages, 2 authors, 2016-06-15

Re: git-svn doesn't recognise trunk as parent of branch

From: Orestis Markou <hidden>
Date: 2016-06-15 22:46:35

And I also realised that I don't need to rewrite the history itself. I  
was confused because gitk was caching something and I had to restart  
it to see the updated info.
--
orestis@orestis.gr
http://orestis.gr/




On 13 Apr 2009, at 02:44, Orestis Markou wrote:
That seems to be working - the only extra thing that I needed to do  
after the rewrite of the history is to update the svn remote branch:

echo $rewritten_history_tip > .git/refs/remotes/svn-branch-name

I would still consider this to be a bug though - it's a perfectly  
valid svn repo and git-svn should handle it... Is this the correct  
place to report such issues?

Regards,
Orestis
--
orestis@orestis.gr
http://orestis.gr/




On 12 Apr 2009, at 21:54, Peter Baumann wrote:
quoted
On Sun, Apr 12, 2009 at 07:40:46PM +0300, Orestis Markou wrote:
quoted
Hello there - this is my first post to this ML, so please be kind!

I have previously used git-svn with great success. However, in this
project, the svn repo layout is a bit unusual and I'm having getting
git-svn to do the correct thing.

The repository I'm trying to clone is a subdirectory under a huge  
repo:

http://svn.example.com/projects/trunk/MyProject/Production

which has trunk, branches and tags and a couple of other directories
(which I'm not interested in).

Complications so far:

* I don't have read access to the lower directories, only to  
Production
* Being a part of a big repo, the initial revision is something like
2000
* trunk, branches, tags where not created in the same revision.  
trunk
didn't exist until revision say 2050.


Doing 'git svn init -s
http://svn.example.com/projects/trunk/MyProject/Production'  
produces the
following configuration:

[svn-remote "svn"]
url = http://svn.example.com/trunk/projects/MyProject/Production
fetch = trunk:refs/remotes/trunk
branches = trunk/projects/MyProject/Production/branches/*:refs/ 
remotes/*
tags = trunk/projects/MyProject/Production/tags/*:refs/remotes/ 
tags/*

Fetching this fetches only trunk and no branches.

Amending the config to be:

[svn-remote "svn"]
	url = http://svn.example.com/trunk/projects/MyProject/Production/
	fetch = trunk:refs/remotes/trunk
	branches = branches/*:refs/remotes/*
	tags = tags/*:refs/remotes/tags/*


and fetching (minor issue - have to start from scratch again), does
fetch all commits. However, there is no link between branches and  
trunk.
Using gitk (don't know how else to visualise this) shows branches as
having no parent. Indeed, in the fetch messages there is no 'found
possible parent' message. Also, when creating new branches in svn,
nothing shows up in git until a change happens. Then the branch is
created (again, with no parent).

The only case where a correct parent was set was when someone  
branched
*from a branch*. Then the usual 'found possible parent' message
appeared, and gitk shows a sane tree.

I'm on Mac OS X, git version 1.6.2.2.471.g6da14 (built from source,
master branch). This includes a recent commit that fixed an issue  
with
deep directories in git-svn, (without it I couldn't get the branches
anyway), but it doesn't seem to have fixed the problem completely.

Any pointers welcome.
It might be that git svn can't work with this strange repo or with  
trunk
created after the branches (no idea if this is a bug or  
intentional), but I'll
show you a easy way how to fix the git repo after the import by  
using grafts.

If you have a wrongly connected development (which you are trying  
to fix) line like
the following example:

Time goes from left to right

	1 - 2 - 3 - 5 - 6       branchA

     	        a - b - c - d   trunk

you could fix it by connecting the graph using

	echo a 2 >> .git/info/grafts

to get something like this

	1 - 2 - 3 - 5 - 6       branchA
	      \
     	        a - b - c - d   trunk

Replace 'a' and '2' with the sha1 value of the corresponding  
commit. The same
way you could teach git about merges in svn. To make the changes  
permantent,
use something like

	git filter-branch --tag-name-filter cat -- --all

(Pls. check the manpage, I'm not that familiar with git filter- 
branch)

-Peter
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help