From: Stephen Bannasch <hidden> Date: 2016-06-15 22:44:27
I've just created a git-svn clone from a svn repo accessed locally
with a file:/// path.
Unfortunately the local svn repo is just a copy of the main svn repo
normally accessed with http or https (served through Apache). I was
having problems cloning the main svn repository (more details below)
so I archived the remote svn repository and copied it to my local
hard drive.
Is there an operation I can now do to switch the base url from:
file:///Path/to/svn/repository/projects
to
https://svn.concord.org/svn/projects
Here's more details about the problem that got me to this spot:
The svn repo is about 1GB.
I tried several times on a 1000baseT network to git-svn clone the
repo. There are about 13000 revisions but the clone process would
randomly stop without an error somewhere between revision 400 and
1200.
This was the command I was using:
git svn clone https://svn.concord.org/svn/projects
I'm running git version 1.5.4.4 (installed via ports) on MacOS 10.5.2.
From: Björn Steinbrink <hidden> Date: 2016-06-15 22:44:27
On 2008.04.02 10:38:34 -0400, Stephen Bannasch wrote:
I've just created a git-svn clone from a svn repo accessed locally with a
file:/// path.
Unfortunately the local svn repo is just a copy of the main svn repo
normally accessed with http or https (served through Apache). I was
having problems cloning the main svn repository (more details below) so I
archived the remote svn repository and copied it to my local hard drive.
I guess you should have used the --rewrite-root option when you did the
clone. Then the metadata in the log entries would already point to the
right URL and you could just adjust the URL in .git/config and drop the
rewriteRoot entry there.
Basically, this should work:
Change the URL to the repo in your .git/config.
Use filter-branch to change all git-svn-id lines in the log entries.
Delete the .rev_map.* files in .git/svn/*
Run git svn fetch (rebuilds the .rev_map.* files).
The filter-branch call should use the --msg-filter option to change the
log entries and should apply to all the svn branches/tags/trunk (or just
use " -- --all", if there's nothing that may not be filtered).
HTH
Björn
Basically, this should work:
Change the URL to the repo in your .git/config.
Done
Use filter-branch to change all git-svn-id lines in the log entries.
I've just started using git so please forgive the beginner questions.
What should I change the log entries to?
Here's what the log entries look like now:
$ git-filter-branch --msg-filter 'echo $GIT_COMMIT'
^MRewrite 89817efa5b290d375786a5af9a0dcc338df8a68c (1/13099)^MRewrite b090d1d40cba2c66a494d52e370317487d103484 (2/13099)^M
Do you mean each one should just be re-written to a new SHA1 keys? If so how should I generate new SHA1 keys?
The filter-branch call should use the --msg-filter option to change the
log entries and should apply to all the svn branches/tags/trunk (or just
use " -- --all", if there's nothing that may not be filtered).
HTH
Björn
--
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
From: Teemu Likonen <hidden> Date: 2016-06-15 22:44:27
Stephen Bannasch kirjoitti:
I've just created a git-svn clone from a svn repo accessed locally
with a file:/// path.
Unfortunately the local svn repo is just a copy of the main svn repo
normally accessed with http or https (served through Apache). I was
having problems cloning the main svn repository (more details below)
so I archived the remote svn repository and copied it to my local
hard drive.
I know two options:
1. Keep your current Git repo but set the url and rewriteroot options
in .git/config:
[svn-remote "svn"]
url = http://...
rewriteroot = file:///...
Your commit messages will still have git-svn-id pointing at file:///...
url but it should work fine.
2. Convert your repo again:
$ mkdir repo ; cd repo
$ git svn init --rewrite-root=http://... file:///...
$ git svn fetch
This way you'll create new Git repo from file:///... url but commit
messages will have git-svn-id's url pointing at http://... . After that
set the correct remote url to .git/config:
[svn-remote "svn"]
url = http://...
From: Stephen Bannasch <hidden> Date: 2016-06-15 22:44:27
At 9:05 AM +0300 4/3/08, Teemu Likonen wrote:
Stephen Bannasch kirjoitti:
quoted
I've just created a git-svn clone from a svn repo accessed locally
with a file:/// path.
Unfortunately the local svn repo is just a copy of the main svn repo
normally accessed with http or https (served through Apache). I was
having problems cloning the main svn repository (more details below)
so I archived the remote svn repository and copied it to my local
hard drive.
2. Convert your repo again:
$ mkdir repo ; cd repo
$ git svn init --rewrite-root=http://... file:///...
$ git svn fetch
This way you'll create new Git repo from file:///... url but commit
messages will have git-svn-id's url pointing at http://... . After that
set the correct remote url to .git/config:
[svn-remote "svn"]
url = http://...
Thanks Teemu,
That took a while but worked.
I also removed the rewriteRoot line from config after editing the url.
I think I might have achieved the same effect more quickly with Björn's suggestion to use:
git-filter-branch --msg-filter
to:
quoted
Use filter-branch to change all git-svn-id lines in the log entries.
But it wasn't clear to me how to change the git-svn-id lines.
Basically, this should work:
Change the URL to the repo in your .git/config.
Done
quoted
Use filter-branch to change all git-svn-id lines in the log entries.
I've just started using git so please forgive the beginner questions.
What should I change the log entries to?
Here's what the log entries look like now:
$ git-filter-branch --msg-filter 'echo $GIT_COMMIT'
^MRewrite 89817efa5b290d375786a5af9a0dcc338df8a68c (1/13099)^MRewrite b090d1d40cba2c66a494d52e370317487d103484 (2/13099)^M
Ouch, that replaced your commit messages with the sha1 hashes... Should
have been something like:
git filter-branch --msg-filter 'sed "s,file:///....,http:///,"' -- --all
Björn