XCode使用自带SVN,SVN命令
转载http://blog.sina.com.cn/s/blog_68661bd80101phpy.html
这两天响应老板要求,把所有代码放到公司的SVN服务器上,按照我的想法肯定是就苹果组建一个服务器,然后内部版本控制,自带的Xcode就有这个功能,之前也这么做过,但是xcode4.X系列SVN还是很好用,自从升级到Xcode5之后还没弄过。今天试了一下午还是没完全明白,眼看弄不出来,就直接用命令行了,不过一些简单的东西还是试出来了。
1.如何使用Xcode5 SVN从公司服务器 check out项目
Choose Source Control > Check Out.
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.
If Xcode is unable to automatically identify the trunk and branches, use the browser window to select the correct project location, and click Next.
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.
Select the location to store the working copy, and click Check Out.
2.当有修改时,在Source Control里面可以做点什么,我试了下commit,可以提交到本地,但是没有提交到服务器,中间包括-1012错误,然后配置git用户名跟邮箱。然后填写版本注释,然后就提交,看似提交成功,服务器上却没有。
3.Push local changes:我点击了试试,就出来下面这个,我有点疑惑,后来发现人家是
push local changes to a remote git repository
然后我就有点怀疑,难道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。本来就英文差,他妈的刚巧就认得这几句,然后就此作罢。大牛莫要嘲笑我,还请告知我是哪里出了问题。
看了一个问答,XCODE5中怎么上传到SVN服务器,老外给出的结论是:两个办法,一个是用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$ open ~/.subversion/config
启动配置文件,然后在配置文件中选择要忽略的文件类型
找到 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指令,增加到版本库,然后提交
svn add /Users/chenshuangchou/Desktop/BuickIOS/Buickhousekeeper/ViewControllers/CarViewController/FuelManageViewController/lastmouth_color1.png
执行这条指令的前提是/Users/chenshuangchou/Desktop/BuickIOS/是从服务器checkout下来的目录,也就是is a working copy
新增成功的话会有
A (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
提交到版本库成功的话,
Adding (bin) Desktop/BuickIOS/Buickhousekeeper/ViewControllers/CarViewController/FuelManageViewController/lastmouth_color1.png
Transmitting file data .
Committed revision 3.
6.update命令
更新版本库到本地,更新指定目录,svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
bogon:~ chenshuangchou$ svn update /Users/chenshuangchou/Desktop/BuickIOS1
更新成功
Updating 'Desktop/BuickIOS1':
A Desktop/BuickIOS1/Buickhousekeeper/ViewControllers/CarViewController/FuelManageViewController/lastmouth_color1.png
Updated to revision 3.
回退到版本2:
bogon:~ chenshuangchou$ svn update -r 2 Desktop/BuickIOS1/
回退成功的话
Updating 'Desktop/BuickIOS1':
D 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/
Sending Desktop/BuickIOS/.git/index
Sending Desktop/BuickIOS/Buickhousekeeper/AppDelegate.h
Sending 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/
Sending Desktop/BuickIOS1/.git/index
svn: E160042: Commit failed (details follow):
svn: E160042: File or directory '.git/index' is out of date; try updating
svn: E160024: resource out of date; try updating
out of date表示版本过期,可能是由于另外的开发者更新了服务器版本,而本地代码与服务器冲突
遇到这种情况,应该先从服务器update一下,然后再提交
bogon:~ chenshuangchou$ svn update Desktop/BuickIOS1/
Updating 'Desktop/BuickIOS1':
Conflict discovered in '/Users/chenshuangchou/Desktop/BuickIOS1/.git/index'.
Select: (p) postpone,
(mf) mine-full, (tf) theirs-full,
(s) show all options:
在这里会有一个选择,选择(s)会显示所有选项的所有注释,如下
(s) show all - show this list
(e) edit - change merged file in an editor
(df) diff-full - show all changes made to merged file
(r) resolved - accept merged version of file
(dc) display-conflict - show all conflicts (ignoring merged version)
(mc) mine-conflict - accept my version for all conflicts (same)
(tc) theirs-conflict - accept their version for all conflicts (same)
(p) postpone - mark the conflict to be resolved later。
(mf) mine-full - accept my version of entire file (even non-conflicts)
(tf) theirs-full - accept their version of entire file (same)
选择一个之后会继续显示冲突点,直到完。而每一个点都会询问怎么处理。
G 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,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: tf
G Desktop/BuickIOS1/Buickhousekeeper/AppDelegate.h
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/
M Desktop/BuickIOS1/.git/index
? Desktop/BuickIOS1/.git/objects/1c/7d8324a67dcd866bd0b4122b01b924a0e77128
? Desktop/BuickIOS1/.git/objects/75/1826a72a4afd4b15faf73a0b6e4166d3bbec01
? Desktop/BuickIOS1/.git/objects/a4/1c23190a65cda6a64a95bef22a9264ad64d90e
? Desktop/BuickIOS1/.git/objects/b3/df5dbb592745d9744adf7a32ed2bb39370c78e
M Desktop/BuickIOS1/Buickhousekeeper/AppDelegate.h
? Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color1.png
? Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color2.png
? Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color3.png
? Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color4.png
M Desktop/BuickIOS1/Buickhousekeeper.xcodeproj/project.pbxproj
M 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
D Desktop/BuickIOS/branches
显示删除成功
9.log命令
查看版本记录,也叫日志
bogon:~ chenshuangchou$ svn log /Users/chenshuangchou/Desktop/BuickIOS
------------------------------------------------------------------------
r3 | chensc | 2013-10-31 11:34:03 +0800 (四, 31 10 2013) | 1 line
添加了一个油耗柱状图
------------------------------------------------------------------------
r2 | chensc | 2013-10-28 12:00:36 +0800 (一, 28 10 2013) | 1 line
initial import
------------------------------------------------------------------------
r1 | VisualSVN Server | 2013-06-28 17:40:29 +0800 (五, 28 6 2013) | 1 line
Initial structure.
只有两个版本记录,说明第二个版本和第三个版本未添加版本说明,也就是在执行指令时未添加-m ,这个指令是添加注释
10.diff命令
svn diff path(将修改的文件与基础版本比较)
在上传版本时,可能有自己版本与服务器版本不一致,需要查看具体代码,这个命令就可以做到
svn diff -r m:n path
对版本m和版本n比较差异
在追溯版本问题时,这个命令也十分有用
bogon:~ chenshuangchou$ svn diff /Users/chenshuangchou/Desktop/BuickIOS1
--- /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年 calinks. All rights reserved.
//测试的很好
+
#import
#import "BMapKit.h"
@@ -15,7 +16,7 @@
- (void)refreshIdeaMessage;
- (void)refreshMaintainMessage;
-@end
+@end
11.merge命令
将两个版本之间的差异合并到当前文件
bogon:BuickIOS chenshuangchou$ svn merge -r 4:5 /Users/chenshuangchou/Desktop/BuickIOS/Buickhousekeeper/AppDelegate.h
一般会发生冲突,处理冲突
— /Users/chenshuangchou/Desktop/BuickIOS/Buickhousekeeper/svn-1FUb4k 四 10 31 15:36:15 2013
+++ /Users/chenshuangchou/Desktop/BuickIOS/.svn/tmp/AppDelegate.h.tmp 四 10 31 15:36:16 2013
@@ -4,8 +4,13 @@
// Copyright (c) 2013年 calinks. All rights reserved.
-//测试的很好
+<<<<<<< .working
+//测试一下
+=======
+//验证版本差异合并
+>>>>>>> .merge-right.r5
12.ls命令
版本库下的文件和目录列表
svn list path显示path目录下的所有属于版本库的文件和目录
bogon:BuickIOS chenshuangchou$ svn ls https://192.168.21.248:8443/svn/BuickIOS/
.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
Last Changed Date: 2013-10-31 14:04:51 +0800 (四, 31 10 2013)
Text Last Updated: 2013-10-31 14:02:51 +0800 (四, 31 10 2013)
Checksum: 83d8a08d317af33501b650517aa4033d5fe9f0d4
14.其它命令
svn mkdir : 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH...
2、mkdir URL...
svn revert : 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH...
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch --relocate FROM TO [PATH...]
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH...
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
svn cat 输出指定文件或URL的内容。
svn cat 目标[@版本]...如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
XCode使用自带SVN,SVN命令的更多相关文章
- svn 终端命令
你可以仅仅删除冲突的文件并且提交,但是svn resolved除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐你使用这个命令. 恢复本地修改 svn revert [-- ...
- SVN常用命令详解
命令的使用1.检出 svn co http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名 --password 密码svn co svn://路径(目录或文件的全路 ...
- SVN Log命令常用组合【转】
转自:https://blog.csdn.net/xuanwenchao/article/details/8875103 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请 ...
- 使用MacOS自带的SVN客户端
原文链接:https://jingyan.baidu.com/article/5552ef479c1554518ffbc92f.html 摘要:mac环境下有自带的SVN服务端和客户端,SVN是许多公 ...
- 关于SVN常用命令之export
SVN官方命令参考地址:http://www.subversion.org.cn/svnbook/nightly/svn.ref.html 关于export命令 导出一个干净的不带.svn文件夹的目录 ...
- svn上想回滚代码怎么办?——svn merge 命令
小博客断更了很久,最近想接着尝试建立写作的习惯,把自己工作生活遇到的有用知识沉淀下来.尽管微信公共账号比较火,但个人觉得这种不能用搜索引擎检索的东西完全就是历史的倒退,就像 RSS 这种提高信息传播效 ...
- SVN标准命令
SVN标准命令 范例 checkout 检出 svn co URL 检出app/search/news/apache/主干上最新版本到本地工作副本,可执行命令: svn co https://s ...
- 【转】SVN linux命令及 windows相关操作(一)
从以下博客转载和整理: http://www.cnblogs.com/richcem/archive/2011/01/08/1930823.html http://blog.wpjam.com/m/t ...
- SVN基础命令手册
SVN版本号:1.5 及更新版本号 名词说明: WC:Working Copy 你的工作区 Versioned:受控的:受版本号控制的 SVN是什么? SVN是开源的版本号控制系统. 比CVS很多其它 ...
随机推荐
- 你不得不知道的HTML5的新型标签
<article>标签定义外部的内容.比如来自一个外部的新闻提供者的一篇新的文章,或者来自 blog 的文本,或者是来自论坛的文本.亦或是来自其他外部源内容. <aside>标 ...
- NBIbatis 微信框架
微信框架 必须先完成NBIbatis基础框架的[框架配置],本项目才能正常运行. 漂亮会议展示 这是一套漂亮的会议展示完整界面/ ForePages/ HomePage_1210.htm Wechat ...
- 每周一道数据结构(四)A*算法&博弈树α-β剪枝
A*算法/博弈树 前阵子考试学了A*算法.博弈树和回溯,自己真是愚蠢至极,根本没就搞明白这些,所以对于这些算法问道的话就不能说清楚,也记不住,所以才有了这篇笔记.在这里感谢面试我的那位工程师~~ A* ...
- [ACM_图论] Highways (变形说法的最小生成树)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28972#problem/C 题目给出T种情况,每种情况有n个城镇,接下来每一行是第i个城 ...
- Memcached分布式缓存初体验
1 Memcached简介/下载/安装 Memcached是一个高性能的不是内存对象缓存系统,用于动态Web应用以减轻数据库负载.Memcached基于一个存储键/值对的HashMap.其客户端可以使 ...
- 将Eclipse代码导入到AndroidStudio的两种方式
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4183553.html 说到使用AndroidStudio,除 ...
- Mac OS X 系统下自带的文本文件格式转换工具iconv
1. utf-8 转 GBK的方法 在mac bash 中直接运行 iconv -f UTF-8 -t GBK test_utf8.txt > test_gbk.txt 举例:创建测试文件 ec ...
- IOS设计模式浅析之工厂方法模式(Factory Method)
概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口. 如何隔离出这个易变对象的变化,使得系统中“其它依赖该对象的对 ...
- 首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能。(已完善)
package java1; public class Account { String zhanghao; double yue=0; double add; double get; Account ...
- linux下安装小鹤双拼-鹤形
首先安装小小拼音.发现小小拼音真是一个良心软件 http://yong.dgod.net/ 进入下载页面.我是下载 解压版的 解压缩后.放在主目录里.可以改成.yong 隐藏起来 安装步骤(前人栽树, ...