When I execute a
git svn fetch
from my repository, it returns nothing and doesn't update even though there are new commits under svn.
[root]# svn log -l 1 http://example.com/trunk/client-resources/resource-pa r12958 | ing | 2011-08-22 18:29:57 -0500 (Mon, 22 Aug 2011) | 1 line SRGENERAL-1468 adding more arrays for pa [root]# git-svn fetch [root]# git log -1 commit be19ae4c7d1a3c3da6dd90389aebd6d76792cc71 Author: sltin <sltin@44b83e5a-25ef-0310-8dbe-ee0aa4f92a64> Date: Wed Jun 22 14:30:53 2011 +0000 Fixing the classpath. git-svn-id: http://example.com/trunk/client-resources/resource-common@12406 44b83e5a-25ef-0310-8dbe-ee0aa4f92a64
Note the version differences. The svn log lists 12958 and the git log lists the latest svn version as 12406.
I can do a reset to 12406 and then a new fetch:
[root]# git svn reset 12406 r12406 = be19ae4c7d1a3c3da6dd90389aebd6d76792cc71 (refs/remotes/git-svn) [root]# git svn fetch M src/test/java/csl/resource/ioc/AbstractResourceIocTest.java r12977 = 1b21f560b0354b28fe1a272d7723b1e6fa90a99c (refs/remotes/git-svn) M src/test/java/csl/resource/ioc/AbstractResourceIocTest.java r12978 = bf22ea0151a364eb1ca1af37a7a907d5b5cc7420 (refs/remotes/git-svn) M src/test/java/csl/resource/ioc/AbstractResourceIocTest.java r12987 = ce922c2eae07f6c12dbbd4175a9c61055b563ee3 (refs/remotes/git-svn)
And when I check the log versions, they are unchanged.
How do I get git-svn to pull in the latest versions from svn?
Edit:
I found the answer, the svn data is loaded in to an inactive thread that would normally be merged in to the active branch, which doesn't exist in a bare repository. I tried to do a reset, but that needs an active branch too. The final answer was:
git reset --soft refs/remotes/git-svn
SVN by nature is slow. Remember Git needs the entire history locally, so it checks out every revision from SVN. SVN doesn't pull the entire repository down, just a specific revision.
git works perfectly fine with a svn repository on the other side, why not benefit from that? Certainly possible, and a fair move towards your colleagues, not to push unfinished changes. however there is one huge danger hidden in there: you will tend to make very few commits to the companies repository.
The high-level workflow for migrating from SVN to Git is as follows: Prepare a migration environment. Convert the source SVN repository to a local Git repository. (Optional) Synchronize the local Git repository with any changes from SVN repository while developers continue using SVN.
git svn fetch
only copies new revisions to your local object database, very much like git fetch
– both only synchronize object databases. It will not update your branch and working copy. To get the newly fetched changes into your branch, use git svn rebase
; it will re-apply all your local changes on top of the latest svn revision.
git svn rebase
will do a fast-forward when there are no local commits, so it should not mess with history. Alternatively you could use git merge --ff-only git-svn
to fast-forward to the most recent svn revision (and abort when it is not fast-forwardable, i.e. not a direct descendant)
You should only use git svn reset
when upstream svn has changed history (svndump/svnadmin) and you need to re-fetch the new commits, but this should almost never happen (otherwise blame the admin!)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With