##svn迁移到git

在 Subversion,每个提交者在都在主机上有一个用户名,记录在提交信息中。如果想让这条信息更好的映射到 Git 作者数据里,则需要 从 Subversion 用户名到 Git 作者的一个映射关系。建立一个叫做 user.txt 的文件,用如下格式表示映射关系:

schacon = Scott Chacon <schacon@geemail.com>
selse = Someo Nelse <selse@geemail.com>

通过该命令可以获得 SVN 作者的列表:

$ svn log --xml | grep -P "^<author" | sort -u | \
perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt

它将输出 XML 格式的日志——你可以找到作者,建立一个单独的列表,然后从 XML 中抽取出需要的信息。(显而易见,本方法要求主机上安装了grep,sort 和 perl.)然后把输出重定向到 user.txt 文件,然后就可以在每一项的后面添加相应的 Git 用户数据。

为 git svn 提供该文件可以然它更精确的映射作者数据。你还可以在 clone 或者 init后面添加 --no-metadata 来阻止 git svn 包含那些 Subversion 的附加信息。这样 import 命令就变成了:

$ git-svn clone http://my-project.googlecode.com/svn/ \
--authors-file=users.txt --no-metadata -s my_project

导入之后,你还需要一点 post-import(导入后) 清理工作。最起码的,应该清理一下 git svn 创建的那些怪异的索引结构。首先要移动标签,把它们从奇怪的远程分支变成实际的标签,然后把剩下的分支移动到本地。

要把标签变成合适的 Git 标签,运行

$ cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
$ rm -Rf .git/refs/remotes/tags

该命令将原本以 tag/ 开头的远程分支的索引变成真正的(轻巧的)标签。

接下来,把 refs/remotes 下面剩下的索引变成本地分支:

$ cp -Rf .git/refs/remotes/* .git/refs/heads/
$ rm -Rf .git/refs/remotes

现在所有的旧分支都变成真正的 Git 分支,所有的旧标签也变成真正的 Git 标签。最后一项工作就是把新建的 Git 服务器添加为远程服务器并且向它推送。下面是新增远程服务器的例子:

$ git remote add origin git@my-git-server:myrepository.git

为了让所有的分支和标签都得到上传,我们使用这条命令:

$ git push origin --all

所有的分支和标签现在都应该整齐干净的躺在新的 Git 服务器里了。

Git学习文档之二 应用总结-svn迁移到git相关推荐

  1. Git学习文档之一 学习文档-并行开发

    ##并行开发 ###集成管理员工作流 由于 Git 允许使用多个远程仓库,开发者便可以建立自己的公共仓库,往里面写数据并共享给他人,而同时又可以从别人的仓库中提取他们的更新过来.这种情形通常都会有个代 ...

  2. Git学习文档之一 学习文档-上传下载

    ##上传下载 ###如何上传(推送数据到远程仓库) 项目进行到一个阶段,要同别人分享目前的成果,可以将本地仓库中的数据推送到远程仓库.实现这个任务的命令很简单: git push [remote-na ...

  3. Log4j配置学习文档之二 处理日滚文件-实现原理

    #实现原理 ##处理系统自己log4j定义的日滚日志文件 在系统中使用log4j中的RollingFileAppender和DailyRollingFileAppender可以实现日志文件的滚动,这里 ...

  4. Git学习文档之一 学习文档-合并分支

    ##合并分支 ###新建分支 执行下面命令新建并切换到分支: $ git checkout -b dev 该命令相当于执行了下面的两条命令: $ git branch dev $ git checko ...

  5. Git学习文档之一 学习文档-发布

    ##发布 ###如何发布 发布实际上就是给commit打标签,人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做 ###列出现有标签 运行下面命令显示现有的标签: $ git tag # ...

  6. Git学习文档之一 学习文档-原理

    原理 文件的三种状态 对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged).已提交表示该文件已经被安全地保存在本地数据库中了 ...

  7. nginx学习文档之二 配置负载均衡-负载均衡发现的问题

    #负载均衡发现的问题 用了nginx负载均衡后,在两台tomcat正常运行的情况下,访问http://localhost 速度非常迅速,通过测试程序也可以看出是得到的负载均衡的效果,但是我们试验性的把 ...

  8. nginx学习文档之二 配置负载均衡-linux配置负载均衡

    #linux配置负载均衡 linux下配置tomcat负载均衡和windows下是一样的 安装完nginx后直接修改conf下的nginx.conf文件即可 配置文件如下: #user nobody; ...

  9. nginx学习文档之二 配置负载均衡-windows配置负载均衡

    #windows配置负载均衡 nginx+tomcat负载均衡的意思大概如下图: 所有请求先经过nginx服务器,然后由nginx服务器进行转发,将请求根据配置需要分发给指定的tomcat服务器 ## ...

最新文章

  1. pycharm配置远程调试docker
  2. Java集合:Integer.parseInt() String.substring()
  3. 在线安装非GPU版的tensorflow流程
  4. jQuery 实现菜单
  5. indesign教程,如何转换图形和框架?
  6. 【推荐】一个移动开发的网站
  7. 怎样在计算机上安装计算器,如何在win10系统电脑上重新安装计算器
  8. 精确波段 抄底逃顶指标 通达信/东方财富 副图 源码
  9. GetFlashInfo V7.5_u盘芯片检测工具
  10. java分发_【Java】用注解实现分发器
  11. Unity中Vive Controller手柄模型渲染流程和模型替换
  12. dbus-glib编程2:d-feet的使用
  13. 苹果手机黑屏怎么办,苹果手机不能开机怎么办
  14. 二极管选型-二极管参数介绍
  15. STM32MP157C-DK2->Develop on Arm® Cortex®-A7之 C语言开发uart例程
  16. Spring_7_AOP之Advice应用
  17. CentOS增加虚拟内存
  18. 格式化数据#2:图灵奖(A.M. Turing Award)
  19. CSS flex-direction用法解释
  20. 项目6 创建与使用存储过程

热门文章

  1. 数值计算方法(二)——复化求积公式
  2. Oracle01877,Cognos错误:RQP-DEF-0177 执行操作“sqlOpenResult”(状态为“-28”)时出错...
  3. mysql多个外键删除设置_Mysql在删除集上使用多个外键创建表
  4. python爬虫实现方式_python爬虫的实现方法
  5. 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表
  6. 《深入理解 Spring Cloud 与微服务构建》第十六章 Spring Boot Security 详解
  7. Spring面试之bean作用域
  8. C++手写快读详解(快速读入数字)
  9. UI自动化测试POM设计之-maven工程
  10. salt 文件push使用方法