`
nowing
  • 浏览: 84684 次
  • 来自: ...
社区版块
存档分类
最新评论

svn仓库转为git仓库

阅读更多
如何将远程SVN版本库搬到本地

经常在宽带网络状况不佳的时候,访问互联网上的SVN库是一件极其痛苦的事情,更别说要查看版本库的日志信息了。此时如果可以将远程版本库整个同步到本地,然后所有操作都在本地的版本库上进行,好处就不用多说了。幸运的是SVN已经提供了相应的功能,具体操作步骤如下:
1)在本地建立一个新的版本库:
    svnadmin create D:\test
2)创建钩子文件pre-revprop-change.bat:(windows环境里是D:\test\hooks\pre-revprop-change.bat)
    文件中只需要一行内容即可“exit 0”。
3)初始化同步操作:
    svnsync init file:///D:/test <远程SVN库的URL>
    (如果需要用户名/密码,则按提示输入。成功后命令行将输出信息:复制版本 0 的属性)
4)执行同步操作:
    svnsync sync file:///D:/test
   (如果需要用户名/密码,则按提示输入。如果远程SVN库数据较多,需要慢慢等待)
5)如果远程SVN库有了新的更新,只需重复执行步骤4即可。


--------------

如何将SVN仓库转换为Git仓库

按如下步骤操作就可以将SVN仓库完整的转换为Git仓库:
1) 将远程SVN仓库搬到本地(这一步主要是为了提高转换的速度,也可以忽略)
   这里假设最终要转换的SVN仓库为file:///tmp/test-svn

2) 使用git svn clone命令开始转换
    $ git svn clone file:///tmp/test-svn -T trunk -b branches -t tags
    git svn clone 命令会把整个Subversion仓库导入到一个本地的Git仓库中。这相当于针对所提供的 URL 运行了两条命令git svn init加上gitsvn fetch。因Git需要提取每一个版本,每次一个,再逐个提交。对于一个包含成百上千次提交的项目,花掉的时间则可能是几小时甚至数天(如果你的SVN仓库是远程网络访问的,先执行上面第一步的操作还是有点好处的。不过项目通常提交次数都不少,漫长的等待是少不了的啦,慢慢等吧)。
-T trunk -b branches -t tags告诉Git该Subversion仓库遵循了基本的分支和标签命名法则。如果你的主干(trunk,相当于Git里的master分支,代表开发的主线)、分支或者标签以不同的方式命名,则应做出相应改变。由于该法则的常见性,可以使用-s来代替整条命令,它意味着标准布局(s是Standard layout的首字母),也就是前面选项的内容。下面的命令有相同的效果:
  $ git svn clone file:///tmp/test-svn -s
注意本例中通过 git svn 导入的远程引用,Subversion的标签是当作远程分支添加的,而不是真正的Git标签。导入的Subversion仓库仿佛是有一个带有不同分支的tags远程服务器。用“$ git show-ref”就可以看到转换后Git仓库的相关情况,结果类似如下:
$ git show-ref
1cbd4904d9982f386d87f88fce1c24ad7c0f0471 refs/heads/master
aee1ecc26318164f355a883f5d99cff0c852d3c4 refs/remotes/my-calc-branch
03d09b0e2aad427e34a6d50ff147128e76c0e0f5 refs/remotes/tags/2.0.2
50d02cc0adc9da4319eeba0900430ba219b9c376 refs/remotes/tags/release-2.0.1
4caaa711a50c77879a91b8b90380060f672745cb refs/remotes/tags/release-2.0.2
1c4cb508144c513ff1214c3488abe66dcb92916f refs/remotes/tags/release-2.0.2rc1
1cbd4904d9982f386d87f88fce1c24ad7c0f0471 refs/remotes/trunk
而普通的 Git 仓库是类似如下模样:
$ git show-ref
83e38c7a0af325a9722f2fdc56b10188806d83a1 refs/heads/master
3e15e38c198baac84223acfc6224bb8b99ff2281 refs/remotes/gitserver/master
0a30dd3b0c795b80212ae723640d4e5d48cabdff refs/remotes/origin/master
25812380387fdd55f916652be4881c6f11600d6f refs/remotes/origin/testing
这里有两个远程服务器:一个名为gitserver,具有一个master分支;另一个叫origin,具有master和testing两个分支。

3) 获取SVN服务器的最新更新到转换后的Git仓库(这步通常在连续的转换过程中就没必要了)
    $ git svn rebase

4) 转换SVN仓库的svn:ignore属性到Git仓库的.gitignore文件
    $ git svn create-ignore
    该命令自动建立对应的.gitignore文件,以便下次提交的时候可以包含它。如果在生成.gitignore文件前想先查看一下,运行命令“git svn show-ignore”即可。

5) 转换SVN的标签为Git标签
    $ cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
    $ rm -Rf .git/refs/remotes/tags
    该命令将原本以 tag/ 开头的远程分支的索引变成真正的(轻巧的)标签。
    这个在Window下试过不行,报”cp: cannot stat `.git/refs/remotes/tags/*': No such file or directory“的错误,可以使用如下两个标准命令处理:
$ git tag tagname tags/tagname     ----用指定的分支创建一个Git标签
$ git branch -r -d tags/tagname    ----删除指定的远程分支

6) 转换SVN的分支为Git分支
    $ cp -Rf .git/refs/remotes/* .git/refs/heads/
    $ rm -Rf .git/refs/remotes
    该命令把refs/remotes下面剩下的索引变成Git本地分支

7) 最后把转换后的本地Git仓库推到公共的Git服务器
    $ git remote add origin [远程Git服务器地址]
    $ git push origin master --tags
    所有的标签和主干现在都应该整齐干净的躺在新的Git服务器里了。如果要将分支也同步到远程Git服务器,将--tags改为--all。
分享到:
评论
2 楼 w420372197 2015-03-14  
我按照你的步骤,走到第3步:“git show-ref”;报错“fatal: Not a git repository (or any of the parent directories): .git”,能帮我看下是什么问题吗?我qq:42零37219七(中文数字转换一下)
1 楼 大海lb 2012-09-04  
你好,我想从远程直接用git svn clone http://xxxx   xxxx克隆到本地,为什么总是报错?
错误如下:svn-remote.svn.url already set:  谢谢

相关推荐

    svn迁移到git保留commit信息,后续还能维护从svn同步代码到git(亲测有效,网上资源整理最终版)

    公司代码要从svn迁移到git,不想笨笨的重新上传一份新代码,于是研究了下svn代码到git的迁移同时还要保留commit信息,尝试了很久终于成功啦;在保留commit信息的同时,还能继续从svn同步代码到git,这样即使还有人...

    SVN迁移到git

    描述了如何从SVN迁移到git,比较简短,精炼,文档中提到的users.txt为svn与git的用户对照

    SVN迁移到Git

    从SVN迁移到Git之后,项目开发代码继续在SVN提交,如何同步迁移之后继续在SVN提交的代码到Git

    svn转化为git

    本文将详细介绍如何将现有的SVN仓库转换为Git仓库,以便更好地适应现代开发环境。 1. **理解SVN与Git的区别** SVN是一个集中式的版本控制系统,所有的版本信息都存储在一个中央服务器上,而Git则是一个分布式系统...

    如何将SVN项目迁移至Git

    接下来,你需要克隆 SVN 仓库到本地的新 Git 仓库。使用 `git svn clone` 命令,同时指定 SVN 仓库 URL、用户信息文件和其它选项: ```bash git svn clone ...

    svn-git插件Jenkins.zip

    svn-git插件是Jenkins的一个扩展,旨在提供一种方式来同步SVN仓库和Git仓库,使开发者可以从Git仓库进行开发,同时保持与SVN主仓库的同步。这尤其适用于那些已有大量历史记录在SVN中,但希望利用Git的分布式特性进行...

    svn类型的git工具64位

    1. **克隆SVN仓库**:`git svn clone`命令可以从SVN服务器克隆一个完整的仓库到本地的Git仓库。 2. **提交到SVN**:在本地完成Git提交后,可以使用`git svn dcommit`将这些更改推送到SVN服务器。 3. **拉取更新**:...

    文中内容为,如何将Android Studio工具中的SVN库改为Git,希望能帮助到各位码农朋友

    1. **初始化Git仓库**: 在Android Studio中,找到你的项目根目录,通常这个目录包含`build.gradle`和`.idea`等文件。在该目录下,打开命令行终端(Windows用户可以右键选择“Git Bash Here”)。然后输入以下命令...

    SVN仓库彻底删除文件工具

    是否svn仓库已经占用了大量的磁盘空间? 使用本图形化工具帮助你将这些文件彻底地从svn中删除。 先导出svn仓库 svnadmin dump /home/svn/xx &gt; svn.dump 使用本工具过滤掉需要删除的文件 重新创建仓库并导入 ...

    git和svn学习入门教程

    Git和Subversion(SVN)都是版本控制系统,用于跟踪和管理软件开发中的代码变更。它们在代码管理和协作方面发挥着至关重要的作用。本教程将帮助初学者了解这两者的基础知识,以便选择适合自己的工具。 首先,让我们...

    SVN迁移到GIT.doc

    使用`git svn clone`命令可以将SVN仓库克隆为Git仓库。在以下示例中,我们克隆一个位于`https://192.168.1.60:3690/svn/svn/projectSVN/tzxm/hz_tzxm_root_hlj`的SVN仓库,并将其转换为名为`demo`的Git仓库: ```...

    svn2git.zip

    1. 初始化一个新的Git仓库。 2. 使用`git svn clone`命令从Subversion仓库中抓取所有提交的历史记录。 3. 对抓取的数据进行必要的调整,如映射SVN的trunk、branches和tags到Git的相应结构。 4. 将结果导入到目标Git...

    git-svn使用用法

    git-svn是Git版本控制系统与Subversion(SVN)版本控制系统的桥梁,允许Git用户与SVN仓库进行交互。在一些项目中,由于历史原因可能仍在使用SVN作为中央版本控制系统,而git-svn可以使得开发者在本地使用Git的强大...

    git svn转换工具

    svn+git实现离线提交并且不需要到处所有svn版本,速度超快非一般的感觉,超越git本身的git2svn功能。 使用本工具需要安装基础工具: 首先安装git msysgit:https://code.google.com/p/msysgit/downloads/list msysgit...

    版本管理_svn和git常用操作

    这将在指定路径下创建一个新的svn仓库。 #### 1.2 同步代码 同步代码即更新工作副本,可以使用`svn checkout`首次获取项目,或使用`svn update`将本地代码与远程仓库同步。 ``` svn checkout ...

    版本控制svn+git

    一种常见的方式是,在SVN仓库上搭建Git-SVN桥接,这样团队可以在本地使用Git,然后通过Git-SVN工具与SVN仓库同步。这种方法可以充分利用Git的灵活性和SVN的集中管理。 **知识点总结** 1. **SVN基础**:集中式版本...

    Git与SVN比较

    Git与SVN比较Git与SVN比较Git与SVN比较Git与SVN比较Git与SVN比较Git与SVN比较

    SVN和Git简单使用文档

    - **创建仓库**:使用`svnadmin create`命令创建一个SVN仓库。 - **导入项目**:使用`svn import`将本地项目导入到仓库。 - **克隆仓库**:使用`svn checkout`获取仓库副本。 - **提交更改**:使用`svn commit`提交...

    简易SVN/GIT下载器

    简易的SVN代码下载器,同时支持GIT,可以完整实现SVN/GIT的checkout,并演示如何解析svn协议的XML,以及下载项目,方便想要深入了解SVN这类代码管理系统的构造以及二次开发的朋友,非常小巧作为工具用也是不错的

Global site tag (gtag.js) - Google Analytics