Xfce git-svn repositories ------------------------- These git repositories are NOT intended to be cloned using git-clone (though I suppose you could do that if you wanted[?]). The idea is that you download the repo to your local system, and then you can do everything git can do locally, as well as pull and push changes from and to Xfce's subversion repository. Getting started --------------- Download the .tar.bz2 files for the modules you want, and untar them to whatever directory you want to store them in. There are three toplevel directories: http, https, and ssh. You want to grab the repositories that work with your access to Xfce SVN. If you don't have commit access at all, you'll want to use the files in the 'http' directory. If you have commit access with an ssh account on the SVN server (svn.xfce.org aka mocha.xfce.org), you'll use the files in the 'ssh' directory. If you have commit access but only a https account, you'll use the files in the 'https' directory. Unfortunately, the repos can't be converted into another type, but if you want to migrate commits/branches from one git repo to another, you can do so with normal git-pull/push on your local repos. Using the git-svn repositories ------------------------------ (NB: This is not a git tutorial. The below notes assume you already know how to use git.) Now that you have the repo downloaded and untarred, you can do things normally with git. Note that the local 'master' branch in these repos tracks the svn 'trunk' branch. There are remotes set up for the stable branches, and release tags. You'll probably want to create local branches for these if you want to do work on the stable branches. To sync your local repo with the subversion server, do: git-svn fetch That will update all subversion branches. If you just want to update the branch currently active in your git repository, do: git-svn rebase To send all pending git commits to the server, do: git-svn dcommit Each git commit will be sent in sequence to the svn server, so it'll show up as multiple commits on the svn server. git-svn will run 'rebase' for you if you aren't already in sync with the SVN server (you can't push your changes to the SVN repo without doing this). If there are conflicts while merging in changes from the SVN server, the dcommit will fail. If you want to view the svn log (that is, not the local git log), you can use: git-svn log If you want to see the most recent SVN revision you have merged locally into the current branch, you can do: git-svn find-rev HEAD Troubleshooting --------------- If you do a 'git-svn fetch' (or 'rebase'), and you get an error message about an unknown author or committer, you need to update the svn-authors mapping file. Git stores committer information using the commiter's name and email address, while svn just uses a server-local username. I've put a semi-comprehensive user mappings file at .git/svn/svn-authors inside each of the git-svn repos. Unfortunately this means if you update it, you'll need to update the file in all of your git-svn repos. You can move the file to another location (outside the repo) and set svn.authorsfile to the new location using git-config. Do this in each repository, and then you'll only have one file that needs to be updated. Another problem with this approach is that there's currently no way for me to 'push' a new authors file to everyone if a committer needs to be added. If anyone can think of a good way of handling this (without commiting a copy of the svn-authors file to each module in SVN), please let me know. How this all works ------------------ If you're curious to know how these repos were generated, take look at my script: http://mocha.xfce.org/~kelnos/git-svn/git-svn-gen.pl.txt --Brian Tarricone 22 Dec 2007: initial revision 29 Dec 2007: update instructions for multi-repo 30 Jun 2008: update instructions to refer to the script, minor updates