![](/img/trans.png)
[英]Convert Mercurial to Git repository on Windows and without Python
[英]how to convert svn repository to git on Windows
我们有远程svn存储库,我们希望它转换为git。 你能告诉我在Windows上怎么做? 谢谢。
在Windows上安装应用程序:
找出svn存储库URL
并复制它
调用TortoiseGit克隆对话框
右键单击目标文件夹,例如D:\\SVN\\ToGit
,然后单击Git Clone...
选中From SVN repository
复选框
如果您先复制URL,然后调用克隆对话框,TortoiseGit将从剪贴板中获取复制的URL并将其粘贴到URL文本字段中。 所以,你不要自己粘贴它。 只要看看它是否正确。
如果您右键单击目标文件夹,TortoiseGit也会为您填写“ Directory
文本字段。 另外,看看它是否是你想要的。
因此,只需选中From SVN repository
复选框即可。
如果svn存储库具有标准布局,比如trunk,tags,branches,则不需要再做任何事情。
单击“确定”按钮
然后,开始将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 - 第9章了解更多信息和示例。
上下文:具有多个项目的HUGE存储库的远程svn服务器。 但是我只想将一个项目从SVN迁移到Git
我是这样做的:
要求:
该怎么办:
1.获取提交到作者文件的用户
打开cmd到本地svn项目副本的根目录并运行:
svn log -q | awk -F'|' '/ ^ r / {sub(“^”,“”,$ 2); sub(“$”,“”,$ 2); print $ 2“=”$ 2“<”$ 2“>”}'| sort -u> authors-transform.txt
将生成的作者文件放在可以找到它的位置
通过为每个提交者逐行添加名称和电子邮件到<>,打开并编辑authors-transform.txt文件
2.将SVN存储库从服务器复制到工作驱动器上的本地 (例如:c:/ repo / Repository
3.安装Visual SVN并将服务器的存储指向/ repo文件夹
还可以找到一个可以运行的开放端口
将身份验证的权限设置为服务器的窗口您可能还必须为服务器创建用户还要为用户设置服务器中特定项目的权限
4.在新克隆的SVN repo hold shift的目标文件夹中,单击Git Browse打开Git Extensions,转到“开始”,然后单击“克隆SVN”。
指向您为目标创建的本地svn服务器(例如http:// localhost / svn / repo / Repository / Development / ProjectName )
我取消选中了行李箱,标签和分支,但YMMV
将authors文件指向保存的位置
单击克隆
原因:
Git 2.6.2,因为它是最新版本,不会导致地址问题
Git Extensions因为它最大限度地减少了克隆的所有命令行工作
Visual SVN,因为我在服务器上遇到权限问题而且“git svn”命令对http:// localhost .....地址的响应要比我研究过的很多地方建议的文件://更好
巧克力,因为我没有看到任何其他方式来获得该版本的Git
我最终做了这么多,我做了一个批处理脚本来帮忙:
用法: SvnToGit <path/to/svn-repo> <local-checkout-dir> <remote-git-url>
先决条件
除非Git理解你的svn格式,否则你需要运行svnserve来“服务”repo。 你可以创建一个窗口服务,如下所示:
c:> sc create 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
您可以使用git-svn这个工具,它允许您将svn存储库转换为git存储库。 有关更多信息,请参阅git文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.