一、文檔背景
團(tuán)隊合作是許多現(xiàn)代微控制器開發(fā)項目的基礎(chǔ),而且現(xiàn)如今也有很多團(tuán)隊,分布在世界各地和不同的時區(qū)。如果通過打包壓縮或者電子郵件,將源碼從一個地方發(fā)送到另一個地方,是不方便且不安全的,所以在面對這種分散式工作流時,需要盡可能為客戶提供版本控制系統(tǒng),比如如今廣為人知的git。本文將提供把Git集成在Keil的μvision中的方法,實現(xiàn)如圖1所示。

圖1
二、Keil和Git的集成
(1)、隨便打開一個項目,點擊頂部菜單欄中的“SVCS”欄,接著在下拉框中找到并點擊“Configure Software Version Control ...”,在彈窗中,點擊“...”,選擇官方給出的GIT.SVCS文件。(μVision 5.15 為 Git 提供了一個SVCS 模板文件。它位于安裝目錄(例如 C:Keil_v5UV4)中,名為 GIT.SVCS,對于 5.15 之前的版本,下載地址為:https://developer.arm.com/documentation/kan279/latest/)

圖2
(2)、點擊OK添加完GIT.SVCS文件后,SVCS窗口就會出現(xiàn),如下圖3中的選項,方便我們使用按鈕,來直接調(diào)用相關(guān)的git命令。

圖3
(3)、此時先不要著急直接開始使用這些按鈕,如圖4所示,先找到并打開“Select Software Packs…”,取消掉勾選“Use latest versions of all installed Software Packs.”,因為所選軟件包版本的相關(guān)信息存儲在 Project.uvprojx 文件中,該文件也在使用此工作流程的版本控制之下,所以為了防止攜帶此信息到新環(huán)境后,而導(dǎo)致使用的最新版本不一致的問題,建議把這個選項去掉。

圖4
(4)、本文到這里,默認(rèn)大家已經(jīng)閱讀過:
周邊知識中的《https://alidocs.dingtalk.com/i/nodes/20eMKjyp81Ra5gZyujLrr0QqWxAZB1Gv?utm_scene=team_space》,知道如何安裝Git即可。
FAQ中的《https://alidocs.dingtalk.com/i/nodes/R1zknDm0WR3bOn1mIkmgj260VBQEx5rG?utm_scene=team_space》,知道基本Git的基本操作即可。
(5)、接下來,為了激活keil中按鈕的使用,我們需要先去初始化一下git倉庫,如圖5所示:

圖5
(6)、接著在Github上創(chuàng)立一個遠(yuǎn)程倉庫,比如這里如圖6,取名叫:SVCS-Test。

圖6
(7)、如圖7所示,將創(chuàng)建好的遠(yuǎn)程倉庫的地址:https://github.com/Emdoor-ELEC/SVCS-Test.git,通過Git命令,給遠(yuǎn)程倉庫的HTTPS網(wǎng)址起個別名,方便我們待會直接調(diào)用Keil里的遠(yuǎn)程推送命令。

圖7
(8)、按照圖8中的命令,進(jìn)行添加、提交以及推送我們的工程文件,這也是為了方便我們后續(xù)keil中的操作,所以把最基礎(chǔ)的操作,先用命令行做一遍,后續(xù)就可以完全交給keil來操作了。

圖8
提交完成后,也可以使用 git clone https://github.com/Emdoor-ELEC/SVCS-Test.git命令,把遠(yuǎn)程倉庫里的工程給拷貝到本地,都是可以的,如圖9所示:

圖9
(9)、接下來,我們就可以開始使用Keil中SVCS列表內(nèi)的配置按鈕,來操作我們的項目了。如圖10所示,我們直接點擊Status按鈕,即可查看文件的狀態(tài)。可以看到我們的項目有了一處改動。(打開項目時,μVision 會自動生成一個 uvguix.username 文件,所以該文件被標(biāo)記為未跟蹤,這個不需要管。)

圖10
(10)、點擊添加新組,命名為Document,并往里面添加一個Abstract.txt,隨便往txt中輸入一些內(nèi)容,如圖11所示,然后我們再用SVCS中的Status按鈕來操作一下這個文件,即可看到該文件已被顯示為未跟蹤狀態(tài)。

圖11
(11)、要開始跟蹤(或添加)Abstract.txt,需要我們點擊一下Abstract.txt,使他在項目窗口處是突出顯示的狀態(tài),然后才可以轉(zhuǎn)到SVCS中的Stage“Abstract.txt”,點擊Stage以后,可以看到輸出串口,自動調(diào)用了git add命令,將我們新建的Abstract.txt添加到了暫存區(qū)。

圖12
(12)、此時再用SVCS中的Status去查看工程文件的狀態(tài)時,就發(fā)現(xiàn),Abstract.txt已經(jīng)被添加進(jìn)暫存區(qū)了,目前已經(jīng)處于待提交的一個狀態(tài)了。

圖13
(13)、同樣的,如圖14所示,我們也可以在Blinky.c中刪除一行空行,再通過SVCS中的Status去查看工程文件的狀態(tài),發(fā)現(xiàn)未跟蹤,就再調(diào)用SVCS中的Stage“Blinky.c”,就會被添加進(jìn)暫存區(qū),處于待提交的狀態(tài)了。

圖14
(14)、需要注意的是,ARM官方提供的這個GIT.SVCS文件,是不提供git rm 命令的功能的,因為該命令會從暫存區(qū)域和工作目錄中刪除文件,但該文件又會在μVision 中仍然可見(尤其是在編輯器窗口中打開文件時)。這可能會導(dǎo)致意想不到的行為。要從 μVision 項目和工作資源庫中安全刪除文件,需要執(zhí)行以下操作:
①:在編輯器窗口中關(guān)閉文件。
②:在 "項目 "窗口中,右鍵單擊文件并選擇刪除文件 "MyFile.c"。
③:切換到 Windows 命令外殼,進(jìn)入文件目錄并發(fā)出命令:git rm MyFile.c
這樣,下一次提交時,該文件將消失,不再被跟蹤。如果你在中間修改了文件,并已將其添加到索引中,則必須使用 -f 選項強(qiáng)制刪除。這一安全功能可防止意外刪除尚未成為快照一部分的、且無法從 Git 恢復(fù)的數(shù)據(jù)。
(15)、在我們開始提交(commit)工程到本地倉庫之前,有一個需要注意的事項就是,在git commit 命令之前,要檢查一下項目中是不是有未添加到暫存區(qū)的文件,比如,如圖15所示,可以看到我們的uvoptx文件、uvprotx文件都還沒有被添加到暫存區(qū),需要按照圖16的方式,將這兩個文件加入到暫存區(qū)。

圖15

圖16
(16)、當(dāng)然,不是所有的文件都需要監(jiān)控和添加的,這里我列出官方文檔中需要我們關(guān)注的,和不需要我們關(guān)注的:
需要關(guān)注的:
? 所有用戶生成的源文件(*.c、*.cpp、*.h、*.inc、*.s)
? 項目文件:Project.uvprojx(用于從頭開始構(gòu)建項目)
? 項目選項文件:Project.uvoptx(包含調(diào)試器和跟蹤配置信息)
? 用于多項目工作區(qū)的項目文件:Project.uvmpw
? 復(fù)制到項目中的運行時環(huán)境配置文件(.RTE 以下的所有文件)
? 軟件組件創(chuàng)建的 #includes 列表:RTERTE_Components.h 文件
? 設(shè)備配置文件:例如 RTEDeviceLPC1857RTE_Device.h
? 鏈接器控制文件(Project.sct)(如果是手動創(chuàng)建的)
? 所有相關(guān)軟件包文件(例如 ARM::CMSIS、Keil::Middleware、設(shè)備系列軟件包等)
不需要關(guān)注的:
?項目屏幕布局文件:Project.uvguix.username
? 屬于軟件包部分的所有文件(完整的軟件包將受版本控制,每個用戶在使用軟件包安裝程序安裝時都可使用該文件)
? 在 .Listings 和 .Objects 子目錄下生成的輸出文件
? 調(diào)試適配器的 INI 文件
(17)、接下來,就可以嘗試提交我們的工程到本地倉庫,如圖17所示,可以看到,點擊SVCS中的“Commit staged changes”,會彈出一個提交窗口,我們可以使用這個窗口,來添加這次提交時需要添加的注釋,比如:添加了Abstract.txt,刪除了Blinky.c中的空行。點擊OK,會看到下方的輸出窗口中,keil自動調(diào)用了git commit -m xxxxx命令,幫我們把暫存區(qū)的工程提交到了本地倉庫。并且,下方還顯示了這次提交的工程數(shù)量為4,剛好對應(yīng)上一次使用status時,暫存區(qū)出現(xiàn)的4個文件,并且創(chuàng)建的新文件也是我們手動創(chuàng)建的那個Abstract.txt文件,都是對應(yīng)的。

圖17
(18)、最后,當(dāng)項目達(dá)到可以與他人共享的程度時,就可以將其推送到上游(版本庫服務(wù)器),也就是github上了(或者有寫入權(quán)限的服務(wù)器上)。如圖18所示,點擊SVCS中的“Push Commits to server”,即可在輸出窗口看到,keil自動調(diào)用了git push origin master的命令,該命令里的origin,就是我們在第七步中,創(chuàng)建好的遠(yuǎn)程倉庫的地址。隨即我們可以轉(zhuǎn)到github倉庫去進(jìn)行驗證,發(fā)現(xiàn),我們的更改確實被推送上去了,也正好是我們修改的4個文件,現(xiàn)象也是完全對應(yīng)的。

圖18
(19)、要從遠(yuǎn)程服務(wù)器拉取最新版本,請調(diào)用SVCS中的“Pull latest version from server”,即可將遠(yuǎn)程倉庫中的變更拉取到本地,如圖19所示,我在github上的遠(yuǎn)程倉庫中加了一個txt文件,隨后在Keil中測試?yán)」δ埽谳敵龃翱诤臀募A中,可以看到,已被拉取到本地。

圖19
三、討論分析
問1:集成只能使用官方提供的文件嗎?是否支持更多的相關(guān)功能?
答1:集成功能并不限于官方文件,可以自行更改,如圖20所示,分割線、按鈕、按鈕對應(yīng)的git命令,都是我們可以自定的,只要按照相同的格式去添加,即可實現(xiàn)對應(yīng)功能。也可以如圖22一樣,在軟件內(nèi)按照進(jìn)行快速修改。

圖20

圖21
問2:為什么還有很多按鈕沒有講解?
答2:此文檔僅以實現(xiàn)基礎(chǔ)操作為目標(biāo),具體更多的繁復(fù)功能,不予進(jìn)行詳細(xì)的講解,自行按照官網(wǎng)文檔探索學(xué)習(xí)即可,官方下載鏈接為:https://developer.arm.com/documentation/kan279/latest/
四、結(jié)論
該功能在一定程度上彌補(bǔ)了keil軟件中沒有g(shù)it功能的空缺,且給予了開發(fā)人員較大程度的自由度,去自行配置使用git命令。并且通過加載SVCS文件的方式,將命令以按鈕的形式,加載到了軟件IDE界面中,極大的方便了用戶在使用分散式工作流時的團(tuán)隊合作。

首頁 > 資源中心 > FAQ
