我们有远程svn存储库,我们希望它转换为git。 你能告诉我在Windows上怎么做? 感谢。
答案 0 :(得分:1)
在Windows上安装应用程序:
找出svn存储库URL
并将其复制
调用TortoiseGit克隆对话框
右键点击目标文件夹,例如D:\SVN\ToGit
,然后点击Git Clone...
选中From SVN repository
复选框
如果您先复制了URL,然后调用克隆对话框,TortoiseGit将从剪贴板中获取复制的URL并将其粘贴到URL文本字段中。所以,你不要自己粘贴它。只要看看它是否正确。
如果您右键单击目标文件夹,TortoiseGit也会为您填写Directory
文本字段。另外,看看它是否是你想要的。
因此,只需选中From SVN repository
复选框即可。
如果svn存储库具有标准布局,例如主干,标签,分支机构,则不需要再做任何事情。
点击“确定”按钮
然后,开始将svn存储库克隆到git存储库 像这样:
正如您所看到的,TortoiseGit恰当地使用Git for Windows命令git svn clone
来克隆它。
git.exe svn clone "svn://svn.code.sf.net/p/tortoisesvn/code/" "D:\SVN\ToGit\tsvn" -T trunk -b branches -t
所以,基本上,你可以去 Git Bash / CMD 并重新使用该命令行,并获得相同的结果。
注意:如果您看到r1
,r2
,r3
...,您可以随时停止克隆,稍后再继续使用相同的命令行。
克隆本地svn存储库
使用TortoiseGit 2.4.4 +
只需将svn本地路径复制到克隆对话框的URL即可。请参阅:
同样,选中From SVN repository
复选框
TortoiseGit 2.4.4 + 将使用 file:///
协议来克隆本地svn存储库。
获得git存储库后,可以在那里提交。并使用TortoiseGit ->
SVN DCommit...
将提交推送回原始svn存储库,类似svn commit
。
如您所见,命令为git svn dcommit
。
如果原始svn存储库有一些新的提交需要更新,您可以使用TortoiseGit ->
SVN Rebase
来获取svn提交然后合并/ rebase在最新的提交。类似于svn update
。
它使用git svn fetch
然后使用git rebase
合并/重新定义所提取的更改。
对于命令行,您可以使用git svn rebase
。
阅读Pro Git v2 - Chapter 9了解更多信息和示例。
答案 1 :(得分:0)
您可以使用git-svn这是一个允许您将svn存储库转换为git存储库的工具。有关详细信息,请参阅git documentation。
答案 2 :(得分:0)
上下文: 带有多个项目的巨大存储库的远程svn服务器。但是我只想将一个项目从SVN迁移到Git
这是我的做法:
要求:
做什么:
1。获取致力于作者文件的用户
打开cmd到本地svn项目副本的根目录并运行:
svn log -q | awk -F'|' '/ ^ r / {sub(“ ^”,“”,$ 2); sub(“ $”,“”,$ 2);打印$ 2“ =” $ 2“ <” $ 2“>”}''|排序-u> authors-transform.txt
将生成的作者文件放在您可以找到的位置
打开并编辑authors-transform.txt文件,方法是为每个提交者逐行添加名称和电子邮件到<>中
2。将服务器上的SVN存储库复制到工作驱动器上的本地(例如:c:/ repo / Repository
3。安装Visual SVN,并将服务器的存储指向/ repo文件夹
还找到了一个开放的端口供其运行
设置对服务器的Windows身份验证的权限 您可能还需要为服务器创建一个用户 同时为您的用户设置服务器中特定项目的权限
4。在新克隆的SVN存储库保留移位的目标文件夹中,单击Git浏览以打开Git扩展,转到“开始”,然后单击“克隆SVN”
指向您为目标创建的本地svn服务器(例如http://localhost/svn/repo/Repository/Development/ProjectName)
我没有选中树干,标签和分支,但是YMMV
将作者文件指向保存位置
点击克隆
原因:
Git 2.6.2,因为它是最新版本,没有引起地址问题
Git扩展,因为它最小化了克隆的所有命令行工作
Visual SVN,因为我在服务器上遇到权限问题,并且“ git svn”命令对http://localhost .....地址的响应比在许多地方建议的file://更好。研究过
巧克力,因为我没有其他方法可以获取该版本的Git
答案 3 :(得分:0)
我最终做了这么多,我制作了一个批处理脚本来提供帮助:
用法:SvnToGit <path/to/svn-repo> <local-checkout-dir> <remote-git-url>
先决条件
除非Git理解您的svn格式,否则您将需要运行 svnserve“服务”回购。您可以创建一个窗口服务来做, 像这样的东西:
c:> sc创建svnserve binpath =“ \” svnserve.exe \“ --service -r C:\ Users \ UserName \ Repositories \ Svn” displayname =“ Subversion Server” depend = Tcpip start = auto
注意事项:
实际的批处理文件:
REM Argument 1: Path to your repository
REM Argument 2: Path to your new Git working directory
REM Create authors.txt file
REM It will contain lines like:
REM SomeCoder = Some Guy <some.guy@example.com>
REM If Git is now aware of the format of svn repository, you will need to use svnserve:
REM svnserve -d -R --root path/to/your/repository
PAUSE
IF EXIST bare.git\NUL RD /S /Q bare.git
IF EXIST GitTemp\NUL RD /S /Q GitTemp
REM The following will not work, if SVN is using a newer FS than what Git is aware of
REM git svn clone file:///%1 --prefix=svn/ --no-metadata -A authors.txt --stdlayout GitTemp
REM So, use
git svn clone svn://localhost/%1 --prefix=svn/ --no-metadata -A authors.txt --stdlayout GitTemp
PAUSE
REM GitIgnore
cd GitTemp
git svn show-ignore > .gitignore
git add .gitignore
git commit -m "Convert svn:ignore properties to .gitignore."
cd ..
REM Bare Repo
git init --bare bare.git
cd bare.git
git symbolic-ref HEAD refs/heads/trunk
cd ..
cd GitTemp
git remote add bare ../bare.git
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare master
cd ..
REM clean up SVN type stuff
cd bare.git
REM git branch -m trunk master
git branch -m svn/trunk master
git symbolic-ref HEAD refs/heads/master
cd ..
REM Manual changes if needed for tags
REM git for-each-ref --format='%(refname)' refs/heads/tags |
REM cut -d / -f 4 |
REM while read ref
REM do
REM git tag "$ref" "refs/heads/tags/$ref";
REM git branch -D "tags/$ref";
REM done
PAUSE
REM Working Directory
git clone bare.git %2
cd %2
git checkout master
git remote remove origin
PAUSE
git remote add origin %3
REM Then
git push -u origin master