git svn 与svn同步
当前分支: git svn rebase
获取新分支: git svn fetch svn
尽管你可以从网上找到成千上万篇关于Git和git-svn,?0?2 但是本文主要介绍如何在一个以svn作为版本管理软件的项目里使用git。(假如你已经有了git-svn工具, 那我们就开始用git吧!)
先介绍些背景知识, Git 是 Linus Torvalds 为Linux内核开发的一套版本控制软件。他对版本控制有些特殊的要求,但是没有一个能满足他的要求。Git 有两个最大的优点分布式和执行速度快,它的设计不仅有操作简单的分支(branch)还有功能强大的合并(merge).
声明:这并非是唯一“正确”的方式来使用git + svn, 只是我这样用的, 让我们开始吧。
首先: 假设我们有个subversion仓库(repository)在 http://example.com/svn/my_proj. 你需要创建一个git仓库(repo), 从subversion仓库中下载(pull).
git svn init -s http://example.com/svn/my_proj
这个命令是初始化git仓库从远程的svn上下载。 -s 参数表示 svn 仓库具有标准布局(trunk、branches、tags)。
git svn fetch
这个命令是从subversion取得所有的版本信息,在第一次运行的时候等待的时间比较长。当然你可以通过一些参数来控制只取得某些版本信息,但是我喜欢取得所以的历史版本信息。
现在你已经有了trunk所有版本信息,但是其他的分支的信息都在svn服务器上,你可以通过下面的命令查看所有的分支信息
git branch -a
显示了所有的分支信息,也包括远程的分支信息。
现在在你的本地已经有了完整的subversion历史信息,对你的仓库进行打包就显的非常重要。因为每一个版本就是一个单独的文件,下面的命令就是把这些信息打包到一个大的”pack”文件里面。这样你的仓库就会小很多,但是还是会有些小文件。
git repack -d
下一步就是在仓库里面做我们的工作,这里不推荐直接使用主干(master)分支来进行操作,因此我们要创建一个单独的分支new feature.
git checkout -b new_feature
-b 参数创建一个新的分支并切换到这个分支(chackout). 在你有了新的分支后,就可以在这个分支里进行修改或增加文件。如果你增加了文件需要通过下面的命令告诉git,git将自动跟踪这些新文件。
git add path/to/new_file
现在你可以在你的新分支(new feature)里面工作,并且提交到Git. 你的修改并不会自动提交,如果你想提交上面你增加的文件,你有两个选择: 一个是提交所有修改过的文件,另一个是只提交你想提交(部分)的文件。如果你不想比较所有你修改过的文件可以通过下面的命令完成:
git add path/to/edited_file
git add another/edited/file
git commit -m “commit message”
如果你想提交你所有的操作, 并且已经通过git add增加了所有的新文件。可以通过下面的命令实现:
git commit -a -m “commit message”
-a 参数是提交所以的变更.
现在你已经提交到git里面,但是还没有提交到subversion服务器上。应该把你的内容提交到master分支上。你需要先取得master仓库,然后与你创建的分支(new feaure)合并
git checkout master
git merge new_feature
这次合并没有任何冲突(conflicts), 如果有冲突的话,你应该先修正冲突然后在提交。
一旦你提交到master仓库中,就需要让master分支与svn 仓库同步,并且不能有冲突(如果有冲突就必须修正)
git svn rebase
master 分支与subversion 的trunk同步后,就应该把master提交到subversion仓库。
git svn dcommit
上面简单的介绍了从初始化到提交的整个过程。在接下来的几周里,我将研究一下不同的git命令是怎么工作的。下面的是简单的计划:
git reset
git rebase
git log
git stash
git merge
git mergetool
如果我忘记了一些重要的东西? 请让我知道你是怎么使用git svn 的。
公司是用svn的,并且没办法改变了,但git好处那么多,就两个一起用。
和公司代码库的交换还是用svn, git用于本地和同事之间的代码提交
先svn checkout 代码
然后在代码目录git init创建代码仓库
编写.gitingore或.git/info/exclude将不需要加入代码库的文件加进去
然后git add .
再 git commit -m “blablabla…..”
这就ok了。
一般开发会新建一个分支,如:git branch dev
然后git checkout dev转到这个分支进行开发
在需要提交代码到svn时,先切到某个分支,然后提交,再切回来,工作就可以又继续了,哈哈,不错吧
git在合并代码等时候好处真是太多了,分支消耗也少,不像svn得branch就是把整个目录拷贝一次,太慢了。
然后在ubuntu下,我得git是没有配色的,看起来傻傻得,用下面命名给git加点颜色,呵呵
git config –global color.status auto
git config –global color.branch auto
git config –global color.diff auto
git config –global color.grep auto
git config –global color.interactive auto
git config –global color.ui auto
这些都是默认颜色,不过对我来说基本已经够用了。
ps. 显示git提交tree的命令是:
git log –graph –oneline –all
or:
export LESS=”-R”
git log –graph –pretty=oneline –abbrev-commit