DBI in git
"H.Merijn Brand" <[email protected]>
| Newsgroups | gmane.comp.lang.perl.modules.dbi.sybase.devel |
|---|---|
| Message-ID | <[email protected]> |
Long time ago, I started working on DBI. I just learned what I had to
know about git - for perl5 - to do what a VCS should do for you: track
changes and find changes back in time. So I started with
$ git svn clone hhttp://svn.perl.org/modules/dbi/trunk DBI-svn
Wait a few minutes and off I go. Full history and the right tools,
which include the graphical frontends I really like in git: gitk and
git-gui.
$ cd DBI-svn
$ git branch -a
* master
remotes/git-svn
The entry in .git/config now looks like
[svn-remote "svn"]
url = http://svn.perl.org/modules/dbi/trunk
fetch = :refs/remotes/git-svn
Then a new branch was created in the DBI svn repo. The more I see how
branches work in svn compared to how they work in git, the less I like
svn and the more I love the speed and workability of git. Fro *ME*, svn
just does it so incredibly wrong that it misses all logic.
So, after hours of fighting svn quirks, I'll show you how to include
the new branches into an existing DBI clone of git.
If you want to start fresh (you do not have any git clone of DBI's svn
yet), you might be better off with
$ git svn clone http://svn.perl.org/modules/dbi -T trunk -b branches
-t tags DBI-svn
Which will show all tags as branches.
But I already had a git repo that I already was happy with. In that
repo, I already added all the tags, so I had no need for the tags that
a new clone offered. In /my/ experience, the way git clones svn tags
are no tags at all.
It proved to be a no-go to just add a new entry for another remote svn
origin. So after a lot of experimenting, I came up with manual
editing .git/config to look like this:
--8<---
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[svn-remote "svn"]
url = http://svn.perl.org/modules
fetch = dbi/trunk:refs/remotes/git-svn
branches = dbi/branches/*:refs/remotes/*
# tags = dbi/tags/*:refs/remotes/tags/*
[gui]
geometry = 1352x672+116+0 207 211
wmstate = normal
[user]
email = [email protected]
name = H.Merijn Brand (Tux)
-->8---
Note that I disabled the tags.
Then I pulled again (update in svn terms)
$ git dpull
(See below for my definition of git-dpull)
After that I created two branches instead of te single master I
started with before
$ git co -b DBI remotes/git-svn
$ git co -b sqlengine remotes/sqlengine
$ git co DBI
$ git branch -a
* DBI
master
sqlengine
remotes/git-svn
remotes/sqlengine
To sync up with svn, I do
$ git co DBI
$ git dpull
$ cat ~/bin/git-dpull
#!/bin/sh
git stash && git svn fetch && git svn rebase && git stash pop
$ cat ~/bin/git-dpush
#!/bin/sh
git stash && git svn dcommit --username hmbrand && git stash pop
$
HTH
--
H.Merijn Brand http://tux.nl Perl Monger http://amsterdam.pm.org/
using 5.00307 through 5.12 and porting perl5.13.x on HP-UX 10.20, 11.00,
11.11, 11.23 and 11.31, OpenSuSE 10.1, 11.0 .. 11.3 and AIX 5.2 and 5.3.
http://mirrors.develooper.com/hpux/ http://www.test-smoke.org/
http://qa.perl.org http://www.goldmark.org/jeff/stupid-disclaimers/