git svn 笔记

git svn主要使用流程:
从svn仓库初始化成本地git仓库:
[cce lang=”bash”]
git svn clone -s SVN_URL
[/cce]
注意:SVN_URL是svn仓库的基础目录,不包含trunk,branches这些目录。这里加上一个-s是–stdlayout的缩写,标识svn地址是符合标准svn目录结构的,既有SVN_URL/trunk,SVN_URL/branches,SVN_URL/tags这些目录(当然后面两个目录是非必须的,如果没有,后续拉分支的时候可能会失败)
执行后,整个svn分支上的版本都会重放一边,git生成自己的commit记录,如果分支提交记录比较多,速度会比较慢的,

切换svn分支:
[cce lang=”bash”]
git checkout -b local/local_branch remotes/remote_branch
[/cce]
当然,切换分支之前,可以通过git branch -a或者git branch -r查看svn上的分支,这里显示的分支名称,是SVN_URL/branches目录中的名字。上述切换分支的命令,会在本地创建一个git分支,然后将这个git分支的remote refs设置成远程的svn分支。

提交本地修改:
[cce lang=”bash”]
git commit
git svn dcommit
[/cce]
首先本地是一个git仓库,所以所有的修改,必须先提交到本地的git仓库,然后git svn提供了dcommit命令,可以将本地git仓库修改,提交到远程的svn仓库。
注意:执行svn dcommit之前,需要养成良好习惯,先更新svn分支改动。

更新svn分支改动:
[cce lang=”bash”]
git svn rebase
[/cce]
git svn没有update的概念,因为本地可能有优先于svn仓库。因此,需要采用类似git rebase的概念,先更新svn的提交,然后将git的本地提交重放。所以如果第一个本地提交版本就和svn版本冲突,就等着哭去吧,每次重放可能都要解决冲突,这个时候可能本次再拉一个git分支,采用merge的方式会方便一点。

上面应该是最常用的几个git svn命令,下面是使用过程中一些特殊情况的处理:
创建svn分支:
[cce lang=”bash”]
git svn branch -m “message” BRANCH_NAME
[/cce]
看了命令输出就知道了,这样其实就是执行svn copy操作。当然,需要确保SVN_URL/branches目录存在,因为git svn需要知道分支路径(当然也可以在.git/config文件中修,但总是大家都按照规范来比较方便)。创建svn分支之后,可以再用之前的方式将本地git分支切换并关联到这个新创建的svn分支上。

更新svn信息:
[cce lang=”bash”]
git svn fetch
[/cce]
如果你的项目svn分支不是你拉的,本地git svn clone的又比较早,你会发现新创建的分支在git branch -r中不存在,也就没法切换过去了。这个时候就需要运行git svn fetch命令,将svn仓库变更同步下来,然后才能对新分支进行操作。

合并svn分支
[cce lang=”bash”]
git checkout master
git merge –squash GIT_BRANCH_NAME
git commit
git svn dcommit
[/cce]
和之前说的一样,合并操作需要先合并git仓库。首先先切换到master分支(或者其他引用了svn trunk的git分支),然后进行merge。需要注意的是,merge的时候要使用squash的方式,也就是应用分支改动,但是不修改HEAD。如果直接merge,会把当前分支的远程svn引用也修改,变成svn分支了。然后单独提交,最后提交到svn主干上。

svn目录突然变了:
前段时间配管老是改svn目录,对应git svn引用也需要修改。git svn会在.git/config中增加[svn-remote “svn”]这么一项,里面包含了主干、分支、标签的目录,和svn仓库基础目录。如果原先引用的svn目录变了,这里需要做对应的修改。修改完成后,会发现无法进行git svn rebase操作了,因为远程引用整个变了。没办法,只能先进行git svn fetch,获取新分支,然后重新从新的svn目录中拉分支,进行修改。这样最大的好处,是原先本地git的提交还能够保留。

转载自:https://coolex.info/blog/334.html

时间: 2024-12-03 17:15:43

git svn 笔记的相关文章

git/svn diff可视化工具配置

 以前一直使用svn diff / git diff,看到的都是console下的对比提示. 今天花了点时间找了一款工具,基于GUI的diff操作.   软件 选择的是p4merge , 下载路径: http://www.perforce.com/perforce/downloads/index.html   下载完成后,直接解压缩到 /usr/local/program/p4merge 目录   git diff配置 1. 创建相应脚本 gitmerge.sh脚本: 1.#!/bin/sh 2

GIT学习笔记(一)

由于之前配过CSV使用过SVN,刚接触GIT时不能区分GIT与前类版本控制系统之间的区别,使用对SVN的了解来试图直接使用GIT.但其实两者之间后较大的区别,他们功能相同,实现方式却差异很大. 1.部署差异: 1.1.集中式版本控制系统  SVN与CSV同属于集中式版本控制系统,所谓集中式即进行版本控制权限在服务器上,服务器保存所有文件的修订版,各开发终端只是将服务器上最新的修订版取回,然后提交更改后的版本.终端并不保存文件的所有修订版.  示意图:       这种方式对系统稳定性要求较高,因

Git 学习笔记

  Git/'ɡɪt/,  Linus的第二个伟大作品.Git这个词有点儿意思,Linus自嘲说 "I'm an egotistical bastard,  and I name all my projects after myself. First Linux, now Git. "  感叹我生不逢时,错过了版本控制的"史前黑暗"时代,刚刚接触版本控制,Linus就站在前边,笑嘻嘻的说:"版本控制? 什么是版本控制 .. ".真希望Linus身

Git学习笔记

创建版本库 1 初始化一个Git仓库:git init. 2 添加文件到Git仓库,分两步: 第一步,git add <file>,可反复使用,也可一次添加多个文件. 第二部,git commit -m "commit description",完成. 3 掌握工作区的状态:git status. 4 如果git status告诉你有文件被修改过,用git diff可以查看修改内容. 时光机穿梭 版本回退 1 HEAD指向的版本就是当前版本,Git允许我们再版本的历史之间穿

安装 Git的方法之git入门笔记

gif入门基础 那么,简单地说,Git 究竟是怎样的一个系统呢?请注意,接下来的内容非常重要,若是理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余.在开始学习 Git 的时候,请不要尝试把各种概念和其他版本控制系统(诸如 Subversion 和 Perforce 等)相比拟,否则容易混淆每个操作的实际意义.Git 在保存和处理各种信息的时候,虽然操作起来的命令形式非常相近,但它与其他版本控制系统的做法颇为不同.理解这些差异将有助于你准确地使用 Git 提供的各种工具. 直接

mac上gentoo-prefix系统安装git svn分布式

之前在mac上安装了gentoo-prefix.但是在emerge git的时候,会发现如果增加了subversion这个USE,就会编译失败. 从编译失败的错误上,可以看出,编译失败的来源是svn相关的代码,然后错误是链接的时候提示一些符号找不到:  代码如下 复制代码 Undefined symbols for architecture x86_64:   "_libintl_ngettext", referenced from:       _show_date_relative

Git学习笔记(二)

基本命令:  查看提交历史      git log  版本回退            git reset  查看每一次的命令 git reflog     具体步骤:   添加一句话到readme.txt中,并提交到Git库中.              .                readme.txt在Git中目前有三个版本: 按提交时间先后顺序排列如下: 第一个:wrote a readme.txt 第二个:add distrubuted 第三个:add difficulties 如

Git基础笔记(便查阅)

起步 三种状态 三种状态 已修改 modified 已暂存 staged 已提交 commited 三种工作区域 本地仓库 woking directory 暂存区域 staging area git工作目录 git directory 配置 权限的作用范围 所有用户 etc/gitconfig git config --system .. 当前用户 ~/.gitconfig git config --global .. 当前文件 .git/config git config .. 用户信息 g

SVN笔记

SVN下载地址:http://tortoisesvn.net/downloads SVN操作流程: 1 把SVN服务器上的代码checkout到本地.(checkout操作) 2 将本地的源码更新为服务器上的最新版本.(update操作) 3 将本地源码提交至服务器.(commit操作) 注意: 准备提交时 先右键执行add  然后commit SVN图标的含义: 绿色勾表示该文件正常与服务器一致 红色感叹号表示该文件修改过后未提交 黄色感叹号表示冲突 暗淡的圆形中一个勾表示.此文件只能在加锁后