本文翻譯自蘋果Xcode Overview:Save and Revert Changes,敬請勘誤。
Xcode會在您工作時自動保存您對源碼、項目以及工作區文件所做的更改。該功能無需配置,因為Xcode可以持續跟蹤您的更改,並在內存中進行保存。當您執行以下操作時,Xcode會將這些更改寫入磁盤:
構建和運行應用程序;
向源碼倉庫中提交文件;
關閉項目;
退出Xcode;
創建快照。
您也可以選擇File > Save來手動保存更改。
Xcode允許你將文件和整個項目恢復至初始狀態;你也可以拋棄這些更改。您可以使用源碼控制管理來進行精細化的跟蹤。
恢復到文件最後保存的版本
想放棄對文件的所有更改,並使之恢復到最後在磁盤上保存的版本,請選擇File > Revert Document。File > Revert Document命令僅針對有編輯焦點的文件。您可以通過點擊其編輯器面板或者在項目導航器中選中文件來使文件獲得編輯焦點。比如,您試用了新的用戶界面布局,然後決定恢復至此前的布局。或者你需要撤銷一些產生了新問題的代碼更改。
Revert Document命令通常將文件恢復至最後在磁盤上保存的版本。如果您喜歡每次撤銷一個更改,請使用編輯菜單中的Undo命令。
增量式撤銷文件更改(Undo File Changes Incrementally)
想增量地撤銷文件更改,請選擇Edit > Undo change。Undo命令根據你最後的操作有著非常具體的上下文環境。比如,如果您編輯了實現文件會出現Undo Typing命令;如果您在storyboard上添加了按鈕對象,那麼會出現Undo Add Button命令。
通過Undo命令,您可以撤銷對文件的每個更改,一直到您開始編輯會話的版本狀態。當您打開項目時編輯會話開啟,當您關閉項目時編輯會話結束。Xcode允許您撤銷在該會話中所有的編輯操作,即便是已經保存早磁盤的操作。(注意,Revert Document命令可清除所有的Undo操作歷史,並且您無法撤銷一個恢復操作。)
在選擇了Undo命令後,您可以選擇Edit > Redo來恢復最後一次撤銷操作。
使用快照恢復項目范圍內的更改
快照為當前項目版本和工作區的備份提供了一個簡單的方法。如果由於代碼更改造成了程序錯誤,那麼您可以通過快照來恢復整個工作區,包括將所有項目文件恢復到先前的狀態。
快照是項目或者工作區中所有文檔文件,以及所有項目和工作區設置的存檔。快照支持恢復此前的3次更改,而Revert Document和Undo則不支持該特性。
Xcode操作涉及對多個文檔文件和潛在的項目設置的更改。這些操作包括重構代碼,執行項目驗證以及為現有項目添加Automatic Reference Counting等。
調整工作區和項目設置。
全局搜索和替代操作。
您可以通過選擇File > Create Snapshot手動創建快照。
Xcode可以自動創建快照。當您第一次對項目或者工作區做大量更改時,Xcode會提示您為大量編輯操作打開自動創建快照選項。您也可以在項目或者工作區設置偏好中為大量編輯操作配置快照自動創建,選擇File > Project Settings或者File > Workspace Settings。在出現的設置窗口中,選中Snapshots標簽,選中"Create snapshot of project before mass-editing operations"復選框。下圖展示的是沒有選中自動創建快照的設置窗口。
想要在其他情況下將Xcode設置為自動創建快照,請選擇Xcode > Preferences,選中Behaviors面板,同時選擇Create Snapshot選項。比如下圖展示的是當編譯成功時創建快照。創建快照的復選框位於配置行為面板的底部。
想要查看項目或者工作區的快照,請選擇Window > Organizer,選中Projects來打開Projects organizer,並點擊project。
通過從Projects organizer中輸出快照來恢復項目或者工作區之前的狀態。選擇Windows > Organizer,從工作區選中一個項目,選擇快照,並點擊窗口底部的Export Snapshot按鈕。Xcode會展示一個對話框,您可以在此檢查兩個版本之間的不同,左邊是快照版本,右邊是當前版本。
想要輸出快照,請點擊Export,為快照選中一個目標文件夾,並再次點擊Export。
您也可以在工作區窗口選擇File > Restore Snapshot,從而對當前項目恢復快照版本。Xcode會展示一個預覽對話框,您可以通過它檢查當前版本和快照版本之間的區別。點擊Restore選項,Xcode會使用快照版本代替當前項目版本。Xcode會在取代當前版本之前對其拍攝快照。
由於Xcode可以跟蹤所有的項目,甚至是被刪除的項目,並展示在Projects organizer中,所以您可以從快照中恢復已刪除的項目版本。
使用源碼控制儲存和跟蹤更改
使用源碼控制菜單中的命令來管理項目文件源代碼。源碼倉庫將文件的多個版本保存在磁盤上,儲存每個版本的歷史元數據。源碼控制允許您精確地跟蹤文件的更改,而不僅僅是快照。如果您有一個團隊,那麼源碼控制也能幫助您的團隊協同工作。
源碼控制系統可幫你重建項目的過去的舊版本。在您每次進行了重大更改時可將文件提交到倉庫中。如果您在提交的過程中引入了bug,那麼您可以使用Xcode版本編輯器來比較新舊版本之間的區別,從而定位出錯的源碼。
當多人同時操作一個項目時,源碼控制有助於阻止沖突,並在沖突出現時解決問題。請使用核心倉庫保存工程的原版代碼,這樣源碼控制系統會允許每個程序員使用本地副本,而不會損壞原始版本。通過文件檢測系統,您可以確保不會有兩個人同時操作相同的代碼塊兒。如果兩個人同時更改相同的代碼,那麼系統將會幫你合並兩個版本。
您也可以從項目的穩定版本衍生一個分支,添加新的特性,做一些其他更改,以及合並和協調這些更改到項目的穩定版本中。
Xcode支持兩種流行的版本控制系統:Git和Subversion。Subversion (一般簡寫為 svn)是需要專門的服務器,通常在遠程計算機上(當然也可以在本地安裝服務器)。而Git可以單純作為一個本地倉庫,或者你可以在遠程計算機上安裝一個Git服務器以便於團隊成員之間共享代碼。
如果是單人開發項目,使用Git是最簡單的方式,因為無需設置服務器。當創建一個項目時,Xcode會自動配置一個Git倉庫。
除了執行持續集成外,您還可以使用Xcode service托管Git倉庫。
如果您的倉庫托管在服務器上,可選擇Source Control > Check Out來創建項目的本地工作副本。如果您使用了本地Git倉庫,那你無需check out當前使用的副本,因為你的本地倉庫就是您的master copy。
如果您滿意對文件的更改,可選擇Source Control > Commit確保這些更改已被保存到倉庫中。您需要提供注釋解釋您提交的代碼的特性。如果您的Git倉庫托管在服務器上,那麼提交操作會將更改添加到您的本地倉庫中。推送操作可將您提交的更改添加到托管在服務器上的Git倉庫中。比如當你選擇Source Control > Commit時,選中"Push to remote"選項,在彈出菜單中指定遠程倉庫,並點擊Commit Files。
您可以在項目導航器中看到文件的源碼控制狀態,這些狀態在文件名右側以標記(badge)形式展示。
關於連接到源碼倉庫以及其使用方法,請參閱Source Control Management Help
對比文件版本恢復代碼行
選擇View > Version Editor > Show Comparison View來比較保存在倉庫中的不同文件版本。基於倉庫內文件所處的位置使用跳轉欄來選擇文件。每個跳轉欄控制著內容面板中的選擇。想要展示一個版本,可通過在文件層級中浏覽來找到想要的版本,然後點擊選中。陰影區指示版本間的更改。
使用版本時間線基於時間順序來選擇文件版本。點擊中間列底部的Timeline Viewer圖標()來展示兩個編輯面板中的時間軸。在時間軸中上下移動指針來浏覽可用的版本。當發現你想用的版本時,可點擊左側或右側的提示按鈕,從而在對應的編輯器面板展示選中的版本。
您可以在版本編輯器中編輯當前的工作的文件副本。如果你想要恢復版本間的更改,您可以從舊版本中復制代碼並粘貼到當前的版本中。
創建一個分支以杜絕具有風險的代碼更改
當你使用一個工程一段時間後,你可能已經有了一個可靠的穩定的代碼主體,您可以選擇Source Control > Working Copy > New Branch來創建代碼的副本,這樣你可以在新分支上添加新特性或者做其他一些更改,而不會破壞現有的代碼庫。如果滿意所做的更改,那麼您可以將其合並到穩定的代碼主體中。使用Source Control > Working Copy > Merge from Branch和Source Control > Working Copy > Merge into Branch來合並並協調工程不同版本間的差異。