?背景
存在這樣一種狀況输钩,工作的時(shí)候有一個(gè)模塊因?yàn)樗悸纷枞荒芮斑M(jìn)床玻,周末在家忽然有了idea翼虫,但是手頭沒有模塊Code屑柔,只能動(dòng)筆記下思路,周一上班Code實(shí)現(xiàn)珍剑。這種狀況對(duì)于Coder而言比較頻繁掸宛,相比用筆寫下思路,Coder們更希望可以直接在代碼中調(diào)試解決招拙,這樣在遇到新的問題唧瘾,才有實(shí)際的依據(jù)繼續(xù)深入,畢竟多數(shù)的Idea沒有Code的支持迫像,很難言其靠譜性劈愚。
當(dāng)然,你也可以常備U盤闻妓,時(shí)時(shí)更新菌羽,如果考慮保密等問題,確實(shí)應(yīng)該由缆,如果只是純技術(shù)注祖,其實(shí)有更好的解決辦法——代碼版本管理工具。
這類工具均唉,PI君用過SVN和GIt是晨,至于TFS,聞過大名舔箭,限于單位性質(zhì)罩缴,不曾采用。如果只是構(gòu)建自己的遠(yuǎn)程代碼庫层扶,考慮到Github的免費(fèi)空間箫章,PI君推薦使用Git,簡單易用镜会。
總體思路
需求描述:
→在家或者在單位都可以獲取某個(gè)項(xiàng)目或模塊的最新Code檬寂;
→可以將本地所做的修改上傳至Github遠(yuǎn)程倉庫;
→可以控制版本的發(fā)布戳表,對(duì)發(fā)布版本有獨(dú)立的路徑進(jìn)行訪問桶至;
→可以在不影響當(dāng)前功能的基礎(chǔ)上獨(dú)立開發(fā)新功能昼伴,并允許最終合并至Develop版本;
→可以追蹤歷史版本镣屹,對(duì)每一個(gè)歷史版本有文檔記錄圃郊。
OK,就PI君自己野瘦,以上所列基本滿足需求了描沟。當(dāng)然,Git本身鞭光,在滿足以上需求的同時(shí)吏廉,還具備其他的功能,感興趣的看官們自行挖掘吧~別忘了有好的分享也知會(huì)下PI君~~
實(shí)施過程
下載安裝git
首先惰许,當(dāng)然是下載安裝Git啦
Git官網(wǎng)下載地址:https://git-scm.com/downloads
配置github遠(yuǎn)程倉庫
其次席覆,配置下Github遠(yuǎn)程倉庫,過程不細(xì)說汹买,申請(qǐng)github賬號(hào)->新建Repository佩伤,最后結(jié)果如下圖:
一般的有關(guān)github的使用說明,到此就結(jié)束了晦毙,但是就PI君篇頭所提的需求生巡,目前還不滿足。還需要針對(duì)這個(gè)空的github的Repository做一些配置见妒。
配置github的Repository
新建的Repository默認(rèn)master為其主干分支孤荣,我們要做的是另建一個(gè)分支Develop,如下圖:
這個(gè)分支用來做什么的呢须揣?且看我們的需求:
可以控制版本的發(fā)布盐股,對(duì)發(fā)布版本有獨(dú)立的路徑進(jìn)行訪問;
當(dāng)前的Repository有兩個(gè)分支:master和Develop耻卡,這樣疯汁,PI君可以把本地新增代碼只上傳到Develop分支,一旦完成一個(gè)版本卵酪,就可以將該版本合并至master幌蚊,如果不需要發(fā)布新版本,那么所有的代碼更新只在Develop分支上發(fā)生溃卡,這樣溢豆,PI君就可以控制版本的發(fā)布啦。
配置本地Git
首先塑煎,先安裝git沫换,window版本有安裝向?qū)С粢希宦穘ext即可最铁,Linux版本也有很多教程讯赏,這里不再贅述。
選一個(gè)路徑冷尉,新建文件夾漱挎,取名“TestGit”,在VS里新建一個(gè)用于測試Git的工程項(xiàng)目雀哨,路徑配置在剛才新建的文件夾磕谅,(項(xiàng)目類型whatever,啥項(xiàng)目都行)雾棺。OK膊夹,在TestGit文件夾下右鍵選擇“Git Bash Here”,彈出Git bash命令行捌浩,如下圖:
首先放刨,需要生成本地SSH-KEY,并添加至Github中尸饺,這是一個(gè)通行證进统,gitgub必須知道是誰在某個(gè)特定賬戶推送更新,如果沒有key的限制浪听,大家都可以更改PI君的github代碼螟碎,不可想象~,很簡單迹栓,在gitBash中輸入:
ssh-keygen -t rsa -C "你的github注冊(cè)郵箱"
這樣會(huì)默認(rèn)在本地用戶文件夾下產(chǎn)生兩個(gè)文件:
這個(gè)是你本地的SSH密鑰掉分,如果想在本地更新那個(gè)github代碼倉庫,必須把你本地的publickey添加至github賬戶的SSH-KEY列表中迈螟,拿PI君自己舉例:
首先叉抡,使用txt打開id_rsa.pub文件,復(fù)制里面的全部內(nèi)容答毫,然后打開github賬戶設(shè)置褥民,見下圖:
找到SSH Keys,點(diǎn)開洗搂,然后點(diǎn)擊【New SSH key】消返,如下圖:
起個(gè)名字給Title,在Key中粘貼復(fù)制的內(nèi)容耘拇,點(diǎn)擊Add SSH key撵颊,添加完成。
現(xiàn)在本地就可以向github遠(yuǎn)程倉庫推送更新了惫叛。
本地git使用策略
在配置完遠(yuǎn)程倉庫和本地git連接后倡勇,剩下的就是怎么使用遠(yuǎn)程倉庫以及本地git來實(shí)現(xiàn)剩下的需求啦,我們回顧一下一開始的需求:
→在家或者在單位都可以獲取某個(gè)項(xiàng)目或模塊的最新Code嘉涌;
→可以將本地所做的修改上傳至Github遠(yuǎn)程倉庫妻熊;
→可以控制版本的發(fā)布夸浅,對(duì)發(fā)布版本有獨(dú)立的路徑進(jìn)行訪問;
→可以在不影響當(dāng)前功能的基礎(chǔ)上獨(dú)立開發(fā)新功能扔役,并允許最終合并至Develop版本帆喇;
→可以追蹤歷史版本,對(duì)每一個(gè)歷史版本有文檔記錄亿胸。
OK坯钦,這些需求的最終實(shí)現(xiàn),需要git的本地使用策略來完成~
首先侈玄,初始化本地倉庫(可以在新建的空文件夾或已有文件的文件夾婉刀,反正不限制):
$git init
然后,添加遠(yuǎn)程主機(jī)(github倉庫):
$git remote add <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程主機(jī)地址>
例如:
$git remote add github_footballgame https://github.com/fei090620/FootballGame.git
將遠(yuǎn)程倉庫復(fù)制到本地(如果遠(yuǎn)程倉庫是新建的序仙,那這一步可以省了):
$git clone <遠(yuǎn)程倉庫地址>
例如:
$git clone https://github.com/fei090620/FootballGame.git
此時(shí)路星,會(huì)在TestGit文件夾下生成一個(gè)FootballGame的新文件夾,里面包含了FootballGame這個(gè)Repository里所有數(shù)據(jù)诱桂。
推送本地倉庫的內(nèi)容至遠(yuǎn)程:
$git push -u origin master
加上參數(shù)“-u”洋丐,Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來挥等,在以后的推送或者拉取時(shí)就可以簡化命令友绝。
推送成功后,可以立刻在GitHub頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣肝劲。如果出現(xiàn)SSH警告迁客,可以無視。后續(xù)所有本地倉庫在master上的更新都可以push至github倉庫下的master分支啦~~~
遠(yuǎn)程master辞槐,也就是origin/master和本地的master分支默認(rèn)對(duì)應(yīng)掷漱,推送的時(shí)候,如果不加更改榄檬,也是本地master和origin/master分支關(guān)聯(lián)卜范,如果,我們想推送Develop分支怎么辦鹿榜?
畢竟海雪,考慮控制發(fā)布發(fā)布的需求,master分支中的版本是Develop版本更新到一定程度的時(shí)候?qū)ν獍l(fā)布至master舱殿,所以奥裸,頻繁被推送的遠(yuǎn)程分支應(yīng)該是origin/Develop,而不是origin/master沪袭。要達(dá)到這個(gè)目的湾宙,必須做一些修改:
首先,在本地git倉庫新建一個(gè)計(jì)劃和origin/Develop分支關(guān)聯(lián)的分支,這是除master主分支以外的另一個(gè)比較重要的分支侠鳄,可以自定義取名嗡害,方便理解,取相同的名字“Develop”畦攘。
$git branch Develop ?//新建Develop分支
$git checkout Develop ?//切換至Develop分支
#當(dāng)然也可以一步到位
$git checkout -b Develop
制定本地Develop分支與遠(yuǎn)程origin/Develop分支連接:
$git branch --set -upstream Develop origion/Develop
然后,先pull十电,然后合并無沖突后知押,再push,這是原則鹃骂,奉勸看官們不要違背台盯,至于為什么,用過svn的應(yīng)該能理解畏线,PI君就不廢話了静盅。
$git pull
$git push origin/Develop
這樣,本地Develop就可以推送至遠(yuǎn)程倉庫中的Develop分支寝殴。
那如果蒿叠,想發(fā)布了呢,簡單蚣常,現(xiàn)在本地倉庫里合并至master分支市咽,然后推送至origin/master即可,操作如下:
$git status //檢查下當(dāng)前工作空間的更新情況
$git checkout master //切換至master
$git merge Develop //合并Develop至master
$git pull //獲取origin上的最新版本
$git push origin master //推送當(dāng)前分支至origin/master分支
OK抵蚊,到此施绎,需求已經(jīng)基本滿足了,那如果本地master分支或者Develop分支需要多個(gè)人協(xié)作贞绳,怎么辦呢谷醉?這不是本片內(nèi)容的范疇,如果有疑惑后續(xù)發(fā)文再聊啦~