在 PyCharm 里使用版本控制
軟件開發(fā)是在一定周期內(nèi)完成特定的任務(wù),在這期間要?jiǎng)?chuàng)建許多不同類型的文件,也需要記錄和跟蹤項(xiàng)目中各文件內(nèi)容的修改變化,為了提高效率,我們希望這類操作是自動(dòng)進(jìn)行的,這時(shí)就需要版本控制工具。本節(jié)的主要內(nèi)容是介紹PyCharm 支持哪些版本控制工具,都有哪些常用功能。
1. 版本控制工具介紹
1.1 版本控制工具分類
集中式版本控制工具:
SVN 是該類型代表性工具,這類版本控制工具允許程序員通過(guò)網(wǎng)絡(luò)來(lái)獲取版本庫(kù)中的代碼,并且在修改之后提交回來(lái)。客戶端可以有無(wú)數(shù)個(gè),但是版本庫(kù)所在的服務(wù)端也還是只有一個(gè)。 對(duì)服務(wù)器性能要求高,必須聯(lián)網(wǎng),不適合開源開發(fā)。
每一個(gè)程序員在本地有一個(gè)工作目錄樹,其內(nèi)容是該版本庫(kù)中最新的代碼。當(dāng)他們?cè)诠ぷ髂夸洏渲型瓿纱a修改之后,就把改動(dòng)提交會(huì)該代碼庫(kù)。在本地工作目錄樹中只會(huì)看到代碼的最新版本,如果想要查詢歷史修改記錄,就必須與服務(wù)器上的版本庫(kù)打交道。
分布式版本控制工具:
Git 是代表性工具,分布式版本控制系統(tǒng)通常也有一臺(tái)充當(dāng)“中央服務(wù)器”的電腦,但這個(gè)服務(wù)器的作用僅僅是用來(lái)方便“交換”大家的修改。每個(gè)開發(fā)人員從“中央服務(wù)器” chect out代碼后會(huì)在自己的機(jī)器上克隆一個(gè)自己的版本庫(kù),每一次提取操作,實(shí)際上是對(duì)代碼倉(cāng)庫(kù)的完整備份。向版本庫(kù)提交代碼無(wú)需鏈接遠(yuǎn)程版本庫(kù),所有的歷史記錄都存儲(chǔ)在本地版本庫(kù)中。程序員之間傳遞同步各自的修改是通過(guò) push 操作直接把修改上傳到主版本庫(kù)。
分布式的版本控制系統(tǒng)在管理項(xiàng)目時(shí)存放的不是項(xiàng)目版本與版本之間的差異,它存的是索引( 所需磁盤空間很少,所以每個(gè)客戶端都可以放下整個(gè)項(xiàng)目的歷史記錄),分布式的版本控制系統(tǒng)出現(xiàn)之后, 解決了集中式版本控制系統(tǒng)的缺陷,斷網(wǎng)的情況下也可以進(jìn)行開發(fā)( 因?yàn)榘姹究刂剖窃诒镜剡M(jìn)行的)。
1.2 PyCharm 支持的版本控制工具
PyCharm 支持 以下的版本控制工具 Git、Mercurial、Perforce 與 Subversion
- Git 是一款免費(fèi)、開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項(xiàng)目。作為一個(gè)開源的分布式版本控制系統(tǒng),可以有效、高速的處理從很小到非常大的項(xiàng)目版本管理。適合分布式開發(fā);速度快、靈活,分支之間可以任意切換;離線工作,不影響本地代碼編寫,等有網(wǎng)絡(luò)連接以后可以再上傳代碼,并且在本地可以根據(jù)不同的需要,在本地新建自己的分支。

Tips: Git 是當(dāng)下最為流行的版本控制工具,將在下一小節(jié)具體介紹相關(guān)功能。
- Mercurial 也是一種分布式版本控制系統(tǒng),采用 Python 語(yǔ)言實(shí)現(xiàn),易于學(xué)習(xí)和使用,擴(kuò)展性強(qiáng)。其是基于 GNU General Public License (GPL) 授權(quán)的開源項(xiàng)目。因?yàn)樗怯酶呒?jí)語(yǔ)言編寫的,所以你可以用 Python 函數(shù)編寫Mercurial 擴(kuò)展。
在PyCharm 里使用Mercurial 要提前安裝, 目前只支持 Python 2.7 版本,如果你當(dāng)前是3.0 環(huán)境,需要事先準(zhǔn)備2.7 虛擬環(huán)境。更多細(xì)節(jié)參考 。

- SVN 是 Subversion 的簡(jiǎn)稱,是一個(gè)開放源代碼的版本控制系統(tǒng)。屬于集中式的版本管理系統(tǒng)。用于多個(gè)人共同開發(fā)同一個(gè)項(xiàng)目,共用資源的目的。

在PyCharm 里使用 SVN , 需要 Subversion 插件是生效的。除此以外,PyCharm 目前支持與 Subversion 1.7 及更晚的集成,要求下載并安裝命令行 svn 客戶端。安裝細(xì)節(jié)參考

- Perforce 簡(jiǎn)稱P4, 是一款非常優(yōu)秀的商業(yè)化版本管理工具,真正的客戶端/服務(wù)器系統(tǒng)。許多動(dòng)畫與游戲制作公司會(huì)選擇用它,因?yàn)樾枰4娲罅康?D模型 、紋理等元數(shù)據(jù),其它版本控制工具在處理二進(jìn)制文件相比 Perforce 要弱。

Perforce 只有在 PyCharm 的專業(yè)版里才被支持,另外需要提前在本地安裝 Perforce 客戶端,并使用 Perforce 倉(cāng)庫(kù)創(chuàng)建帳戶。安裝參考官網(wǎng)
2. 啟用版本控制
-
啟動(dòng)版本控制,主菜單
VCS -> Enable Version Control Integration,選擇版本控制工具。

-
將目錄與版本控制系統(tǒng)關(guān)聯(lián)
PyCharm 支持基于目錄的版本控制模型,這意味著每個(gè)項(xiàng)目目錄都可以與不同的版本控制系統(tǒng)關(guān)聯(lián),但通常不會(huì)在一個(gè)項(xiàng)目里用不同的版本工具。
主菜單 PyCharm/File -> Preference/Settings -> Version Control, 配置目錄。項(xiàng)目根目錄會(huì)自動(dòng)被填加, 點(diǎn)擊 + 按鈕,會(huì)彈出 Add VCS Directory Mapping 填加新的目錄與選擇版本控制工具

3. 與遠(yuǎn)程存儲(chǔ)庫(kù)同步
3.1 建立遠(yuǎn)程存儲(chǔ)庫(kù)
以在GitHub 上建立遠(yuǎn)程存儲(chǔ)庫(kù)為例, 打開要共享的項(xiàng)目,VCS -> Import into Version Control -> Share Project on GitHub。 系統(tǒng)會(huì)要求輸入GitHub 帳戶名與密碼,自動(dòng)建立與 GitHub 的連接后,需要指定遠(yuǎn)程存儲(chǔ)庫(kù)名稱、遠(yuǎn)程 的名稱及描述說(shuō)明等等。

選擇要提交的文件,點(diǎn)擊 Add, 完成第一次提交。遠(yuǎn)程存儲(chǔ)庫(kù)建立成功后,團(tuán)隊(duì)成員就可以共享項(xiàng)目了。

3.2 Fetch Change
主菜單: VCS -> Git -> Fetch 。從遠(yuǎn)程獲取更改時(shí),自上次與遠(yuǎn)程存儲(chǔ)庫(kù)同步以來(lái)所做的所有新數(shù)據(jù)將下載到本地副本中。此新數(shù)據(jù)未集成到本地文件中,更改不會(huì)應(yīng)用于當(dāng)前代碼。提取的更改存儲(chǔ)為遠(yuǎn)程分支,我們能夠在將更改與文件合并之前查看它們,然后再把改變合并到當(dāng)前文件根據(jù)需要。具體演示請(qǐng)看下一節(jié) Git 應(yīng)用。
在這解釋一下分支的概念,在代碼開發(fā)中,我們?yōu)榱朔奖惆姹竟芾砗烷_發(fā)、bug修復(fù)等工作,將代碼分開不同的版本,開發(fā)人員使用不同的版本開發(fā)時(shí),看到的文件可以完全不沖突,各自開發(fā)各自的功能。叫做不同的代碼分支。查看當(dāng)前項(xiàng)目分支: VCS -> Git -> Branches 或者點(diǎn)擊 IDE 底部狀態(tài)欄右下角處。

3.3 Pull Change
主菜單: VCS -> Git -> Pull。從遠(yuǎn)程存儲(chǔ)庫(kù)提取更改是獲取更改并隨后將更改應(yīng)用于當(dāng)前分支的方式。提取時(shí),您不僅下載新數(shù)據(jù),還可以將其集成到項(xiàng)目的本地工作副本中。Pull 將更新本地文件,而 Fetch 提取不會(huì)影響本地開發(fā)環(huán)境,因此 Fetch 是獲取遠(yuǎn)程存儲(chǔ)庫(kù)所有更新的相對(duì)安全的方法, 在實(shí)際工作中,我們更推薦用 Fetch + Merge。具體演示請(qǐng)看下一節(jié)Git 應(yīng)用。
3.4 Update Project
主菜單: VCS -> Update Project。如果每次與遠(yuǎn)程存儲(chǔ)庫(kù)同步時(shí)都希望從所有分支獲取更改,這時(shí)用Update Project。執(zhí)行更新操作時(shí),PyCharm 會(huì)從所有項(xiàng)目根和分支獲取更改,并將跟蹤的遠(yuǎn)程分支合并到本地工作副本(等同于 Pull)。
點(diǎn)擊菜單,顯示下面彈出窗口, 選擇更新策略。

4. 在版本工具下管理文件
-
主菜單:
View -> Tool Windows -> Commit, 打開 Local Changes. 可以選擇文件增加/排除到版本庫(kù)。

-
根據(jù) Project 窗口中文件顏色,可知道文件的狀態(tài)。

-
可以在編輯器中修改文件時(shí)跟蹤對(duì)文件的更改。所有更改都用更改標(biāo)記突出顯示在修改行旁邊的側(cè)邊欄處。( 前提是文件已經(jīng)提交過(guò)遠(yuǎn)程存儲(chǔ)庫(kù),然后在本地又更新了文件)

Tips: 當(dāng)文件被提交后,標(biāo)記也會(huì)自動(dòng)消失。 -
如果刪除受版本控制的文件,則在提交更改之前,該文件仍然存在于存儲(chǔ)庫(kù)中。已刪除的文件將放置在活動(dòng)更改列表中,并突出顯示為灰色,直到再次提交,才會(huì)真正刪除。(在"項(xiàng)目"工具窗口中選擇一個(gè)文件,然后按?,或選擇從上下文菜單中刪除, 同樣需要文件提交過(guò)遠(yuǎn)程庫(kù) )。

-
提供多種文件比較方式
- 將修改后的文件與存儲(chǔ)庫(kù)版本進(jìn)行比較
- 將文件的當(dāng)前修訂版與同一分支中的選定修訂版本進(jìn)行比較
- 將文件的當(dāng)前修訂版與其他分支進(jìn)行比較

5. 查看文件更改歷史
PyCharm 提供查看文件更改歷史功能, 可以點(diǎn)擊主工具欄上 Show History 按鈕或者在 Project 工具窗口中的上下文菜單中選擇 Show History,文件的更改歷史記錄將顯示在版本控制工具窗口 Git 的專用歷史記錄選項(xiàng)卡。(View -> Tool Windows -> Git)

6. 擱置和不擱置更改 (Shelve and Unshelve)
Shelve 是版本控制中的一個(gè)概念,就是先把更改臨時(shí)掛起,放在一邊稍后再處理。在實(shí)際工作中,比如有時(shí)候功能只寫了一半,但又有了緊急任務(wù),就可以用 Shelve 把寫了一半的功能掛起,過(guò)后再通過(guò)Unshelve 恢復(fù)代碼繼續(xù)開發(fā)。
Shelve Change
- 在 Local Change 視圖中,右鍵單擊要放入 Shelve 的文件或更改列表,然后從上下文菜單中選擇 Shelve Change。
- 在 Shelve Changes 對(duì)話框中,查看已修改文件的列表。在 Commit Message 字段中,輸入要?jiǎng)?chuàng)建的 Shelve 的名稱,然后單擊 Shelve Changes 按鈕。然后在 Local Change 視圖中會(huì)出現(xiàn)
Shelf Tab。

我們還可以靜默擱置更改(Shelve Silently),而不顯示 Shelve 對(duì)話框。單擊工具欄上的 Shelve Silently 圖標(biāo), 相應(yīng)的 Changelist 移到 Shelf Tab

Tips: 當(dāng)提交成功后,可看一下源代碼恢復(fù)到?jīng)]有更改前的狀態(tài)。
Unshelve Change
Unshelve Change 是 Shelve 的逆過(guò)程, 可以點(diǎn)擊工具欄的按鈕,也可以通過(guò)上下文菜單。Unshelve 后, 在Local Changes 又可以看到對(duì)應(yīng)的 Changelist。查看源代碼更改過(guò)的代碼又恢復(fù)過(guò)來(lái)了。

7. VCS 與 Bug 管理工具集成
在PyCharm,可以將提交消息與 Bug 管理工具連接,從 VCS 日志中直接跳到 Bug 管理工具中。主菜單:Preference/Settings -> Version Control -> Issue Navigation

在提交時(shí), 在提交信息處按照定義的模板寫 BUG ID

點(diǎn)擊 Commit 提交成功后,在版本控制工具 Git 窗口,可以看到提交信息被系統(tǒng)識(shí)別,變?yōu)橐粋€(gè)超鏈接,通過(guò)點(diǎn)擊它直接跳轉(zhuǎn)到 bug 管理工具。

8. 小結(jié)
本節(jié)主要介紹了 PyCharm 對(duì)版本工具的支持,所有截圖都是基于 Git, 如果選擇其它工具作為版本控制工具,可能略有不同。本節(jié)涉及的內(nèi)容比較多,需要不斷在實(shí)踐中才能真正理解,另外里面涉及到一些概念,建議大家看一下Git 官方文檔,也將在下一節(jié)詳細(xì)介紹 Git 在 PyCharm 中的應(yīng)用。

XuXinHong ·
2025 imooc.com All Rights Reserved |