您的位置:首頁>正文

Git這麼牛逼的東西你不會?這年頭程式師真要會點Git!

版本控制

說到版本控制, 腦海裡總會浮現大學畢業是寫畢業論文的場景, 你電腦上的畢業論文一定出現過這番景象!

GIT介紹

Git 是一個開源的分散式版本控制軟體,用以有效、高速的處理從很小到非常大的專案版本管理。 Git 最初是由Linus Torvalds設計開發的, 用於管理Linux內核開發。 Git 是根據GNU通用公共許可證版本2的條款分發的自由/免費軟體, 安裝參見:http://git-scm.com/

GitHub是一個基於Git的遠端檔託管平臺(同GitCafe、BitBucket和GitLab等)。

Git本身完全可以做到版本控制,

但其所有內容以及版本記錄只能保存在本機, 如果想要將檔內容以及版本記錄同時保存在遠端, 則需要結合GitHub來使用。 使用場景:

回顧開發過程, 其中辛酸只有小P自己知道。 上線完成後的某一天, 小P猛然看到自己開發目錄, 臥槽這拓麻也太亂了, 加入那天程式出問題回滾到上個版本的時候, 自己都找不到確定版本, 並且我老子做的這個系統日後是要成千上萬人來維護開發, 這種通過原始檔來保存版本的形式簡直Low到爆啊。

開始調研:小P發現了版本控制神奇Git, 但是都是道聼塗説, 到底牛逼成什麼樣子也不清楚, 所以抱著試試看的態度, 小P開始使用Git進行版本控制。

初始化後, 會在目前的目錄自動創建 .git 資料夾, 該檔是Git中最重要的資料夾, 因為Git相關檔以及版本都將保存在該資料夾中, 有了它, 媽媽再也不用擔心我好多檔來記錄版本了,

通過Git命令可以將所有版本保存在 .git 檔中, 兩條命令創建一個版本:

工作區:當前開發程式所在目錄稱為工作區,即:工作開發都是在該目錄,該區域的檔會有狀態的變化且狀態由git自動檢測,如果程式中檔做任何操作(增、刪、改),檔狀態均會被檢測到,可以使用 【git status】命令查看。

View Code

版本庫:工作區檢測到有檔發生變化,那麼意味著較上一個版本之後對程式進行了修改,修改完成之後,可以當做下一版本進行提交,那麼就是執行 【git add .】 將所有檔提交到暫存區,然後再執行【git commit -m '又一個版本'】提交到版本庫的分支即可,之後可以使用【git log】命令查看版本記錄。

View Code

目前已使用Git的四個命令,這四個命令已經可以代替本地多個檔保存版本的方式:

調研完,小P好氣自己喲,這麼6的東西為什麼沒有早發現,從此小P的版本管理就告別繁雜的資料夾了,趕緊搞起來。

+ View Code

恰好,此時需要開發一個非洲專區的功能,再也不用重新copy一遍檔了,在工作區直接開始搞起來,30分鐘開發測試完成,又一個版本完成了咯!!!

+ View Code

非洲專區上線一個月後,接連收到用戶投訴,原來清新脫俗的小P那裡去了?怎麼變得如此重口味?想回到過去....

回滾到指定版本:

+ View Code

回滾倒是完成了,小P在想如果某一天想要在回有非洲專區功能的版本怎麼辦呢?來來來,不能像以往通過【git log】來查看記錄再回滾了,再回去需要這麼搞:

+ View Code

方案一:stash

stash用於將工作區發生變化的所有檔獲取臨時存儲在“某個地方”,將工作區還原當前版本未操作前的狀態;stash還可以將臨時存儲在“某個地方”的檔再次拿回到工作區。

+ View Code

特別的:執行 git stash pop 命令時,可能會遇到衝突,因為在緊急修復bug的代碼和通過stash存儲在“某個地方”的代碼會有重合部分,所以執行 git stash pop 時候就會出現衝突,有衝突解決衝突即可。

方案二:branch

分支學習:branch稱為分支,預設僅有一個名為master的分支。一般開發新功能流程為:開發新功能時會在分支dev上進行,開發完畢後再合併到master分支。

一般流程示例(上圖)

學習參考上圖,小P也可以按照著這樣的流程進行開發,如果遇到上文開發到一般需要臨時修復Bug的情況,可以按照下圖的流程進行:

Git使用之小P創業快速發展期

小P不忘初心始終如一的為廣大有為青年提供資源,使得網站的訪問量不斷攀升,已經出具規模並賺了一些錢,有錢就要造麼,索性國貿租了一間寫字樓用於辦公,並且也完善運營市場團隊。。屌絲終歸是屌絲,小P還是離不開寫代碼的習慣,所以開發的任務還是由自己一人承擔,小P從此開始了白天在國貿寫代碼,晚上回天通苑寫代碼。PS:有錢,公司一台新電腦,家裡一台原來老電腦。。。。。 媽的,故事怎麼才能變得有趣呢?太拓麻難了。

基於GitHub實現代碼託管,需要一下步驟:

註冊GitHub

創建倉庫,創建完倉庫後會有一個URL代指該倉庫,如:

git可以是用該URL進行向遠端推送版本資訊或獲取版本資訊

小P學會使用Git和GitHub之後,就可以基於GitHub進行代碼遠端託管。

在家裡,小P開發完畢部分功能將代碼推送到GitHub。

+ View Code

長此以往,將Git和GitHub結合使用做到避免電腦損壞造成資料丟失以及多地開發的問題,上文執行過程中執行 【git pull origin 分支】命令等同於【git fetch origin 分支】+ 【git merge origin/分支】,並且在執行過程中可能會出現衝突,原因是由於本地代碼和獲取的最新代碼有重合部分,那麼就需要自己手動解決衝突然後再繼續開發。

Git使用之小P創業成熟期

小P的公司發展越來越好,但是公司產品單一是嚴重缺點,經過學習考察小P決定再招聘3個Python程式開發另外一個產品“約P”平臺來豐富公司業務線,為使用者提供一整套服務。

小P的Slogan:看了想要,想要就約。 不要問我怎麼想要的,我自己也不知道 哈哈哈哈哈哈哈哈

“約P”平臺需要三人協同開發,GitHub中多人協同開發和單人開發還是有點差別,協同開發一般有兩種方式:

合作者,將其他用戶添加到倉庫合作者中之後,該用戶就具有向當前倉庫提交代碼。

組織,創建一個組織,然後再該組織下可以創建多個專案,組內成員可以向組內所有項目提交代碼。PS:也可以對某個項目指定合作者

協同開發命令和以上步驟類似,此處就不再重新寫代碼,而是使用檔描述三人協同開發整個過程。

創建程式

使用者A創建程式,提交到GitHub

使用者B克隆專案

用戶C克隆專案

開發功能

用戶A開發功能1

用戶B開發功能2

用戶C開發功能3

提交

用戶A提交功能1,並push(A用戶手速快,先提交。)

用戶B提交功能2,無法push,因為GitHub上已經有其他人提交的新代碼。

解決方法:從GitHub上獲取最新代碼併合並到本地,提交自己開發的功能2。

用戶C提交功能3,無法push,無法提交,因為GitHub上已經有其他人提交的新代碼。

解決方法:從GitHub上獲取最新代碼併合並到本地,提交自己開發的功能3。

獲取最新代碼

用戶A獲取最新代碼

用戶B獲取最新代碼

用戶C獲取最新代碼

+ View Code

先 git fetch origin master 然後 git rebase origin/master 再 git push origin master

+ View Code

使用Git之小P創業上市期

終於終於小P等到了公司上市實現財務自由,但作為一個技術屌還是脫離不了屌絲的本質,所以每天都是逛逛github,看看別人有什麼好的項目,自己可以給他挑挑bug裝裝逼,但是別人不可能給小P搞成合作者什麼的,那怎麼才能給別人貢獻代碼呢?那就是fork了。。。。

找到想搞的項目,fork一下,然後這個項目就在自己倉庫出現了

從自己倉庫獲取代碼並進行編輯提交

創建並提交一個pull request,然後等待原作者是否同意這個pull request,如果同意那麼在作者的原始程式碼中就推出現小P提交的功能

其他補充

工作區:當前開發程式所在目錄稱為工作區,即:工作開發都是在該目錄,該區域的檔會有狀態的變化且狀態由git自動檢測,如果程式中檔做任何操作(增、刪、改),檔狀態均會被檢測到,可以使用 【git status】命令查看。

View Code

版本庫:工作區檢測到有檔發生變化,那麼意味著較上一個版本之後對程式進行了修改,修改完成之後,可以當做下一版本進行提交,那麼就是執行 【git add .】 將所有檔提交到暫存區,然後再執行【git commit -m '又一個版本'】提交到版本庫的分支即可,之後可以使用【git log】命令查看版本記錄。

View Code

目前已使用Git的四個命令,這四個命令已經可以代替本地多個檔保存版本的方式:

調研完,小P好氣自己喲,這麼6的東西為什麼沒有早發現,從此小P的版本管理就告別繁雜的資料夾了,趕緊搞起來。

+ View Code

恰好,此時需要開發一個非洲專區的功能,再也不用重新copy一遍檔了,在工作區直接開始搞起來,30分鐘開發測試完成,又一個版本完成了咯!!!

+ View Code

非洲專區上線一個月後,接連收到用戶投訴,原來清新脫俗的小P那裡去了?怎麼變得如此重口味?想回到過去....

回滾到指定版本:

+ View Code

回滾倒是完成了,小P在想如果某一天想要在回有非洲專區功能的版本怎麼辦呢?來來來,不能像以往通過【git log】來查看記錄再回滾了,再回去需要這麼搞:

+ View Code

方案一:stash

stash用於將工作區發生變化的所有檔獲取臨時存儲在“某個地方”,將工作區還原當前版本未操作前的狀態;stash還可以將臨時存儲在“某個地方”的檔再次拿回到工作區。

+ View Code

特別的:執行 git stash pop 命令時,可能會遇到衝突,因為在緊急修復bug的代碼和通過stash存儲在“某個地方”的代碼會有重合部分,所以執行 git stash pop 時候就會出現衝突,有衝突解決衝突即可。

方案二:branch

分支學習:branch稱為分支,預設僅有一個名為master的分支。一般開發新功能流程為:開發新功能時會在分支dev上進行,開發完畢後再合併到master分支。

一般流程示例(上圖)

學習參考上圖,小P也可以按照著這樣的流程進行開發,如果遇到上文開發到一般需要臨時修復Bug的情況,可以按照下圖的流程進行:

Git使用之小P創業快速發展期

小P不忘初心始終如一的為廣大有為青年提供資源,使得網站的訪問量不斷攀升,已經出具規模並賺了一些錢,有錢就要造麼,索性國貿租了一間寫字樓用於辦公,並且也完善運營市場團隊。。屌絲終歸是屌絲,小P還是離不開寫代碼的習慣,所以開發的任務還是由自己一人承擔,小P從此開始了白天在國貿寫代碼,晚上回天通苑寫代碼。PS:有錢,公司一台新電腦,家裡一台原來老電腦。。。。。 媽的,故事怎麼才能變得有趣呢?太拓麻難了。

基於GitHub實現代碼託管,需要一下步驟:

註冊GitHub

創建倉庫,創建完倉庫後會有一個URL代指該倉庫,如:

git可以是用該URL進行向遠端推送版本資訊或獲取版本資訊

小P學會使用Git和GitHub之後,就可以基於GitHub進行代碼遠端託管。

在家裡,小P開發完畢部分功能將代碼推送到GitHub。

+ View Code

長此以往,將Git和GitHub結合使用做到避免電腦損壞造成資料丟失以及多地開發的問題,上文執行過程中執行 【git pull origin 分支】命令等同於【git fetch origin 分支】+ 【git merge origin/分支】,並且在執行過程中可能會出現衝突,原因是由於本地代碼和獲取的最新代碼有重合部分,那麼就需要自己手動解決衝突然後再繼續開發。

Git使用之小P創業成熟期

小P的公司發展越來越好,但是公司產品單一是嚴重缺點,經過學習考察小P決定再招聘3個Python程式開發另外一個產品“約P”平臺來豐富公司業務線,為使用者提供一整套服務。

小P的Slogan:看了想要,想要就約。 不要問我怎麼想要的,我自己也不知道 哈哈哈哈哈哈哈哈

“約P”平臺需要三人協同開發,GitHub中多人協同開發和單人開發還是有點差別,協同開發一般有兩種方式:

合作者,將其他用戶添加到倉庫合作者中之後,該用戶就具有向當前倉庫提交代碼。

組織,創建一個組織,然後再該組織下可以創建多個專案,組內成員可以向組內所有項目提交代碼。PS:也可以對某個項目指定合作者

協同開發命令和以上步驟類似,此處就不再重新寫代碼,而是使用檔描述三人協同開發整個過程。

創建程式

使用者A創建程式,提交到GitHub

使用者B克隆專案

用戶C克隆專案

開發功能

用戶A開發功能1

用戶B開發功能2

用戶C開發功能3

提交

用戶A提交功能1,並push(A用戶手速快,先提交。)

用戶B提交功能2,無法push,因為GitHub上已經有其他人提交的新代碼。

解決方法:從GitHub上獲取最新代碼併合並到本地,提交自己開發的功能2。

用戶C提交功能3,無法push,無法提交,因為GitHub上已經有其他人提交的新代碼。

解決方法:從GitHub上獲取最新代碼併合並到本地,提交自己開發的功能3。

獲取最新代碼

用戶A獲取最新代碼

用戶B獲取最新代碼

用戶C獲取最新代碼

+ View Code

先 git fetch origin master 然後 git rebase origin/master 再 git push origin master

+ View Code

使用Git之小P創業上市期

終於終於小P等到了公司上市實現財務自由,但作為一個技術屌還是脫離不了屌絲的本質,所以每天都是逛逛github,看看別人有什麼好的項目,自己可以給他挑挑bug裝裝逼,但是別人不可能給小P搞成合作者什麼的,那怎麼才能給別人貢獻代碼呢?那就是fork了。。。。

找到想搞的項目,fork一下,然後這個項目就在自己倉庫出現了

從自己倉庫獲取代碼並進行編輯提交

創建並提交一個pull request,然後等待原作者是否同意這個pull request,如果同意那麼在作者的原始程式碼中就推出現小P提交的功能

其他補充

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示