From: Orestis Markou Date: Sun, 12 Apr 2009 23:58:45 GMT Subject: Re: git-svn doesn't recognise trunk as parent of branch Message-ID: In-Reply-To: <3110D1F9-B096-4E10-8795-748EF5E38318@orestis.gr> 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: > >> On Sun, Apr 12, 2009 at 07:40:46PM +0300, Orestis Markou wrote: >>> 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 >