iOS-SVN、Git

 版本控制SVN和Git使用詳解
 
 
公司的實際開發中,在天朝使用較多的仍是SVN,由於SVN是集中式的,在天朝上班大家都懂的!
 
 
-----------------svn-----------------
 
 
 
 
 
一:最經常使用基本步驟---
 
  • 下載(完整下載,第一次),將服務器的項目下載到本地開始開發
svn checkout ip —uaerbane=? —password=?     //這裏須要add
簡:co
 
  •  更新倉庫,服務器項目有變更的時候須要更新到本地,以避免錯誤或者衝突
svn updata               //這裏的直接commit就能夠了
簡:up
 
  • 寫代碼。。。。。。。。。。。。。
 
  • 查看狀態
svn  status 
簡:st
 
  • 添加到倉庫
svn add name
 
  • 提交項目

svn commit -m 「註釋"linux

簡:cigit

 
  • 版本回退:錯誤操做,需求更改,查看歷史
svn updata r版本號   //查看回退版本
正式:
    1. svn update
    2. svn merge      -r  版本號(現):版本號(前) name
    3. svn ci -m 「註釋"
 
  • 移除文件
svn remove name
簡:rm
 
 
  • 查看版本號
    1. svn updata      //先更新全部數據
    2. svn log            //打印全部版本
 
 
二:衝突解決--------
 
out of data——
  • —>updata
  • —>commit
(手動解決衝突:postpone):
svn resolved name
 
有效的避免衝突:
  • 先updata->子啊修改文件
  • 或者修改文件以前和同事打招呼
 
 
補充:
當座位一個新⼈人加⼊入(李四進⼊入公司)
1.須要作的事情
    • 和項⺫⽬目經理要svn的服務器地址/svn帳號和密碼 需求⽂文檔 : 當前的需求
    • 接⼝口⽂文檔 : 接⼝口⽂文檔記錄詳細的服務器全部的接⼝口 效果圖 : 界⾯面到底作成什麼樣⼦子

2.將服務器完整的代碼下載到本地程序員

  • svn checkout 服務器地址 ⽤用戶名和密碼
 
3.代碼衝突
    • out of date : 過時
    • df : 在命令⾏行中給展⽰示全部的不一樣的地⽅方
    • e : 在命令⾏行編輯衝突
    • s : 展⽰示可解決衝突的選項
    • mc : 使⽤用個人代碼,來覆蓋服務器代碼
    • tc : 使⽤用服務器的代碼,來覆蓋個人代碼
    • p : 對⽐比全部的版本變化,⼿手動解決衝突—>svn resolved person.h
 
注意:
1>在修改公共⽂文件以前,最好先update,而後再修改 2>在修改公共⽂文件以前,能夠和同事說⼀一聲,先不要修改⽂文件,修改完以後讓同事更 新
 
三:圖形化界面(UI):Cornerstone/Version

 
這裏簡單介紹CornerStone的使用及注意點
 
 --主界面--
 
實用Cornerstone須要注意的幾個地方:
    • 1.查看日誌
找到「Log」選項,選擇並點擊。
查看本身當前的版本是不是最新的,若是不是最新的版本,從第2步開始執行;
若是本身當前的版本是最新的,從第3步開始執行;
    • 2.更新到最新版本
當前程序員在打開工程項目以前,找到「Update to Latest Revision」選項,選擇並點擊。
目的:保持當前程序員客戶端的項目版本是最新的。
    • 3.編輯項目
    • 4.提交以前,再次點擊「Update to Latest Revision」,保持項目是最新版本。
    • 5.更新最新版本後,若是有錯誤,衝突等狀況,解決,直到沒錯誤!
    • 6.提交項目,找到「Commit Changes」選項,選擇並點擊。
目的:把當前編輯後的項目提交的服務器。
    • 7."lock"和「unlock」的使用
當咱們正在編輯某個文件時,爲了防止被其餘人修改,能夠在編輯以前,使該文件處於鎖定狀態,當咱們編輯後,要提交的時候,再解鎖。
    • 8.提交項目,都要寫詳細備註並署名。
    • 9.恢復到之前的版本,之前其餘出錯狀況,請參考稍後的文檔說明或上網搜索。
 
 
最後總結一下使用步驟
 
 

1.項⺫⽬目經理初始化項⺫⽬目 1>項⺫⽬目經理將服務器已有的內容下載到本地github

 
  • 記住選擇正確的svn版本號—>1.7 2>項⺫⽬目經理建立項⺫⽬目到code⽂文件夾 3>項⺫⽬目經理忽略掉⼀一些不須要的⽂文件
  • Xcode會幫咱們記錄當前正在編輯的⽂文件,下次打開時停留在該⽂文件
  • Xcode會幫咱們記錄⺫⽬目錄打開狀況,同事不須要共享 斷點信息同事不須要共享,全部也須要忽略 xcuserdata

2.使⽤用Xcode的svn注意點 1>當項⺫⽬目中若是使⽤用到了靜態庫,必須使⽤用命令⾏行將靜態庫添加到svn管理之下 2>項⺫⽬目中若是使⽤用storyboard,svn的管理也須要特別注意算法

 
  • 若是可使⽤用xib那麼儘可能使⽤用xib 保證同時只有⼀一個⼈人在修改storyboard

3.公司使⽤用svn技巧 儘量修改⽂文件以前要update,寫⼀一些代碼以後就⽴當即提交到服務器 若是今天寫了不少代碼,建議在下班前半個⼩小時就提交.服務器

 
cornerStone中三個基本目錄的含義:tags,branch,truck
 
  • truck主分支,是用來作主方向開發的,一個新模塊的開發,這個時候就放在trunk,當模塊開發完成後,須要修改,就用branch。
  • branch:是用來作並行開發的,這裏的並行是指和trunk進行比較。
  • tag:是用來作一個milestone的,不論是不是發佈版本,但都是一個可用的版本。這裏,應該是隻讀的。更多的是一個顯示用的,給人一個可讀的標記。我們ITOO1.0階段開發完畢,就能夠打一個tag,而後進入2.0的開發。tags的做用是將在branches上修改的bug的代碼合併到trunk上時建立個版本標識,之後branches上修改的bug代碼再合併到trunk上時就從tags的version到branches最新的version合併到trunk,以保證前期修改的bug代碼不會再合併。 

        假設個例子,ITOO1.0開發完成,這個時候要作一個tag,tag_release_1_0,而後基於這個tag作發佈,好比安裝程序等。trunk進入 1.1的開發,可是1.0發現了bug,那麼就須要基於tag_release_1_0作一個分支(branch),branch_bugfix_1_0,基於這 個branch進行bug修改,等到bugfix結束,作一個tag,tag_release_1_0_1,而後,根據須要決定 branch_bugfix_1_0是否併入主幹(trunk)。框架

對於svn還要注意的一點,就是它是全局版本號,其實這個就是一個tag的標記,因此咱們常常能夠看到,什麼什麼release,基於xxx項目的 2xxxx版本。就是這個意思了。可是,它還明確的給出一個tag的概念,就是由於這個更加的可讀,畢竟記住tag_release_1_0要比記住一個 很大的版本號容易的多。svn

        SVN真的是一個很強大的工具,他很好的管理了咱們的團隊合做。工具

 
-----------------git-----------------
 
git中須要注意的幾個命令(名稱)
  • push:提交到服務器
  • pull:更新
  • clone:完整下載
  • commit:本地提交
 一.命令⾏行的演練 
 
1.初始化⼀一個代碼倉庫
  • git init 
 
2.若是使⽤用git必須給git配置⼀一個⽤用戶名和郵箱 給當前的git倉庫配置⼀一個⽤用戶名和郵箱
  • git config user.name 「why」
  • git config user.email 「why@163.com」

配置⼀一個全局的⽤用戶名和郵箱
  • git config —global user.name 「why」
  • git config —global user.email 「why@163.com」 3.初始化項⺫⽬目
  1. touch main.m : 建立了main.m
  2. git add main.m : 將新添加的⽂文件或者修改的⽂文件添加到暫存區
  3. git commit -m 「初始化項⺫⽬目」
  4. git add . : 將全部沒有被添加到暫存區或者代碼倉庫的⽂文件添加到暫存區

注意:⽆不管是新添加的⽂文件或者修改的⽂文件,都須要先經過add命令添加到暫存區中, 以後再經過commit命令添加到本地倉庫中

4.查看⽂文件的狀態 git status
  • 紅⾊色 : 新建立的⽂文件或者被修改的⽂文件,沒有被添加到暫存區
  • 綠⾊色 : 表⽰示⽂文件在暫存區,可是沒有被添加到本地倉庫中 5.給命令起別名
    • git config alias.st 「status」
    • git config alias.ci 「commit -m」
    • git config —global alias.st 「status」

6.git刪除⽂文件 git rm ⽂文件名

7.查看版本號 git log
  • git reflog
  • git config --global alias.lg "log --color --graph -- pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit」 git lg

8.git的版本號是由sha1算法⽣生成40位的哈希值 9.版本回退
  • git reset —hard HEAD : 回退到當前的版本
  • git reset —hard HEAD^ : 回退到上⼀一個版本 git reset —hard HEAD^^ : 回退到上上個版本 git reset —hard HEAD~100 : 回退到前100版本 git reset -hard 版本號(前5位)

                                              
二.團隊開發—共享版本庫
  1. 真實的GIT服務器的搭建,是⾮很是繁瑣的事情(Linux) 
  2. 一個⽂文件夾
  3. 優盤 
  4. 將代碼託管到別⼈人的服務器(Github/OSChina)

1.⽂文件夾做爲共享版本庫 git init —bare

2.項⺫⽬目經理將共享版本庫的內容先下載下來 git clone 地址

3.添加須要忽略的⽂文件
  • touch .gitignore 去github上搜索.gitignore->Objective-C git add .gitignore
  • git commit -m 「添加了須要忽略的⽂文件」

4.項⺫⽬目經理初始化項⺫⽬目
  • git commit -m 「初始化項⺫⽬目」—>提交到本地代碼倉庫

5.將項⺫⽬目push遠程倉庫中 git push origin

6.當源代碼管理是使⽤用GIT,而且在Xcode進⾏行多⼈人開發的操做 注意:當使⽤用GIT,項⺫⽬目中⽤用到了靜態庫就不須要經過命令⾏行進⾏行添加

三.版本備份(瞭解) 1.1.0版本開發完成,以後對1.0版本進⾏行備份
  • git tag -a weibo1.0 -m 「這個是1.0版本」 : 給某⼀一個版本打上標籤
  • git tag : 查看全部的標籤 2.須要將1.0版本的標籤,push到服務器
  • git push origin weibo1.0
3.繼續開發2.0版本
4.發現1.0版本有bug,從標籤⾥裏⾯面clone 1.0版本,從標籤建立⼀一個fixbug分⽀支,在分 ⽀支中修復bug
  • git clone 共享版本庫
  • git checkout weibo1.0(標籤的名稱)
  • git checkout -b weibo1.1fixbug(分⽀支名稱)

5.修復後的版本上傳AppStore/將1.0fixbug進⾏行備份/將1.0fixbug版本和2.0版本 進⾏行合併\
  • git tag -a weibo1.1 -m 「這個是修復了1.0版本bug的1.1版本」
  • git tag
  • git push origin weibo1.1 將⼦子分⽀支中代碼合併到主分⽀支,pull—>weibo1.1fixbug—>push master—>其 它同事更新


6.刪除分⽀支
  • git branch -r
  • git branch -r -d 分⽀支名稱

四.將代碼託管到別⼈人的服務器⾥裏⾯面 1.Github

建立Github上的倉庫
  • 1) HTTPS : http + SSL
  • 2) SSH : 公鑰和私鑰—>settings—>SSH Keys—>⽣生成公鑰和私鑰 刪除代碼倉庫 能夠給別⼈人的代碼提⽐比較功能/對別⼈人的代碼重構:fork—>pull Request issues : 給框架做者提問題
  • 2.OSChina(Github上⾯面項⺫⽬目不能私有化:交錢能夠) 建立代碼倉庫

HTTPS/SSH
.gitignore不夠完整 : ⼿手動添加完成 若是項⺫⽬目想要多⼈人開發:管理—>成員管理—>添加成員:讓新⼈人註冊⼀一個 OSChina

 
圖形化界面(UI):Cornerstone/Version
 
 
 
這裏只大體介紹sourceTree,畢竟在中國Git使用並不常見

SourceTree

做爲一個懶人 Git的命令行我是不太愛的 因此GUI的工具就成了個人首選
Mac下的Git工具真是五花八門 著名的有Tower SmartGit等等(更多能夠看下這裏的介紹)post

今天咱們介紹的是SourceTree 出品方爲Atlassian 旗下的產品還有著名的track工具JIRA Github的競爭者Bitbucket等等(這兩個我也是常常用的 尤爲是BitBucket 支持免費私有倉哦~) 

SourceTree的特色以下

  • 免費
    SourceTree是無償使用的 只要簡單的註冊一下就行了
  • 跨平臺
    Windows和Mac均可以用
  • 完美支持Github和Bitbucket
    我全部Github和Bitbucket上的項目都是用它來管理的 固然 公司的項目也是用SourceTree管理 無不干擾
  • 支持Git Flow
    Git Flow(翻譯版)是一套關於Git的使用實踐 如今已獲得普遍的承認和推廣 若是使用得當 開發管理的過程將變得更輕鬆和清晰
 
 
這是SourceTree的Repo列表界面 也是打開時的默認界面 這裏能夠對全部的Repo進行統一的管理 也支持分組這是SourceTree的Repo詳情界面 這裏是單獨對某個Repo操做的地方 Git的全部操做你均可以在GUI上進行 很是的方便順手
 
具體細節就請本身使用以後慢慢體會吧 這裏就很少介紹了
 
 
-----------------Xcode-----------------
 
上面的SVN和Git其實均可以在Xcode中直接使用,若是你只是簡單的實現提交和更新服務器倉庫裏面的代碼,使用Xcode基本上就能夠實現了,可是有的時候可能Xcode不能知足咱們的要求或者相對比較麻煩,因此咱們通常狀況都不會馬上就選擇Xcode的,除非項目很簡單
 
下面是Xcode一些經常使用的版本控制操做簡單列舉:
 
 選擇對應的選項實現:
 
 
 
 
 提交代碼到服務器代碼倉庫(註釋)
 
 
 
 
 
 若是你看到了這裏,或許你對版本控制已經基本上了解,但或許你也感受有點蒙,可是不要緊,上面這麼多,實際開發中用到的十分之一不到,因此筆者爲你準備了一片簡單的實戰:
相關文章
相關標籤/搜索