SVN,Git

一.SVN

1.基本操作
  • 下載遠程倉庫到本地(cd目錄下)
    $svn check out 倉庫路徑 --username=用戶名 --password=密碼
  • 查看本地倉庫文件狀態(tài)
    ?-未同步到svn目錄 A-添加的文件 M-修改的文件 D-刪除的文件 C-沖突 R-被替換 |-忽略
    $svn status
  • 添加文件到svn目錄下
    注意:默認情況下,xcode中新建文件都是 A 狀態(tài)的,也就是執(zhí)行隱性執(zhí)行了svn add 但是,有一種情況下,需要手動執(zhí)行該命令,就是靜態(tài)庫.a文件 在xcode中顯示 |-忽略狀態(tài) .a文件(不讓看源碼實現(xiàn)的靜態(tài)庫)在svn中默認被忽略,需要使用svn add 文件名操作手動添加
    $svn add 文件名
  • 提交代碼到遠程倉庫
    $svn commit -m"提交信息" 具體文件名(不寫代表全部)
  • 更新到最新版本
    $svn update
  • 查看版本提交日志
    $svn log
  • 解決版本沖突
    提交之后發(fā)現(xiàn)版本滯后 out of date
    svn update 再svn commit -m"",會報沖突錯誤 diff-full
    此時可以使用三種方式處理 tc(theirs-conflict) mc(mine-conflict) p(postpone)
    tc:使用服務器數(shù)據(jù)覆蓋我的本地數(shù)據(jù),以服務器為準
    mc:使用我的數(shù)據(jù)覆蓋服務器數(shù)據(jù),以我的數(shù)據(jù)為準,然后再svn commit -m"" p:找到?jīng)_突文件,刪除其中三種特殊字符<<<< === >>>>,按需解決沖突,然后svn resolved 文件名(告訴svn解決完沖突了),最后提交$svn commit "解決沖突" 沖突文件名
    可參考:
    http://www.lxweimin.com/p/7d28a0863810
2.Cornerstone使用注意:

xcuserdata文件包含斷點文件夾打開目錄等信息,這個文件在svn使用中可以忽略掉。
具體做法是:
A.第一次提交代碼的時候,點擊ignore(不點commit anyway),然后再commit
B.通過cornerstone刪除兩個xcuserdata開頭的文件,然后commit
C.在xcode中任意改一行代碼,打一個斷點,然后編譯,生成新的xcuserdata
D通過cornerstone找到這兩個新的xcuserdata,右鍵選擇ignore,再次commit
E.完成忽略操作

3.文件結(jié)構(gòu)應用場景

場景:
團隊開發(fā)1.0上線完成之后,著手2.0開發(fā),此時發(fā)現(xiàn)1.0版本有緊急Bug,找?guī)讉€人去修復Bug,在1.0的基礎上發(fā)布1.1版本,然后把修復的內(nèi)容合并到即將發(fā)布的2.0版本中。
解決流程:

我們先了解一下svn三個重要文件夾
trunk
一般存放目前正在開發(fā)的項目文件,主分支
tag
可以理解為項目的里程碑,也可以說是快照,凡是放在tag里的代碼都不變了。凡是放在tag里的代碼都是經(jīng)過測試,認定穩(wěn)定之后才放進去的。
branches
分支
  • A.開發(fā)完1.0版本之后,除打包發(fā)布外,還需要備份(每個發(fā)布版本都需要備份),備份存放在tag文件夾中。
    使用cornerstone的話,在svn服務器端右鍵Tag打標簽,備份到tag文件夾下。
  • B.遇到緊急Bug時,把tag文件夾下的1.0版本創(chuàng)建一個新的1.0fixbug版本放到branches下,然后在該目錄中去修改bug。
    使用cornerstone的話,在svn服務器端tag文件夾中右鍵Branches,在branches文件夾中創(chuàng)建分支。
  • C.修改完bug之后,備份1.1版本文件到tag文件夾中,再把分支代碼合并到trunk主分支。
    使用cornerstone的話,在本地倉庫主分支上點擊merge,選擇branches文件夾中項目進行合并。
  • D.合并完之后可以刪除分支
    使用cornerstone的話,在svn服務器端branches文件夾中delete。

二.Git

1.基本操作
  • git初始化和配置
    初始化一個git本地倉庫(cd到將要創(chuàng)建git倉庫的目錄下)
    git init 配置倉庫的用戶名和郵箱---保存在.git/config文件中git config user.name "zsy"
    git config user.email "zsy@qq.com" 全局配置倉庫的用戶名和郵箱---保存?zhèn)€人/.gitconfig文件中git config --global user.name "zsy"
    git config --global user.email "zsy@qq.com" 優(yōu)先使用自己目錄下的配置信息,如果沒有,使用全局的配置信息。 給git命令操作起別名git config alias.別名 "操作" //eg: git config alias.ci "commit -m"git config --global alias.別名 "操作" //給所有git管理項目git操作起別名
  • git本地提交
    在目錄下創(chuàng)建一個文件main.h,然后查看文件狀態(tài)
    git status main.h顯示紅色,該文件還沒有被git管理,相當于?狀態(tài),需要執(zhí)行 git add main.h
    git add 文件名 --add該文件git add . --add所有文件
    main.h顯示綠色,new file main.h,相當于A狀態(tài),需要執(zhí)行git commit -m"添加main.h" 注意:默認情況下,xcode中新建文件都是 A 狀態(tài)的,也就是執(zhí)行隱性執(zhí)行了git add
    git commit -m"提交信息" 顯示 1 file changed, 1 insertion(+) 修改main.h文件內(nèi)容,狀態(tài)變成紅色 modified main.h,此時需要執(zhí)行git add 操作,再執(zhí)行git commit操作 刪除文件git rm 文件名
    此時main.h文件顯示綠色,deleted: main.h 直接$git commit操作就行
    注意:紅色表示修改不在git暫緩區(qū),需要add操作,綠色表示可以直接提交
  • 查看版本信息
    git log 版本號使用SHA加密git reflog 加強log,可以看到版本回退信息
  • 回退版本
    修改但為未提交狀態(tài),退回上個版本
    git reset --hard HEAD 修改已經(jīng)提交了,退回指定版本 先根據(jù)git reflog 命令查看各個版本號信息
    $git reset --hard 版本號 //版本號指定前5位就行
  • 從遠程倉庫獲取數(shù)據(jù)
    $git clone 路徑
  • 從遠程倉庫拉取代碼
    $git pull
  • 把數(shù)據(jù)推送到遠程倉庫
    $git push
2.文件結(jié)構(gòu)

工作區(qū):.git文件目錄以外的內(nèi)容
版本庫:.git文件目錄信息
.git/config->記錄配置信息
.git/HEAD->指向當前分支
.git/Log->記錄提交信息
git add 是把數(shù)據(jù)提交到暫緩區(qū),git commit是把暫緩去內(nèi)容提交到當前分支。

3.使用xcode+git工作

已經(jīng)擁有git托管的項目,直接clone下來開發(fā):
A.創(chuàng)建空文件夾,在其中克隆項目 git clone 路徑 B.如果沒有.gitignore文件,則創(chuàng)建忽略文件.gitignore并且寫入內(nèi)容https://github.com/github/gitignore/blob/master/Objective-C.gitignore 然后git add .gitignore
然后 git commit -m"添加忽略文件.gitignore" 然后git push
C.配置git信息,用戶名郵箱
git config user.name "用戶名"git config user.email "郵箱"
D.git commitgit pull git push E.解決沖突,直接在Xcode-C標記沖突文件中處理,然后git commit git pullgit push
注意:Xcode中?標記的文件需要使用$git add添加到暫緩區(qū),再提交。

創(chuàng)建倉庫導入已有未被git托管項目(不同的地方是步驟B):
A.創(chuàng)建空文件夾,在其中克隆項目 git clone 路徑 (遠程倉庫為空) B.把項目拖進文件夾中,做一次git add . 操作
C.git commitgit pull $git push

三.區(qū)別

SVN是集中式管理,所有代碼管理都是在服務器端(只有服務器端有代碼倉庫),客戶端只能夠下載服務器端代碼;
Git是分布式管理,除了在服務器端有代碼倉庫外,本地也有代碼倉庫,可進行本地代碼管理;
Git分支管理比SVN更容易;
Git文件每次添加修改之后都需要先執(zhí)行git add,再執(zhí)行git commit操作,而SVN只會在第一次添加執(zhí)行svn add,以后修改直接svn commit

四.應用

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內(nèi)容

  • &開發(fā)過程中離不開源代碼的管理, 目地:為了解決在軟件開發(fā)過程中,由源代碼引發(fā)的各種蛋疼、繁瑣的問題。 目前開發(fā)使...
    早起的蟲兒子被鳥吃閱讀 2,449評論 0 16
  • SVN & Git PS:本文所有$符號之后為在終端中執(zhí)行的命令。 版本控制系統(tǒng) 版本控制 版本控制(Versi...
    羊駝先生丶閱讀 554評論 1 7
  • PS:本文所有$符號之后為在終端中執(zhí)行的命令。 版本控制系統(tǒng) 版本控制 版本控制(Version Control)...
    胡潔川閱讀 530評論 0 1
  • PS:本文所有$符號之后為在終端中執(zhí)行的命令。 版本控制系統(tǒng) 版本控制 版本控制(Version Control)...
    clarkx閱讀 327評論 0 5
  • Git 基礎 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 15,926評論 5 147