顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [Xcode][Swift3] 使用 Git 版本控制系統
時間 2017-03-19 Sun. 23:25:31


Git 是現在最多人使用的分散式版本控制系統
對於多人合作或是一個人開發都有很大的幫助
值得花點時間研究一下

Xcode 已經有內建圖型化的 Git 版本控制功能
而且在開新專案的時候就已經自動建立好 Git 初始化了
很適合作為 Git 入門

只要在程式碼修改告一段落的時候,使用 Commit 提交記錄
之後隨時可以比對每次 Commit 之間程式碼的差異
當程式有問題時可以很容易的將部份程式碼回復到之前的狀態

還可以開 Branch 使程式碼的開發過程有不同的分支
隨時可以切換到另一個分支來開發
等某個分支開發完成時再合併到主要的分支上


使用 Git 開新專案

開一個測試用的專案來試試看 Git 的功能
新的專案選擇「Single View Application」

專案名稱輸入「GitExample」
[圖]


存檔時預設就會勾選「Greate Git repository on My Mac」
[圖]


建立好的專案資料夾中會有個隱藏的「.git」資料夾
這個叫做 Git repository
Git 的相關記錄都是放在這個資料夾裡面

因為是隱藏的,用 Finder 預設看不到
可以按 command+shift+. 顯示隱藏檔
[圖]


專案建立好的時候,Xcode 就自動做好第一次 Commit 了
可以點上方功能表的「Source Control」/「History...」
[圖]


查看 Commit 記錄,已經有 Commit 一次了
[圖]



在已建立的專案加上 Git

如果專案在建立的時候沒有選擇「Greate Git repository on My Mac」
只要點「Source Control」/「Create Working Copy...」
[圖]


選擇專案後按「Create」
[圖]

就會在專案目錄下加上 .git 資料夾
並且自動執行一次 Commit 了


使用 Commit 提交記錄

修改一下程式來自己 Commit 看看

修改 ViewController.swift
在類別裡加上一個成員函數 sayHello()
    func sayHello() {
        print("Hello World!")
    }

然後在成員函數 viewDidLoad() 裡執行
        sayHello()

修改好程式後,過一會會在程式檔的右邊看到被標了一個「M」符號
[圖]

代表這個檔案從上一次 Commit 後有修改過

現在來使用 Commit 提交新的記錄
點上方功能表的「Source Control」/「Commit...」

會出現 Commit 確認視窗
[圖]

左欄會列出有修改過的檔案,若有檔案不想加進記錄的可以取消勾選
點一下檔案後,右欄會列出程式碼有修改過的地方
左邊的程式碼是目前修改過的,右邊的程式碼是上一次 Commit 時的

中間列了 1 和 2 是代表第幾個修改過的地方
旁邊打勾代表要記錄這個修改,取消勾選代表這邊不要加進記錄

點擊數字右邊的下拉選單
[圖]

可以選擇「Don't Commit」這個地方不要加進記錄,
或是「Discard Change」捨棄這個變更,程式碼會被改回上次 Commit 的記錄

確認好要 Commit 的地方後,下方可以對這次的 Commit 加上說明
例如寫上「測試看看 Commit,加上了一個 sayHello() 的功能」
這樣之後看記錄就知道這次 Commit 做了什麼事情了
最後按「Commit 1 File」即可完成提交記錄

可以注意到檔案右邊的「M」符號消失了

再看一下「Source Control」/「History...」
[圖]

可以看到多了一筆記錄了


選原程式碼至上一次 Commit 記錄

Commit 後就可以放心的對程式碼做任意的修改測試
可以在專案設定修改參數、在 storyboard 調整元件、或刪除檔案
只要點一下「Source Control」/「Discard All Changes...」
[圖]

就可以將專案完全回復至上一次 Commit 的狀態了

如果只有要將單一檔案回復的話,
在檔案右邊出現「M」符號後,選取檔案
點選「Source Control」/「Discard Changes in Selected Files...」即可
[圖]



不過要注意 Discard Changes 的變更就無法再復原囉
點下去後 Xcode 會再次確認
[圖]



還原部份程式碼至某次 Commit 記錄

若是想要查看之前的 Commit 記錄,或是回復部份變更的話
可以點右上角的「version editor」
[圖]

右邊會顯示上一次 Commit 時記錄的程式碼
因為我們剛剛才 Commit 所以沒有任何變更

可以點右下角的時鐘,換成第一次 Commit 的版本
[圖]

點中間的 1 或 2 的下拉選單,可以選「Discard Change」
將該處程式碼還原為第一次 Commit 的版本

Xcode 目前沒有提供直接回復至上上次之前 Commit 的功能
只能將變更的地方一個一個的點選還原

真的想完全回復至某次 Commit 的話,可以在終端機使用指令模式
$ cd ~/xcode/GitExample/
$ git reset --hard 7d7e500
強制將整個專案還原至 7d7e500 時的記錄

注意這樣 7d7e500 之後的 Commit 記錄也都會消失了


在 Git 新增檔案

再來試試看新增檔案
點 Command+n 新增一個 Cocoa Touch Class
Class: TestClass
Subclass of: NSObject
[圖]


可以看到檔案右邊有個「A」的符號,代表這是新增的檔案
[圖]


執行 Commit
[圖]

可以看到有兩個檔案需要加進記錄
因為新增檔案後專案設定會改變,所以也要記錄專案的改變

點 TestClass.swift 右邊只有顯示目前的程式碼
因為是新增的檔案,之前的 Commit 記錄沒有這個程式碼

下方輸入 Commit 註解後,點「Commit 2 Files」


新增分支 Branch

當想要測試新功能,但又怕把本來的程式弄壞
希望隨時可以換回本來的程式
這時就可以使用分支的功能

點「Source Control」,可以看到目前使用的分支為「master」
選擇「New Branch...」新增分支
[圖]


輸入分支名稱為「TestBranch」,按「Create」
[圖]

建立好新的分支後會自動切換至新的分支
程式碼還沒 Commit 的修改也會移至新的分支

修改程式看看,在 ViewController.swift,加上成員函數
    func testBranch() {
        print("This is test Branch!!")
    }

接著切換回分支 master 看看
切換分支前要先 commit 才能切換

執行 commit 後,
點「Source Control」/「TestBranch」/「Switch to Branch...」
[圖]


選擇分支「master」後,點「Switch」
[圖]


可以看到剛剛新增的成員函數 testBranch() 消失了
程式碼回到了分支 master 最後一次 commit 的記錄

此時可以在分支 master 同步做其他的修改
例如加上一個成員函數
    func testMaster() {
        print("This is master Branch!!")
    }

執行 Commit
此時分支 master 與分支 testBranch 有了不同的修改記錄
可以使用 version editor 來比較各分支的差異

打開 version editor,右下角選擇分支 TestBranch 的最新記錄
[圖]

可以看到兩邊各自有新增的成員函數


使用 merge 合併兩個分支

當分支 testBranch 的程式寫好沒什麼問題後,
想要將變更合併到分支 master

可以在分支 master 執行 Commit 後,
點「Source Control」/「master」/「Merge from Branch...」
[圖]


選「TestBranch」後,點「Merge」
[圖]


此時檔案的變更可能會衝突,
要調整分支 TestBranch 要怎麼分併進來
[圖]

每項變更有四種選項:
先左再右、選左邊、選右邊、先右再左

依照需求調整要怎麼分併後,點「Merge」
即可將分支 TestBranch 的修改合併至分支 master 了


從某次 Commit 記錄開新分支

如果忽然想要回到以前某次 Commit 的狀態另外開發,
但又不想捨棄現在的開發記錄,隨時還想要再切換回來
這時可以從某次 Commit 再開一個分支出來

不過 Xcode 沒有提供這個功能,要在終端機使用指令模式才行

例如我想從第二次 Commit 加上 sayHello() 功能時開新分支,
新的分支叫做 testSayHello

先在 History 複製 Commit 編號 c4ea354
[圖]


在終端機執行
$ cd ~/xcode/GitExample/
$ git checkout -b testSayHello c4ea354

回到 Xcode
可以看到專案的程式碼已回復到第二次 Commit 的狀態,
並且已切換到 testSayHello 分支

想要回到之前的開發進度時,再切回分支 master 即可


出現 Missing Files warnings

Xcode 的 bug,當刪除或更改檔案名稱前沒有先 Commit 的時候可能會發生
在檔案的右邊會顯示一個驚嘆號

參考 StackOverflow
使用終端機在專案目錄執行以下指令即可
$ git add .



想要將程式碼上傳至 GitHub 與其他人共用的話,請看下一篇
[Xcode][Swift3] 將專案上傳至 GitHub 與其他人共同開發 - KnucklesNote板 - Disp BBS

想要加上 .gitignore 檔略過部份檔案的話,看這篇
[Xcode][Swift3] 新增 .gitignore 略過不需加入 git 的檔案 - KnucklesNote板 - Disp BBS


參考
CocoaChina 在Xcode中使用Git进行源码版本控制
RayWenderlich How To Use Git Source Control with Xcode in iOS 7



--
※ 作者: Knuckles 時間: 2017-03-19 23:25:31
※ 編輯: Knuckles 時間: 2017-05-23 00:17:36
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 1878 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇