使用git管理嵌入式軟件版本
掃描二維碼
隨時(shí)隨地手機(jī)看文章
點(diǎn)擊上方藍(lán)字關(guān)注我哦~
你現(xiàn)在的Keil工程的版本控制是怎么管理的?可能有些人的做法是發(fā)布一個(gè)版本軟件后將代碼打一個(gè)包保存起來(lái),作為此版本的備份。有一種常見(jiàn)的情況,當(dāng)開(kāi)始一項(xiàng)新功能的開(kāi)發(fā),并且最終的效果不理想老板要求回退回去。又恰巧在開(kāi)發(fā)前沒(méi)有打個(gè)包保存一下初始版本,那就需要一處一處回改,這樣手工回退后的版本可靠性就下降許多,需要完整的測(cè)試才行。為了避免這種尷尬的情況,有必要在keil工程也引入版本控制工具。
Git是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理。Git 是 Linus Torvalds (Linux發(fā)明者)為了幫助管理 Linux 內(nèi)核開(kāi)發(fā)而開(kāi)發(fā)的一個(gè)開(kāi)放源碼的版本控制軟件。這個(gè)誕生于2005年并且至今都使得開(kāi)發(fā)者贊不絕口的工具,實(shí)際上Linus僅開(kāi)發(fā)了兩周并在一個(gè)月內(nèi)就上線用于管理龐大的Linux內(nèi)核了,不得不贊嘆天才的偉大和凡人的不可企及。
時(shí)至今日,Git早已在Android開(kāi)發(fā)、Linux開(kāi)發(fā)、web開(kāi)發(fā)等場(chǎng)景成為最通行的版本管理工具,另外一些IDE集成開(kāi)發(fā)環(huán)境也加入了Git,例如Android Studio, Intellij IDEA等。嵌入式開(kāi)發(fā)常用的Keil也在keil5.15后也已經(jīng)集成了版本管理工具,但是本文仍然是就Windows版Git管理Keil工程的示例,方便老版本的keil項(xiàng)目建立git管理。Keil5內(nèi)集成的git的使用方法有機(jī)會(huì)再整理出來(lái)。
Git的實(shí)用性也逐漸帶來(lái)了git托管平臺(tái)的流行,如GitHub、GitLab、Bitbucket、Codeing.net、Gitee等。無(wú)數(shù)崇尚軟件開(kāi)源的開(kāi)發(fā)者揮灑著汗水在這些平臺(tái)上貢獻(xiàn)了數(shù)以億計(jì)的開(kāi)源項(xiàng)目,使得咱們這些普通人可也以參與其中,接觸到最前沿的技術(shù)、最酷炫的功能。身為一個(gè)開(kāi)發(fā)者也要學(xué)會(huì)在開(kāi)源代碼上汲取這些全球精英所奉獻(xiàn)的新知識(shí)新技能。
關(guān)于Git的使用方法,可以參考廖雪峰的git教程,深入淺出非常實(shí)用。在這篇文章中主要講的是將一個(gè)既有的Keil工程加入git管理的方法。
01
安裝windows版git
可以去官網(wǎng)下載windows版本的git, https://git-scm.com/downloads
安裝完成后,在開(kāi)始菜單內(nèi)找到Git Bash并啟動(dòng)。啟動(dòng)后的操作窗口類(lèi)似于windows的cmd窗口。在bash窗口內(nèi)可以執(zhí)行Linux的一些shell指令。
安裝完成后,還需要設(shè)置郵箱地址和用戶名,在命令行輸入:
"Your Name" git config --global user.name
"email@example.com" git config --global user.email
因?yàn)镚it是分布式版本控制系統(tǒng),可以多人在一起開(kāi)發(fā)。所以每次提交,每次上傳,都會(huì)帶有你這臺(tái)電腦的標(biāo)記——郵箱地址和用戶名。
02
本地建立git庫(kù)
以/D/PROJ/project的一個(gè)keil工程為例。
1.進(jìn)入工程所在的目錄,使用ls指令查看是否正確的進(jìn)入了目錄。
xxxx@DESKTOP-TH28NBD MINGW64 /
$ cd /D/PROJ/project/
xxxx@DESKTOP-TH28NBD MINGW64 /D/PROJ/project (master)
$ ls
inc/ Libraries/ README.en.md README.md RVMDK/ src/
2、初始化本地git倉(cāng)庫(kù)
git init
在project的目錄下可以看到.git的目錄,該目錄包含讓 git 能夠正常工作所需的所有信息。
03
遠(yuǎn)程代碼托管平臺(tái)
Github和Gitlab是最流行的托管平臺(tái),由于眾所周知的原因,這些國(guó)外的網(wǎng)站在國(guó)內(nèi)的訪問(wèn)速度很不理想,國(guó)內(nèi)使用推薦gitee碼云或coding.net。以Gitee來(lái)舉例。
Gitee免費(fèi)版可創(chuàng)建 1000 個(gè)倉(cāng)庫(kù),不限制公私有。單倉(cāng)庫(kù)大小上限為 500M,單文件最大 50M,用戶總倉(cāng)庫(kù)容量為 5G。對(duì)于一般的keil嵌入式開(kāi)發(fā),免費(fèi)版已經(jīng)綽綽有余了。
1.注冊(cè)Gitee,根據(jù)網(wǎng)站的提示完成注冊(cè)。
2.配置ssh
本地Git倉(cāng)庫(kù)和Gitee倉(cāng)庫(kù)之間的傳輸是通過(guò)SSH加密的,所以需要配置ssh,使得托管平臺(tái)認(rèn)可你這臺(tái)電腦的git操作。在Git Bash內(nèi)執(zhí)行以下指令創(chuàng)建SSHkey。
ssh-keygen -t rsa -C youremail@example.com
把郵件地址換成你自己的郵件地址,然后回車(chē)一路使用默認(rèn)值即可。完成后在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個(gè)文件,這兩個(gè)就是SSH Key的秘鑰對(duì),id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以發(fā)送給他人。
Windows的目錄在c盤(pán)的用戶目錄內(nèi)。
3.上傳ssh公鑰到碼云
點(diǎn)擊右上角的用戶頭像,選擇設(shè)置。然后在設(shè)置頁(yè)面的左側(cè)功能欄選擇SSH公鑰。將剛才生成的id_rsd.pub的內(nèi)容拷貝進(jìn)公鑰內(nèi)容框內(nèi),標(biāo)題隨意填寫(xiě)。
4.創(chuàng)建項(xiàng)目倉(cāng)庫(kù)
點(diǎn)擊頁(yè)面右上角的加號(hào),并選擇新建倉(cāng)庫(kù)。
04
本地提交代碼與推送遠(yuǎn)程庫(kù)
1.添加遠(yuǎn)端地址
git remote add origin ssh地址
如 git remote add origin git@gitee.com:xxxx/xxxx.git
ssh地址在gitee倉(cāng)庫(kù)頁(yè)面點(diǎn)擊“克隆/下載”按鈕獲取。
可以通過(guò) git remote -v指令查看遠(yuǎn)端的連接。
$ git remote -v
origin git@gitee.com:xxxx/PROJECTTEST.git (fetch)
origin git@gitee.com:xxxx/PROJECTTEST.git (push)
2.拉取遠(yuǎn)端版本到本地
git pull origin master
git pull origin master
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
From gitee.com:xxxx/PROJECTTEST
branch master -> FETCH_HEAD
[new branch] master -> origin/master
拉取成功后,本地目錄可以看到剛才創(chuàng)建gitee倉(cāng)庫(kù)時(shí)創(chuàng)建的Readme文件。
3.本地提交代碼
將project內(nèi)原有的代碼,inc/ src/目提交到本地倉(cāng)庫(kù)。
git add src/
git add inc/
git commit -m “first commit”
注意不要講編譯生成的文件add進(jìn)去,只將代碼add進(jìn)倉(cāng)庫(kù)。因?yàn)榫幾g生成的文件每次編譯都會(huì)變化,這樣每次的版本提交都包含了這些非代碼改變的提交,不僅會(huì)使得版本很混亂也會(huì)占用很多遠(yuǎn)程倉(cāng)庫(kù)的空間。當(dāng)然這也可以通過(guò)增加gitignore文件的方法來(lái)處理。
4.推送本地倉(cāng)庫(kù)到遠(yuǎn)端
git push origin master
git push origin master
Enumerating objects: 32, done.
Counting objects: 100% (32/32), done.
Delta compression using up to 8 threads
Compressing objects: 100% (31/31), done.
Writing objects: 100% (31/31), 22.22 KiB | 2.78 MiB/s, done.
Total 31 (delta 12), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
To gitee.com:xxxx/PROJECTTEST.git
master -> master
直接git push會(huì)提示警告
$ git push
fatal: The current branch mater has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
按照提示執(zhí)行g(shù)it push --set-upstream origin master,以后再推送版本,只需要輸入git push就可以了。
至此,將一個(gè)現(xiàn)有的keil工程加入git管理,并在遠(yuǎn)端托管平臺(tái)備份的操作都完成了,后面在這個(gè)工程上做開(kāi)發(fā)并提交版本,就按照常規(guī)的git操作 git add、git commit、git push就可以了。本文開(kāi)始提出的版本回退問(wèn)題,只需要執(zhí)行g(shù)it reset –hard的指令,代碼就自動(dòng)回退到指定的提交點(diǎn)了。更多的git功能,開(kāi)發(fā)者可以在后續(xù)的實(shí)際開(kāi)發(fā)中不斷學(xué)習(xí)完善,
/ The End /
本文系嵌入式案例Show原創(chuàng)出品,未經(jīng)許可,請(qǐng)勿轉(zhuǎn)載。
掃碼關(guān)注我們
看更多嵌入式案例
喜歡本篇內(nèi)容請(qǐng)給我們點(diǎn)個(gè)在看
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!