Hello,
I've done this by hand as a proof of concept I suspect it would need loads of
work in git-svn to do it properly. However, I thought I'd mention as part of
my "success with submodules" reports.
ffmpeg is managed with svn; I like to track its development with git-svn.
Works wonderfully except for one problem: they've made use of svn:externals
for one component, libswscale. Previously I just regularly updated the
libswscale subdirectory by checking out the latest copy (which is all that
subversion does) and committing it to my own branch off upstream.
With submodule support in git, it makes it possible to do a much better job.
What I did was have two svn-remote sections in the config:
[svn-remote "ffmpeg"]
url = svn://svn.mplayerhq.hu/ffmpeg
fetch = trunk:refs/remotes/ffmpeg-svn
[svn-remote "libswscale"]
url = svn://svn.mplayerhq.hu/mplayer
fetch = trunk/libswscale:refs/remotes/libswscale-svn
After running git-svn fetch; there are two independent branches in my
repository:
-- * -- * -- * -- * -- * (ffmpeg-svn)
---- * ----- * ------- * (libswscale-svn)
Now, we fork from ffmpeg-svn and libswscale-svn to make non-tracking branches
that can be committed to:
$ git checkout -b master-ffm ffmpeg-svn
$ git branch master-sws libswscale-svn
Next, we create a shared clone of the repository as a subdirectory in that
repository.
$ git clone -s . libswscale
Now we want that clone to be even more strongly linked to the parent - to the
extent that they share the same refs, etc:
$ cd libswscale
$ rm -rf .git/refs .git/logs .git/info description config
$ ln -s ../../.git/refs .git/refs
$ ln -s ../../.git/logs .git/logs
$ ln -s ../../.git/info .git/info
$ ln -s ../../.git/config .git/config
$ ln -s ../../.git/description .git/description
Only HEAD and index are independent. Next we switch from the ffmpeg branch to
the libswscale branch in this subdirectory:
$ git checkout master-sws
Now, we make the subdirectory a submodule in the parent:
$ cd ..
$ git add libswscale
$ git commit -m "libswscale is now a submodule"
How dangerous is this? I've made the repository it's own submodule and it
shares the same refs, info and logs. LIVING ON THE EDGE MAN!
You have to run two git-svn commands to sync with upstream:
$ git-svn fetch ffmpeg
$ git-svn fetch libswscale
Then of course you would merge
$ git merge ffmpeg-svn
$ cd libswscale; git merge libswscale-svn; cd ..
$ git commit -m "Sync with upstream"
Personally I think that's pretty cool, this is significantly better than
svn:externals because the particular revision of libswscale in use is
recorded. Seriously - someone show me another VCS that can do that - I think
git has actual magic powers :-)
I dare say that git-svn could do much better because it could reconstruct the
submodule history based on the repository dates and create the link in the
tracking branch rather than having to do it manually at the end as I've done
here. That would mean that the recorded submodule was right for all
history - again, not the case for svn:externals, if you check out a previous
version the external remains current.
Andy
--
Dr Andy Parkins, M Eng (hons), MIET
andyparkins@gmail.com
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
| Kristen Carlson Accardi | [PATCH] ata: ahci: power off unused ports |
| Gabriel C | Re: 2.6.22-rc4-mm1 |
| Jeremy Fitzhardinge | [PATCH 12 of 36] x86_64: replace end_pfn with num_physpages |
| Kyle McMartin | Re: -mm merge plans for 2.6.21 |
git: | |
| Andy Parkins | svn:externals using git submodules |
| Marius Storm-Olsen | Re: Git on MSys (or how to make it easy for Windows users to compile git) |
| Alex Riesen | Re: git-fast-import |
| rene.scharfe | Re: [PATCH 1/6] Add strbuf_rtrim and strbuf_insert. |
| Richard Stallman | Real men don't attack straw men |
| Tanvir | Re: Adobe Flash on OpenBSD |
| Will Maier | cron doesn't run commands in /etc/crontab? |
| Paul Taulborg | SMP Support? |
| David Willmore | Re: Intel, the Pentium and Linux |
| Stephen Pierce | SLS |
| Ari Lemmke | find-1.2 |
| Brett McCoy | Re: Offical windows |
| magical mounts | 7 hours ago | Linux kernel |
| Problem in scim in Fedora 9 | 8 hours ago | Linux general |
| The new Western Digital power saving drives | 8 hours ago | Hardware |
| Battery Maximizer Software | 1 day ago | Linux kernel |
| windows folder creation surprise | 1 day ago | Windows |
| Firewall | 1 day ago | OpenBSD |
| IP layer send packet | 2 days ago | Linux kernel |
| dtrace for linux available | 2 days ago | Linux kernel |
| Unable to mount ramdisk image using UBoot while upgrading to 2.6.15 kernel for a MPC8540 based target | 3 days ago | Linux kernel |
| RealTek RTL8169 - can't connect | 3 days ago | NetBSD |
