iOS開發(fā)中使用SVN的正確姿勢

日常開發(fā)中,源代碼管理我們一般使用Git和SVN.本文主要介紹如何在iOS開發(fā)中使用SVN命令行和Xcode對源代碼進行管理,并對"垃圾"文件進行忽略.為了演示更加真實,我們需要搭建一個SVN服務器.

1. Mac環(huán)境下配置SVN服務器

Mac環(huán)境是自帶了SVN客戶端和服務器的功能,如果想配置SVN服務器,我們需要以下步驟:

1.1 創(chuàng)建代碼倉庫

  • 在桌面上創(chuàng)建 /svn 文件目錄,并在svn目錄下創(chuàng)建一個SVN代碼倉庫 /code
  • 在終端輸入指令 svnadmin create /Users/haoshuai/Desktop/svn/code
  • 執(zhí)行成功后,code 文件目錄結構如下:
Snip20170703_1.png

1.2 配置SVN用戶權限

主要配置 svn/code/conf 下的三個文件:

  • 打開 svnserve.conf 文件,將下列配置項前面的 #空格 都去掉.
    # anon-access = read
    # auth-access = write 
    # password-db = passwd    
    # authz-db = authz 
  • svnserve.conf 文件中 anon-access = read配置后面添加一個配置項:anon-access = none.
  • 打開 passwd 文件,在[users]下添加 賬號 和 密碼,例如:
[users]
codeCoder = 123
Tom = 456
  • 打開 authz 文件,配置用戶組:
    [groups]
    iOS_group = codeCoder,Tom
  • authz 文件中配置權限:
[/]
@iOS_group = rw

以上的配置,添加了一個iOS_group用戶組,并給這個用戶組添加了兩個用戶,codeCoder和Tom,他們對代碼倉庫 /code 文件夾里的文件具有讀寫權限.

1.3 啟動和關閉SVN服務器

  • 啟動:

在終端中輸入命令: svnserve -d -r /Users/haoshuai/Desktop/svn 或者 svnserve -d -r /Users/haoshuai/Desktop/svn/code
沒有任何提示表示啟動成功

  • 關閉:

打開活動監(jiān)視器來關閉:


Snip20170703_2.png

2. SVN文件目錄的組織結構

2.1 本地代碼倉庫和遠程SVN倉庫關聯(lián)

  • 在桌面上創(chuàng)建 /local 文件夾,代表本地代碼倉庫.
  • 將svn上的代碼倉庫 checkout 至本地代碼倉庫 cd /Users/haoshuai/Desktop/local svn co svn://localhost/code/ --username=codeCoder --password=123

2.2 svn的目錄組織結構

在代碼導入到SVN之前锭碳,首先需要考慮如何組織糠悯。如果使用一種推薦的布局贩虾,以后的操作將會更容易許多。
我們一般在代碼目錄的頂級建3個子文件夾 /trunk 夏块、 /branches/tags ,分別表示主干,分支,和打包版本:詳細介紹
我們打開命令行,進入本地倉庫并創(chuàng)建三個文件夾,然后提交.

cd /Users/haoshuai/Desktop/local/code 
svn mkdir trunk
svn mkdir branches
svn mkdir tags
svn ci -m'創(chuàng)建目錄結構'

3.首次將代碼上傳至SVN服務器

我們創(chuàng)建好一個示例工程 myProject ,這個工程和我們實際成產環(huán)境的工程基本一致,并且是用cocoaPos來管理第三方庫的,并且已經添加了AFNetWorking這個第三方庫.
先來看一下我們項目的目錄結構:

myProject目錄結構.png

在我們的XCode項目中,一般有一些文件是不需要上傳到服務器的,比如斷點信息,文件夾開合情況等等...如何一勞永逸忽略這些文件呢?
使用 git 時,我們有一個.gitignore文件,初始化項目時加入這個文件,不需要的信息會自動忽略.很 方便 .
但使用 SVN 的時候,就相對 麻煩 了,接下來我們一步一步來完成對SVN的文件的忽略.

  • 模仿gitignore,創(chuàng)建我們自己的 .svnignore 文件

SVN中,我們使用比如 svn propset svn:ignore -R -F .svnignore . 這樣的命令,來對著文件夾下的所有文件進行忽略的屬性設置,需要忽略的類型參數就在 .svnignore 中設置. 以下是我的.svnignore文件的內容

# Build generated
build
DerivedData

# Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata

# Other
*.moved-aside
*.xccheckout
*.xcscmblueprint

# Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

# CocoaPods
Pods

# Carthage
Carthage/Build

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output

# Code Injection
iOSInjectionProject
  • 將項目copy到 /Users/haoshuai/Desktop/local/code/trunk 文件夾中.
cd /Users/haoshuai/Desktop/local/code/trunk
svn status

顯示:
? myProject
說明myProject未處于SVN管理之下,此時,我們 不能 直接運行命令 svn add myPtojcet .,這個命令是遞歸的將 myPtojcet 文件夾下所有文件加入SVN 管理之中,這樣會導致所有的文件的狀態(tài) 都變?yōu)?A (也包括我們要忽略的文件).
舉個栗子:

  • 我們使用這個命令svn add -N myProject/,只將myProject這個文件夾加入SVN管理
QQ20170706-164825.png
  • 依次使用如下命令:
cd myProject/
svn add -N myProject.xcodeproj/
svn add -N myProject.xcodeproj/project.xcworkspace/
svn add -N myProject.xcworkspace/
QQ20170706-171316.png

這里解釋一下,我們想要用svn propset svn:ignore命令來對文件屬性進行忽略,那么這個文件所在的文件夾必須加入版本控制. 例如 myProject.xcodeproj 就是一個文件夾,里面有要忽略的文件,而且在這個文件夾里還有個 project.xcworkspace 文件夾,里面也有要忽略的文件,那我們就要依次將這些文件夾 add 進 版本控制里.

  • 使用svn propset svn:ignore -RF /Users/haoshuai/Desktop/.svnignore .命令對文件夾里的文件進行忽略

我的 .svnignore 文件在桌面上,所以使用這個命令對工程文件里的屬性進行配置.

QQ20170706-172806.png

設置忽略屬性前后的對比


QQ20170706-173300.png
QQ20170706-173328.png
  • 使用svn add . --force命令將其余未忽略的文件加入版本控制

    QQ20170706-173804.png

    可以看到,最終添加的文件都是我們想要添加的文件.

  • 提交,輸入 svn ci -m'項目初始化上傳' 命令提交項目至遠程服務器.

經過以上的設置,我們將一些文件忽略,這樣,如果從服務器上checkout下來新的代碼后,修改代碼,提交文件時,不會將無用的文件移交上去.雖然很麻煩,但是SVN就是這樣,我暫時還沒有找到其他的方法.

4.分支管理

4.1創(chuàng)建分支

svn cp svn://localhost/code/trunk/ svn://localhost/code/branches/br_feature001 -m'create branch'

cd /Users/haoshuai/Desktop/local/code/branches

svn co svn://localhost/code/branches/br_featyre001

4.2合并主干上的代碼至分支

cd /Users/haoshuai/Desktop/local/code/branches/br_feature001

svn merge svn://localhost/code/trunk/

4.3合并分支上的代碼至主干

cd /Users/haoshuai/Desktop/local/code/trunk

svn merge --reintegrate svn://localhost/code/branches/br_feature001

分支合并至主干后,需要刪除分支.

svn rm svn://localhost/code/branches/br_feature001 -m'delete feature001'

5.打標簽 tags

svn cp svn://localhost/code/trunk svn://localhost/code/tags/1.0 -m'1.0 released'
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剃幌,更是在濱河造成了極大的恐慌,老刑警劉巖晾浴,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件负乡,死亡現(xiàn)場離奇詭異,居然都是意外死亡脊凰,警方通過查閱死者的電腦和手機抖棘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人切省,你說我怎么就攤上這事最岗。” “怎么了朝捆?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵般渡,是天一觀的道長。 經常有香客問我芙盘,道長驯用,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任何陆,我火速辦了婚禮晨汹,結果婚禮上,老公的妹妹穿的比我還像新娘贷盲。我一直安慰自己淘这,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布巩剖。 她就那樣靜靜地躺著铝穷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佳魔。 梳的紋絲不亂的頭發(fā)上曙聂,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音鞠鲜,去河邊找鬼宁脊。 笑死,一個胖子當著我的面吹牛贤姆,可吹牛的內容都是我干的榆苞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼霞捡,長吁一口氣:“原來是場噩夢啊……” “哼坐漏!你這毒婦竟也來了?” 一聲冷哼從身側響起碧信,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤赊琳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后砰碴,有當地人在樹林里發(fā)現(xiàn)了一具尸體躏筏,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年呈枉,在試婚紗的時候發(fā)現(xiàn)自己被綠了寸士。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檐什。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弱卡,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情住册,我是刑警寧澤婶博,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站荧飞,受9級特大地震影響凡人,放射性物質發(fā)生泄漏。R本人自食惡果不足惜叹阔,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一挠轴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耳幢,春花似錦岸晦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至店印,卻和暖如春冈在,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背按摘。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工包券, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炫贤。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓溅固,卻偏偏與公主長得像,于是被迫代替她去往敵國和親照激。 傳聞我的和親對象是個殘疾皇子发魄,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容

  • iOS 開發(fā) SVN 版本控制器 更多技術交流請加群 iOS技術聯(lián)盟 27512466 SVN是Subversio...
    Sunny_Fight閱讀 8,746評論 7 63
  • 前言: 1.本文講的是SVN版本控制工具常用功能,包括命令行和界面化操作2.如果想了解GIT使用方式俩垃,請移步這里 ...
    珍此良辰閱讀 17,521評論 10 57
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理励幼,服務發(fā)現(xiàn),斷路器口柳,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 源代碼管理工具-SVN 一. 了解-源代碼管理工具概述 1. 源代碼管理工具的作用?> 能追蹤一個項目從誕生一直到...
    Louis_hey閱讀 11,412評論 1 8
  • 幾乎每一個可測量的心理特質苹粟,包括智商、人格跃闹、藝術能力嵌削、數學能力毛好、音樂能力、寫作能力苛秕、幽默風格肌访、創(chuàng)意舞蹈、體育艇劫、幸福...
    烈日逐風閱讀 260評論 0 0