在 PyCharm 里使用版本控制
軟件開發是在一定周期內完成特定的任務,在這期間要創建許多不同類型的文件,也需要記錄和跟蹤項目中各文件內容的修改變化,為了提高效率,我們希望這類操作是自動進行的,這時就需要版本控制工具。本節的主要內容是介紹PyCharm 支持哪些版本控制工具,都有哪些常用功能。
1. 版本控制工具介紹
1.1 版本控制工具分類
集中式版本控制工具:
SVN 是該類型代表性工具,這類版本控制工具允許程序員通過網絡來獲取版本庫中的代碼,并且在修改之后提交回來??蛻舳丝梢杂袩o數個,但是版本庫所在的服務端也還是只有一個。 對服務器性能要求高,必須聯網,不適合開源開發。
每一個程序員在本地有一個工作目錄樹,其內容是該版本庫中最新的代碼。當他們在工作目錄樹中完成代碼修改之后,就把改動提交會該代碼庫。在本地工作目錄樹中只會看到代碼的最新版本,如果想要查詢歷史修改記錄,就必須與服務器上的版本庫打交道。
分布式版本控制工具:
Git 是代表性工具,分布式版本控制系統通常也有一臺充當“中央服務器”的電腦,但這個服務器的作用僅僅是用來方便“交換”大家的修改。每個開發人員從“中央服務器” chect out代碼后會在自己的機器上克隆一個自己的版本庫,每一次提取操作,實際上是對代碼倉庫的完整備份。向版本庫提交代碼無需鏈接遠程版本庫,所有的歷史記錄都存儲在本地版本庫中。程序員之間傳遞同步各自的修改是通過 push 操作直接把修改上傳到主版本庫。
分布式的版本控制系統在管理項目時存放的不是項目版本與版本之間的差異,它存的是索引( 所需磁盤空間很少,所以每個客戶端都可以放下整個項目的歷史記錄),分布式的版本控制系統出現之后, 解決了集中式版本控制系統的缺陷,斷網的情況下也可以進行開發( 因為版本控制是在本地進行的)。
1.2 PyCharm 支持的版本控制工具
PyCharm 支持 以下的版本控制工具 Git、Mercurial、Perforce 與 Subversion
- Git 是一款免費、開源的分布式版本控制系統,用于敏捷高效地處理任何或小或大的項目。作為一個開源的分布式版本控制系統,可以有效、高速的處理從很小到非常大的項目版本管理。適合分布式開發;速度快、靈活,分支之間可以任意切換;離線工作,不影響本地代碼編寫,等有網絡連接以后可以再上傳代碼,并且在本地可以根據不同的需要,在本地新建自己的分支。
Tips: Git 是當下最為流行的版本控制工具,將在下一小節具體介紹相關功能。
- Mercurial 也是一種分布式版本控制系統,采用 Python 語言實現,易于學習和使用,擴展性強。其是基于 GNU General Public License (GPL) 授權的開源項目。因為它是用高級語言編寫的,所以你可以用 Python 函數編寫Mercurial 擴展。
在PyCharm 里使用Mercurial 要提前安裝, 目前只支持 Python 2.7 版本,如果你當前是3.0 環境,需要事先準備2.7 虛擬環境。更多細節參考 。
- SVN 是 Subversion 的簡稱,是一個開放源代碼的版本控制系統。屬于集中式的版本管理系統。用于多個人共同開發同一個項目,共用資源的目的。
在PyCharm 里使用 SVN , 需要 Subversion 插件是生效的。除此以外,PyCharm 目前支持與 Subversion 1.7 及更晚的集成,要求下載并安裝命令行 svn 客戶端。安裝細節參考
- Perforce 簡稱P4, 是一款非常優秀的商業化版本管理工具,真正的客戶端/服務器系統。許多動畫與游戲制作公司會選擇用它,因為需要保存大量的3D模型 、紋理等元數據,其它版本控制工具在處理二進制文件相比 Perforce 要弱。
Perforce 只有在 PyCharm 的專業版里才被支持,另外需要提前在本地安裝 Perforce 客戶端,并使用 Perforce 倉庫創建帳戶。安裝參考官網
2. 啟用版本控制
-
啟動版本控制,主菜單
VCS -> Enable Version Control Integration,
選擇版本控制工具。
-
將目錄與版本控制系統關聯
PyCharm 支持基于目錄的版本控制模型,這意味著每個項目目錄都可以與不同的版本控制系統關聯,但通常不會在一個項目里用不同的版本工具。
主菜單 PyCharm/File -> Preference/Settings -> Version Control,
配置目錄。項目根目錄會自動被填加, 點擊 + 按鈕,會彈出 Add VCS Directory Mapping 填加新的目錄與選擇版本控制工具
3. 與遠程存儲庫同步
3.1 建立遠程存儲庫
以在GitHub 上建立遠程存儲庫為例, 打開要共享的項目,VCS -> Import into Version Control -> Share Project on GitHub
。 系統會要求輸入GitHub 帳戶名與密碼,自動建立與 GitHub 的連接后,需要指定遠程存儲庫名稱、遠程 的名稱及描述說明等等。
選擇要提交的文件,點擊 Add, 完成第一次提交。遠程存儲庫建立成功后,團隊成員就可以共享項目了。
3.2 Fetch Change
主菜單: VCS -> Git -> Fetch
。從遠程獲取更改時,自上次與遠程存儲庫同步以來所做的所有新數據將下載到本地副本中。此新數據未集成到本地文件中,更改不會應用于當前代碼。提取的更改存儲為遠程分支,我們能夠在將更改與文件合并之前查看它們,然后再把改變合并到當前文件根據需要。具體演示請看下一節 Git 應用。
在這解釋一下分支的概念,在代碼開發中,我們為了方便版本管理和開發、bug修復等工作,將代碼分開不同的版本,開發人員使用不同的版本開發時,看到的文件可以完全不沖突,各自開發各自的功能。叫做不同的代碼分支。查看當前項目分支: VCS -> Git -> Branches
或者點擊 IDE 底部狀態欄右下角處。
3.3 Pull Change
主菜單: VCS -> Git -> Pull
。從遠程存儲庫提取更改是獲取更改并隨后將更改應用于當前分支的方式。提取時,您不僅下載新數據,還可以將其集成到項目的本地工作副本中。Pull 將更新本地文件,而 Fetch 提取不會影響本地開發環境,因此 Fetch 是獲取遠程存儲庫所有更新的相對安全的方法, 在實際工作中,我們更推薦用 Fetch + Merge。具體演示請看下一節Git 應用。
3.4 Update Project
主菜單: VCS -> Update Project
。如果每次與遠程存儲庫同步時都希望從所有分支獲取更改,這時用Update Project。執行更新操作時,PyCharm 會從所有項目根和分支獲取更改,并將跟蹤的遠程分支合并到本地工作副本(等同于 Pull)。
點擊菜單,顯示下面彈出窗口, 選擇更新策略。
4. 在版本工具下管理文件
-
主菜單:
View -> Tool Windows -> Commit
, 打開 Local Changes. 可以選擇文件增加/排除到版本庫。
-
根據 Project 窗口中文件顏色,可知道文件的狀態。
-
可以在編輯器中修改文件時跟蹤對文件的更改。所有更改都用更改標記突出顯示在修改行旁邊的側邊欄處。( 前提是文件已經提交過遠程存儲庫,然后在本地又更新了文件)
Tips: 當文件被提交后,標記也會自動消失。 -
如果刪除受版本控制的文件,則在提交更改之前,該文件仍然存在于存儲庫中。已刪除的文件將放置在活動更改列表中,并突出顯示為灰色,直到再次提交,才會真正刪除。(在"項目"工具窗口中選擇一個文件,然后按?,或選擇從上下文菜單中刪除, 同樣需要文件提交過遠程庫 )。
-
提供多種文件比較方式
- 將修改后的文件與存儲庫版本進行比較
- 將文件的當前修訂版與同一分支中的選定修訂版本進行比較
- 將文件的當前修訂版與其他分支進行比較
5. 查看文件更改歷史
PyCharm 提供查看文件更改歷史功能, 可以點擊主工具欄上 Show History 按鈕或者在 Project 工具窗口中的上下文菜單中選擇 Show History,文件的更改歷史記錄將顯示在版本控制工具窗口 Git 的專用歷史記錄選項卡。(View -> Tool Windows -> Git
)
6. 擱置和不擱置更改 (Shelve and Unshelve)
Shelve 是版本控制中的一個概念,就是先把更改臨時掛起,放在一邊稍后再處理。在實際工作中,比如有時候功能只寫了一半,但又有了緊急任務,就可以用 Shelve 把寫了一半的功能掛起,過后再通過Unshelve 恢復代碼繼續開發。
Shelve Change
- 在 Local Change 視圖中,右鍵單擊要放入 Shelve 的文件或更改列表,然后從上下文菜單中選擇 Shelve Change。
- 在 Shelve Changes 對話框中,查看已修改文件的列表。在 Commit Message 字段中,輸入要創建的 Shelve 的名稱,然后單擊 Shelve Changes 按鈕。然后在 Local Change 視圖中會出現
Shelf Tab。
我們還可以靜默擱置更改(Shelve Silently),而不顯示 Shelve 對話框。單擊工具欄上的 Shelve Silently 圖標, 相應的 Changelist 移到 Shelf Tab
Tips: 當提交成功后,可看一下源代碼恢復到沒有更改前的狀態。
Unshelve Change
Unshelve Change 是 Shelve 的逆過程, 可以點擊工具欄的按鈕,也可以通過上下文菜單。Unshelve 后, 在Local Changes 又可以看到對應的 Changelist。查看源代碼更改過的代碼又恢復過來了。
7. VCS 與 Bug 管理工具集成
在PyCharm,可以將提交消息與 Bug 管理工具連接,從 VCS 日志中直接跳到 Bug 管理工具中。主菜單:Preference/Settings -> Version Control -> Issue Navigation
在提交時, 在提交信息處按照定義的模板寫 BUG ID
點擊 Commit 提交成功后,在版本控制工具 Git 窗口,可以看到提交信息被系統識別,變為一個超鏈接,通過點擊它直接跳轉到 bug 管理工具。
8. 小結
本節主要介紹了 PyCharm 對版本工具的支持,所有截圖都是基于 Git, 如果選擇其它工具作為版本控制工具,可能略有不同。本節涉及的內容比較多,需要不斷在實踐中才能真正理解,另外里面涉及到一些概念,建議大家看一下Git 官方文檔,也將在下一節詳細介紹 Git 在 PyCharm 中的應用。