迁移记录,根据实际操作,有改动和改进地方。
==========================================================================
(备注:收费的)
SubGit 2.0版本,开始支持远程subversion版本库,因此创建Git镜像,无需shell访问subversion版本库了。
项目地址:
http://subgit.com/index.html
==========================================================================
如何将远程SVN版本库搬到本地
From:http://nowing.iteye.com/blog/844608
经常在宽带网络状况不佳的时候,访问互联网上的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。
==========================================================================
+
+
+
=
+
+
+
相关推荐
将 SVN 项目迁移到 Git 是一个常见的操作,特别是在团队决定从 SVN 转换到 Git 这种更现代化的版本控制系统时。以下是一份详细步骤,涵盖了如何将 SVN 项目迁移到 Git,包括完整的命令行操作。 首先,你需要在 SVN ...
克隆临时目录中的内容到一个新的Git仓库,这里假设仓库名为`platform`: ``` git clone . ../platform ``` 7. **配置远程仓库**: 如果你有远程Git仓库(例如阿里云的codeup),可以添加一个新的远程别名,如`...
使用`git svn clone`命令可以将SVN仓库克隆为Git仓库。在以下示例中,我们克隆一个位于`https://192.168.1.60:3690/svn/svn/projectSVN/tzxm/hz_tzxm_root_hlj`的SVN仓库,并将其转换为名为`demo`的Git仓库: ```...
接下来,使用`git svn clone`命令克隆SVN项目到本地的Git仓库: ```bash git svn clone https://svn_project_url/ --no-metadata --authors-file=../users.txt ../bpms-bb ``` 这里的`svn_project_url`替换为实际...
有时,由于项目需求或团队偏好,我们可能需要将SVN仓库的代码迁移到Git仓库。本文将详细介绍如何在Windows和Linux环境下进行这一过程。 1. **获取SVN代码到本地** - 在Windows下,使用`svn checkout`命令将代码从...
3. **克隆svn仓库**:使用`git svn clone`命令克隆svn仓库到本地git仓库。这个过程中,所有svn的分支和标签都将被映射为git的分支。 4. **配置映射**:在某些情况下,可能需要自定义分支或标签的映射规则,这可以...
这个工具是一个脚本,它简化了将svn仓库迁移到git存储库的过程。 `svn2git`通常是由KDE社区开发的一个名为`git-svn`的命令行工具的封装,它使用shell脚本自动化了转换流程。这个脚本可以处理复杂的svn布局,包括多...
标题“svn2git.zip”指的是一个包含用于迁移Subversion(SVN)项目到Git的工具的压缩文件。这个工具称为svn2git,它是一个小型但功能强大的应用,旨在帮助用户平滑地从传统的Subversion版本控制系统过渡到更现代的...
在软件开发过程中,团队可能需要将已有的Git仓库迁移到Subversion(SVN)仓库,以适应不同的协作环境或工具需求。这个过程涉及到多个步骤,确保Git中的所有代码、分支和历史记录都能完整地同步到SVN。下面我们将详细...
使用场景包括但不限于项目需要与使用SVN的团队合作、迁移项目到Git但仍需保留与原SVN仓库的兼容性等。 在安装方面,Mac用户可以通过安装Xcode获得git-svn支持,而Linux用户可以使用包管理工具如apt-get进行安装。...
- --no-metadata:避免将不必要的元数据(例如.svn目录)导入到Git仓库。 - --authors-file:指定作者映射文件,因为SVN与Git在作者信息的处理上有所不同,需要转换。 - --no-minimize-url:不压缩URL,保持路径...
从SVN迁移到Git,意味着系统的源代码和历史记录被迁移到了Git仓库,以利用Git提供的特性,如分支、合并、版本回溯等。 【标签】"Java"表明该系统是用Java语言开发的。Java是一种广泛应用于企业级应用开发的编程语言...
本文将详细讲解如何将SVN仓库带完整历史记录迁移到GitLab。 1. **SVN到GitLab迁移准备** - **用户映射**:首先,你需要建立一个SVN用户到GitLab用户的映射文件。这通常通过导出SVN的历史记录,提取作者信息,去除...
例如,可以使用`git svn clone`命令将SVN仓库克隆为Git仓库,或者使用`git svn dcommit`将Git仓库中的更改推送到SVN仓库中。 - **最佳实践**:在进行迁移时,建议仔细规划并测试,以确保迁移过程中的数据完整性。...
2. SVN仓库迁移到Git SVN到Git的迁移通常是为了利用Git的分布式特性或更强大的协作功能。有两种主要方法: - 直接拉取最新SVN代码,删除.SVN隐藏文件夹,然后用git初始化新的仓库,推送至Gitlab。这种方法简单快捷...
- **导出SVN数据**:使用`git svn clone`命令将SVN仓库数据导入到Git仓库中。 - **处理分支**:映射SVN的分支和标签到Git的相应结构。 - **用户映射**:Git没有SVN的用户概念,需要重新配置权限和身份映射。 - *...
这通常涉及到设置SVN仓库的URL、Git仓库的路径以及任何其他特定于项目的选项。在“svntogit-community”项目中,这可能通过修改脚本或配置文件来实现。 转换过程的核心是使用`git-svn`工具,这是一个集成在Git中的...
- **导入到Git:** 将转换后的SVN仓库导入到Git中。 **SVN迁移到Git:** - **导出SVN历史记录:** 使用svnsync工具或其他第三方工具将SVN的历史记录转换为Git可以理解的格式。 - **导入到Git:** 将转换后的数据...
- **迁移到Git:** 从其他版本控制系统(如SVN)迁移到Git的方法和步骤。 #### 十、Git内部原理 - **Git对象:** 存储在Git数据库中的三种类型的对象——blob、tree和commit。 - **Git引用:** 用于指向Git对象的...