5

所以我建立了一个 git-svn repo 并将其推送到 github。但是如果有人克隆它,则克隆中没有 svn config。
我推送的存储库与我推送后从 github 克隆的存储库之间的差异是:

在此处输入图像描述

我推送的那个(带有 svn 信息的 svn 克隆)在右侧 - 来自 github 的克隆在
左侧我有 ?从某种意义上说,他们克隆然后复制粘贴这些文件(并可能运行 git svn rebase)并且它们具有与我相同的设置。我也将 svn repo 的所有分支和标签克隆为远程分支,我也想分享这些。理想情况下,即使在我(我们)开始在 git 和 svn 存储库之间推送/dcommiting 之后,这些文件仍然有效

4

1 回答 1

2

这似乎对我有用:

git clone your-existing-git-repo new-cloned-repo
cd new-cloned-repo
git fetch origin refs/remotes/*:refs/remotes/*
git init
git svn init -s "svn://your-svn-server/your-svn-repo/your-svn-project"
git svn fetch
git checkout master
git svn rebase

虽然上述方法有效,但我发现下面的.git/config文件使用与我的原始文件相同的文件(没有origin远程附件到master分支)创建了一个 repo。

mkdir new-cloned-repo
cd new-cloned-repo
git init --bare .git
git remote add backup your-existing-git-repo
git fetch backup refs/remotes/*:refs/remotes/*
git fetch backup refs/heads/*:refs/heads/*
git fetch backup refs/tags/*:refs/tags/*
git init

# update SVN references
git svn init -s "svn://your-svn-server/your-svn-repo/your-svn-project"
git config svn.authorsfile your-authors-file.txt
git svn fetch

git checkout master
git svn rebase
git svn show-ignore >> .git/info/exclude

这应该克隆所有 Git 提交git clone/git fetch和远程分支(现有存储库知道的所有 SVN 分支/标签)git fetch origin refs/remotes/*,更新 SVN 连接信息git svn init,然后通过git svn fetch.

假设您在( , , )git svn init -s下以正常的 SVN 方式存储内容。your-svn-projecttrunkbranches/*tags/*

我不确定是否git init需要它,但我相信如果不需要它不会伤害任何东西。此外,这git checkout master可能是多余的,但没有任何害处。

于 2013-08-30T21:48:26.927 回答