初学svn

初学svn

从git转svn真是很不愿意,但是没办法公司代码用svn管理的。以下是我个人对SVN的理解,可能不对的地方会有很多,请指正我们一起学习。

SVN简介

SVN是一个集中式的代码管理工具,这里有SVN教程可参考学习。

基础操作

检出

相当于git上的克隆远程代码到本地

svn checkout https://svn.xxx.com:8443/svn/xxx/xxx/ --username=xxx --password=xxx /Users/xx/Documents/xxx/xxx 

svn checkout https://host地址/克隆目录地址 --username=用户名 --password=密码 本地存储路径

检出的时候还可以指定目录检出,分级检出。

提交更改过的代码到服务器

svn status
svn add new.txt
svn commit –m ‘commit’

更新服务器端的代码到本地

svn update

学习笔记

工作流程

日常开发过程其实就是这样的(假设你已经Checkout并且已经工作了几天):Update(获得最新的代码) -->作出自己的修改并调试成功 --> Commit(大家就可以看到你的修改了) 。

典型的工作周期是这样的:

  • 更新工作拷贝

      svn update
    
  • 做出修改

      svn add
      
      svn delete
      
      svn copy
      
      svn move
    
  • 检验修改

      svn status
      
      svn resolved
    
  • 提交修改

      svn commit
    

关于冲突

如果两个程序员同时修改了同一个文件呢, SVN 可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN 会提示文件 Conflict, 冲突,需要手动确认。

解决冲突后需要用

svn resolved xxx.m

这样SVN就知道这个文件不是冲突文件了,会将原来的冲突文件删除保存这个文件。

svn resolved xxx.m

svn commit -m "..."

关于更新版本库

顾名思义,update 操作是用来更新版本库的。这个操作将工作副本与版本库进行同步。由于版本库是由整个团队共用的,当其他人提交了他们的改动之后,你的工作副本就会过期。

让我们假设 Tom 和 Jerry 是一个项目的两个开发者。他们同时从版本库中检出了最新的版本并开始工作。此时,工作副本是与版本库完全同步的。然后,Jerry 很高效的完成了他的工作并提交了更改到版本库中。

此时 Tom 的工作副本就过期了。更新操作将会从版本库中拉取 Jerry 的最新改动并将 Tom 的工作副本进行更新。

关于复查

在 commit 操作之前复查下你的修改是一个很好的习惯。

svn status 查看所有变更的文件列表

svn diff XXX.m 查看某文件的变更记录

Revert 操作

Revert 操作重置了对工作副本的修改。它可以重置一个或多个文件/目录。当然它也可以重置整个工作副本。在这种情况下,revert 操作将会销毁待变更列表并将工作副本恢复到原始状态。

svn revert xxx.m

svn status时,发现将不该修改的文件修改了,可以通过revert撤回修改

当不小心删除了某个文件时,可以通过svn revert撤回。

回到过去

svn checkout --version 1792 # xxx

回去之后怎么切换回来呢?

关于分支

以下是个人关于SVN分支、合作开发的理解

trunk和branches的存在是合理的,甚至还应该有一个tags专门存储每次的上线版本,trunk是版本主线,branches存放暂存的开发分支。各个开发先在branches创建一个文件夹,作为自己的分支branch-mx,然后从trunk让拷贝一份最新的代码到branch-mx里,在这里修改,修改完后将自己的修改合并到trunk上去。

主目录
|
|-- trunk
|
|-- branches
|
|-- branch-ZhangSan
|
|-- branch-LiSi

  • 怎么创建分支?

直接对两个目录进行copy

svn copy -m "Creating a personal branch of ZhangSan" http://svn.example.com/resp/iOS/trunk http://svn.example.com/resp/iOS/branches/branch-zhangsan 

创建完分支后,checkout 到自己的分支上开发。

svn checkout http://svn.example.com/resp/iOS/branches/branch-zhangsan
  • 怎么合并分支?

      //切到主目录
      cd ../iOS/trunk/
      
      //更新主线
      svn update
      		
      //将自己分支的修改合并到主线
      svn merge --reintegrate http://svn.example.com/resp/iOS/branches/branch-zhangsan
      
      //查看合并
      svn status / svn diff / ...
      
      //提交合并
      svn commit -m "..."
    

注意:以下这个步骤是我个人理解,我也不清楚对不对,网友们有说需要将自己的分支删除,那岂不是每次开发前需要重新创建了,很麻烦。

分支合并到主干后,再次开发前需要将自己分支上的内容更新到最新,然后再开始开发

	//进入主trunk目录
	cd ../iOS/branches/branch-zhangsan/
	
	//将主目录的文件merge到自己的分支
	svn merge --reintegrate http://svn.example.com/resp/iOS/trunk/

切换分支命令

svn switch http://svn.example.com/resp/iOS/branches/branch-zhangsan

查看分支详情

svn info

参考

推荐阅读

这个需要从头到尾看完
SVN菜鸟教程

这看至少前面的几章需要看完
SVN使用教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章