这两天响应老板要求,把所有代码放到公司的SVN服务器上,按照我的想法肯定是就苹果组建一个服务器,然后内部版本控制,自带的Xcode就有这个功能,之前也这么做过,但是xcode4.X系列SVN还是很好用,自从升级到Xcode5之后还没弄过。今天试了一下午还是没完全明白,眼看弄不出来,就直接用命令行了,不过一些简单的东西还是试出来了。

SVN从公司服务器 check out项目

iOS开发XCODE5 <wbr>SVN配置 <wbr>使用办法

iOS开发XCODE5 <wbr>SVN配置 <wbr>使用办法

  1. Choose Source Control > Check Out.
  2. Select the repository you want to check out, and click Next.

    You can select your repository from the Repositories tab, the Favorites tab, or the Recents tab. If you know the location of the repository you want to check out, you can also enter the address manually.
  3. If Xcode is unable to automatically identify the trunk and branches, use the browser window to select the correct project location, and click Next.
  4. In the Checkout window, select the branches and working copies to check out, and click Next.

    You will be presented only with the necessary options for your repository. If your project contains only one working copy, you will only have to select the branch to checkout. If your project doesn’t contain branches, you will only be given an option of working copies to checkout. If you project is a single working copy with no branches, this dialog will be skipped entirely.
  5. Select the location to store the working copy, and click Check Out.

2.当有修改时,在Source Control里面可以做点什么,我试了下commit,可以提交到本地,但是没有提交到服务器,中间包括-1012错误,然后配置git用户名跟邮箱。然后填写版本注释,然后就提交,看似提交成功,服务器上却没有。

iOS开发XCODE5 <wbr>SVN配置 <wbr>使用办法


3.Push local changes:我点击了试试,就出来下面这个,我有点疑惑,后来发现人家是

push local changes to a remote git repository 

iOS开发XCODE5 <wbr>SVN配置 <wbr>使用办法

然后我就有点怀疑,难道Xcode自带的SVN的subversion类型不支持提交到服务器这个功能么。

然后看帮助文档,有这么一句。

If you’re using Subversion, a commit operation copies the changes from selected files into the remote Subversion repository. Therefore, you must be connected to the repository before you can commit changes. (For details, see your repository administrator.)

搞了半天不懂see your repository administrator是什么意思。翻译出来是库管理员。我只想说看他有个毛用。我自能默默自嘲英文差。


4.然后我就想着再继续往下看。Updating or Pulling Changes from a Repository

如何更新和提交更改。然后就看到下面的内容。


Update your project with changes from the repository using the Source Control menu.


  • For a Git repository, choose Source Control > Pull.
  • For a Subversion repository, choose Source Control > Update.
  • For a project that contains both Git and Subversion repositories, choose Source Control > Update and Pull.


For projects with multiple repositories, select the ones you want to update.


Resolve differences by using the left and right buttons to specify which file’s contents to use.


After reconciling all differences, click Pull (Git) or Update (SVN) to complete the operation.

打开Source Control就没有找到Pull和Update。本来就英文差,他妈的刚巧就认得这几句,然后就此作罢。大牛莫要嘲笑我,还请告知我是哪里出了问题。

svn client,客户端软件;另一个方法是命令行。One way is using an svn client. The one which is obviously available is the command line svn client.

http://stackoverflow.com/questions/18894195/xcode-5-export-project-to-svn-repository


但是事情不能不做,就在网上找了命令实验了一下,尽可能写的详细点,下次看的时候好懂。随便帮帮跟我一样正在郁闷的人。

1.更改配置(不懂的话就直接跳过吧)

bogon:~ chenshuangchou$

启动配置文件,然后在配置文件中选择要忽略的文件类型

找到 global-ignores 一行,去掉注释,编辑成

global-ignores = build *~.nib *.so *.pbxuser *.mode *.perspective*

# global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo

找到 enable-auto-props = yes 把注释去掉,在[auto-props] Section声明以下文本文件

*.mode* = svn:mime-type=text/X-xcode

*.pbxuser = svn:mime-type=text/X-xcode

*.perspective* = svn:mime-type=text/X-xcode

*.pbxproj = svn:mime-type=text/X-xcode

2.import命令

import到版本库

bogon:~ chenshuangchou$ svn import /Users/chenshuangchou/Desktop/BuickIOS/Buickhousekeeper  https://192.168.21.248:8443/svn/BuickIOS/ -m "initial import"

3.checkout命令

checkout出来,这个目录就相当于被激活,内部跟服务器地址关联。

bogon:~ chenshuangchou$svn checkout https://192.168.21.248:8443/svn/BuickIOS/ /Users/chenshuangchou/Desktop/BuickIOS

4.add命令

add指令,增加到版本库,然后提交

/lastmouth_color1.png 

执行这条指令的前提是/Users/chenshuangchou/Desktop/BuickIOS/是从服务器checkout下来的目录,也就是is a working copy

新增成功的话会有

 (bin)  Desktop/BuickIOS/Buickhousekeeper/ViewControllers/CarViewController/FuelManageViewController/lastmouth_color1.png

5.commit命令

提交内容到版本库

bogon:~ chenshuangchou$ svn commit -m "添加了一个油耗柱状图" /Users/chenshuangchou/Desktop/BuickIOS/Buickhousekeeper/ViewControllers/CarViewController/FuelManageViewController/lastmouth_color1.png

提交到版本库成功的话,

 (bin) Desktop/BuickIOS/Buickhousekeeper/ViewControllers/CarViewController/FuelManageViewController/lastmouth_color1.png

Transmitting file data .

Committed revision 3.

6.update命令

更新版本库到本地,更新指定目录,svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。

bogon:~ chenshuangchou$

更新成功

Updating 'Desktop/BuickIOS1':

   Desktop/BuickIOS1/Buickhousekeeper/ViewControllers/CarViewController/FuelManageViewController/lastmouth_color1.png

Updated to revision 3.

  

bogon:~ chenshuangchou$

回退成功的话

Updating 'Desktop/BuickIOS1':

   Desktop/BuickIOS1/Buickhousekeeper/ViewControllers/CarViewController/FuelManageViewController/lastmouth_color1.png

Updated to revision 2.

冲突

(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件 ,然后清除svn resolved ,最后再提交commit)

在提交时发生版本冲突会怎么样

bogon:~ chenshuangchou$ svn commit -m "在delegate中加入了一句话" /Users/chenshuangchou/Desktop/BuickIOS/

      

      

      Desktop/BuickIOS/Buickhousekeeper.xcodeproj/project.xcworkspace/xcuserdata/chenshuangchou.xcuserdatad/UserInterfaceState.xcuserstate

Transmitting file data ...

Committed revision 4.

bogon:~ chenshuangchou$ svn commit -m "在delegate中加入了一句不同的话" /Users/chenshuangchou/Desktop/BuickIOS1/

      

svn: E160042: Commit failed (details follow):

svn: E160042: File or directory '.git/index' is out of date; try updating

svn: E160024:

 of 

遇到这种情况,应该先从服务器update一下,然后再提交

bogon:~ chenshuangchou$ svn update 

Updating 'Desktop/BuickIOS1':

Conflict discovered in '/Users/chenshuangchou/Desktop/BuickIOS1/.git/index'.

Select: (p) postpone,

      

       (s) show all options: 

在这里会有一个选择,选择(s)会显示所有选项的所有注释,如下

 show all    - show this

 edit             - change merged file in

      

 resolved        

(dc) display-conflict - show all conflicts (ignoring merged version)

   - accept my version for

 - accept their version for

 - mark the conflict to be resolved later。


    

选择一个之后会继续显示冲突点,直到完。而每一个点都会询问怎么处理。

  Desktop/BuickIOS1/Buickhousekeeper.xcodeproj/project.xcworkspace/xcuserdata/chenshuangchou.xcuserdatad/UserInterfaceState.xcuserstate

Conflict discovered in '/Users/chenshuangchou/Desktop/BuickIOS1/Buickhousekeeper/AppDelegate.h'.

Select: (p) postpone, (df) diff-full, (e) edit,

      

      

  

Updated to revision 4.

tf之后,冲突点会被服务器上的代码覆盖,自己本地代码会永久不见。最好先选择postpone,确定之后再修改。

关于冲突,可以参考:http://www.logicaltrinkets.com/wordpress/?p=178

7.status命令

查看文件或者目录状态

svn status path

?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定

svn status -v path

bogon:~ chenshuangchou$ svn status 

    

     Desktop/BuickIOS1/.git/objects/1c/7d8324a67dcd866bd0b4122b01b924a0e77128

     Desktop/BuickIOS1/.git/objects/75/1826a72a4afd4b15faf73a0b6e4166d3bbec01

     Desktop/BuickIOS1/.git/objects/a4/1c23190a65cda6a64a95bef22a9264ad64d90e

     Desktop/BuickIOS1/.git/objects/b3/df5dbb592745d9744adf7a32ed2bb39370c78e

    

    

    

    

    

    

    Desktop/BuickIOS1/Buickhousekeeper.xcodeproj/project.xcworkspace/xcuserdata/chenshuangchou.xcuserdatad/UserInterfaceState.xcuserstate

8.delete命令

svn delete path -m " delete test fle "

删除一个空白的文件夹:

bogon:~ chenshuangchou$ svn delete /Users/chenshuangchou/Desktop/BuickIOS/branches

      

显示删除成功

9.log命令

查看版本记录,也叫日志

bogon:~ chenshuangchou$ svn log /Users/chenshuangchou/Desktop/BuickIOS

------------------------------------------------------------------------

四, 31 10 2013) | 1 line

添加了一个油耗柱状图

------------------------------------------------------------------------

一, 28 10 2013) | 1 line

initial import

------------------------------------------------------------------------

五, 28 

Initial structure.

10.diff命令

将修改的文件与基础版本比较)

在上传版本时,可能有自己版本与服务器版本不一致,需要查看具体代码,这个命令就可以做到

svn diff -r m:n path

m和版本n比较差异

在追溯版本问题时,这个命令也十分有用

bogon:~ chenshuangchou$

--- /Users/chenshuangchou/Desktop/BuickIOS1/Buickhousekeeper/AppDelegate.h (revision 4)

+++ /Users/chenshuangchou/Desktop/BuickIOS1/Buickhousekeeper/AppDelegate.h (working copy)

@@ -6,6 +6,7 @@

//  Copyright (c) 2013年

//测试的很好


+

#import

#import "BMapKit.h"


@@ -15,7 +16,7 @@

- (void)refreshIdeaMessage;


- (void)refreshMaintainMessage;

-@end


11.merge命令

将两个版本之间的差异合并到当前文件

bogon:BuickIOS chenshuangchou$

一般会发生冲突,处理冲突

@@ -4,8 +4,13 @@

//  Copyright (c) 2013年

-//测试的很好

+<<<<<<< .working

+//测试一下

+=======

+//验证版本差异合并

+>>>>>>> .merge-right.r5

12.ls命令

版本库下的文件和目录列表

svn list path显示path目录下的所有属于版本库的文件和目录

bogon:BuickIOS chenshuangchou$

.git/

Buickhousekeeper/

Buickhousekeeper.xcodeproj/

DevOneSDK.framework/

branches/

tags/

trunk/

13.log命令

查看文件详细信息

bogon:~ chenshuangchou$ svn info /Users/chenshuangchou/Desktop/BuickIOS/Buickhousekeeper/AppDelegate.h 

Path: Desktop/BuickIOS/Buickhousekeeper/AppDelegate.h

Name: AppDelegate.h

Working Copy Root Path: /Users/chenshuangchou/Desktop/BuickIOS

URL: https://chensc@192.168.21.248:8443/svn/BuickIOS/Buickhousekeeper/AppDelegate.h

Repository Root: https://chensc@192.168.21.248:8443/svn/BuickIOS

Repository UUID: 9a03820f-37b7-b94a-a594-74c58a350bc6

Revision: 4

Node Kind: file

Schedule: normal

Last Changed Author: chensc

Last Changed Rev: 4

四, 31 10 2013)

四, 31 10 2013)

7aa4033d5fe9f0d4

14.其它命令

svn mkdir :

用法: 1、mkdir PATH...

2、mkdir URL...

svn revert : 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:

用法: revert PATH...

:

被删除的目录

svn switch (sw): 更新工作副本至不同的URL。

用法: 1、switch

   、switch

svn resolved: 移除工作副本的目录或文件的“冲突”状态。

用法: resolved PATH...

:

PATH

svn cat 输出指定文件或URL的内容。

svn cat 目标[@版本]...如果指定了版本,将从指定的版本开始查找。

是上一版本,也可以写具体版本号,这样输出结果是可以提交的)