學習版本控制系統:從git到github
學習版本控制系統:從git到github
到目前為之,本公眾號已經分享了很多有趣的機器學習資源,介紹了很多入門的機器學習項目。今天和大家共同學習一個能夠有效、高速的處理從很小到非常大的項目版本管理系統:git。那麼什麼是git,名字很類似的github又是什麼呢?
git官方定義為:一個開源的分散式版本控制系統。這個定義對於計算機初學者顯得晦澀難懂,那我們打個比方:
如果你用Microsoft Word寫過長篇大論,那你一定有這樣的經歷:想刪除一個段落,又怕將來想恢復找不回來怎麼辦?有辦法,先把當前文件「另存為……」一個新的Word文件,再接著改,改到一定程度,再「另存為……」一個新文件,這樣一直改下去,最後你的Word文檔變成了這樣:
可以,非常要命。因為命名隨便起,你想找回被刪除的文字,但是已經記不清刪除前保存在哪個文件里了,只好一個一個文件去找。看著一堆亂七八糟的文件,想保留最新的一個,然後把其他的刪掉,又怕哪天會用上,還不敢刪。有時候你和同學合作一個項目,今天你把文件做了修改,明天輪到同學做修改,等到第三天,你在沒有溝通的情況下,根本不知道你隊友在上千上萬的代碼中,做了什麼改動,導致合作效率低下。
於是你想,如果有一個軟體,能自動幫我記錄每次文件內容的改動,如果想查看某次改動,只需要在軟體里瞄一眼就可以,豈不是很方便?
Git出現了。幫你對每一次版本的改動進行記錄,方便查找,多人協同工作。
git的安裝
git的安裝非常簡單。很長一段時間內,Git也只能在Linux和Unix系統上跑。不過,慢慢地有人把它移植到了Windows上。現在,Git可以在Linux、Unix、Mac和Windows這幾大平台上正常運行了。
在Windows上使用Git,可以從Git官網直接下載安裝程序,或者前往https://gitee.com/git-installer/git-for-windows,下載後默認安裝即可。完成之後在開始菜單里找到「Git」->「Git Bash」,出現類似命令行窗口的東西,就說明Git安裝成功!
在git配置版本庫
打開Git Bash之後,我們依次輸入。
mkdir 學習git//創建版本庫所在文件夾
cd 學習git//進入文件夾
git init//把文件夾變成Git可以管理的倉庫
此時版本庫準備就緒。
利用git進行時光穿梭
存放文件
在創建版本庫後,輸入pwn命令找到版本庫路徑。在其中放入一個文本文件(任意文件格式均可)
我們放入tx.txt文件,內容為:這是第一個文件。
提交文件
存放之後,我們將文件提交:輸入以下代碼
git add tx.txt//add 添加文件
git commit -m "第一"//commit 提交文件 -m添加備註信息
完成之後,我們繼續工作,模擬修改過程。我們打開tx.txt,將來文件修改為這是「這是第二個文件。」並保存。
我們可以運行git status命令看看結果:
(git status命令可以讓我們時刻掌握倉庫當前的狀態)
1.為提交文件
2.為提交文件之後運行git status命令,提示工作區乾淨。
3.為修改文件之後運行git status命令,提示文件被修改過了,但還沒有準備提交的修改。我們再次使用add,commit命令提交,備註為「第二」。
回退文件
經過上面的修改,文件內容發生了改變,也記錄了備註為「第一」,「第二」兩次修改。我們使用git log命令,可以查看每一次的修改:
a.為提交的commit id
b.為每一次提交的備註
利用唯一確定的commit id,我們可以用reset命令回到過去。
git reset --hard d3afc//d3afc為id號前幾位
執行之後,我們打開原來的文件,驚訝發現,原來的文件居然回來了!好像時光穿梭一般。
若你再次使用git reset --hard 9256cc,指定備註為第二的修改id,文件將又變回去了。利用commit id和方便查看的備註。我們可以實現文件的來回變換。
git的強大利器:分支管理
分支管理
分支就是科幻電影裡面的平行宇宙,當你正在電腦前努力學習英語的時候,另一個你正在另一個平行宇宙里努力學習數學。如果兩個平行宇宙互不干擾,那對現在的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合併了,結果,你既學會了英語又學會了數學!那麼這有什麼用呢?假設你準備開發一個新功能,但是需要兩周才能完成,第一周你寫了50%的代碼,如果立刻提交,由於代碼還沒寫完,不完整的代碼庫會導致別人不能幹活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風險。現在有了分支,就不用怕了。你創建了一個屬於你自己的分支,別人看不到,還繼續在原來的分支上正常工作,而你在自己的分支上幹活,想提交就提交,直到開發完畢後,再一次性合併到原來的分支上,這樣,既安全,又不影響別人工作。
如圖,我們在進行主線任務開發時,為了不影響被人的使用,我們手動創造另一條分支,在分支進行開發,等到了合適的時候,我們將分支合併到主線,任務也就完成了。
創造分支
在程序窗口中,我們輸入:
git checkout -b dev//創造並跳到分支dev
也可以使用:
git branch dev//創造分支dev
git checkout dev//跳到分支dev
此時我們在dev分支上。我們將來文件內容修改為「這是第三個文件。」若在這個時候調到主線,文件的內容沒有變化,因為尚未合併。(但是會丟失沒有提交的dev線工作區,我們可以用git stash保存的工作現場,回來之後用git stash list查看保存,並用git stash apply恢復。已經提交則不會丟失)
合併分支
我們已經在分支dev提交了第三次修改,並備註了「第三」。我們使用在程序窗口中,我們輸入:
git checkout master//跳回主線
git merge dev//將分支dev合併到主線
執行之後,主線文件變成「這是第三個文件。」
衝突問題
在分支提交後,返回master分支進行再次並提交。合併時會出現衝突的情況,此時合併將會把兩個文件合併,我們需要手動修改,再次提交以解決衝突。過程如下圖
從git到github
到目前為止,我們已經掌握了如何在Git倉庫里對一個文件進行時光穿梭,你再也不用擔心文件備份或者丟失的問題了。我們來學習下github。
Git是分散式版本控制系統,同一個Git倉庫,可以分布到不同的機器上。GitHub實質上就是一個巨大的伺服器,存放著大量的倉庫。我們可以從這個伺服器倉庫克隆一份到自己的電腦上,並且各自把各自的提交推送到伺服器倉庫里,也從伺服器倉庫中拉取別人的提交。因為這樣的能力,GitHub成為最大的開源代碼聚集地。
連接github
步驟如下:
1.首先我們需要註冊一個GitHub賬號,就可以免費獲得Git遠程倉庫。
2.接著我們打開Git Bash,運行代碼:
ssh -keygen -t rsa -C " youremail @ example.com"
3.找到用戶主目錄里的.ssh目錄下id_rsa文件
4.登陸GitHub,打開「Account settings」, 「SSH Keys」頁面。然後,點「Add SSH Key」,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內容。
上傳自己的倉庫到GitHub
步驟如下;
1.登陸GitHub,然後在右上角找到「Create a new repo」按鈕,創建一個新的倉庫:在Repository name填入 tx(自定義倉庫名),其他保持默認設置,點擊「Create repository」按鈕,就成功地創建了一個新的Git倉庫。
2.參考本文git安裝配置,創建本地倉庫,提交文件後,運行:
czlin2018需要更換成自己的帳戶名,github-需要換成自己定義的倉庫名。
3.運行代碼:
git push -u origin master//同步到GitHub,首次 使用會出現驗證,輸入yes即可
此時,查看GitHub帳戶,多出了一個倉庫,裡面文件與本地倉庫文件一摸一樣。以後修改好代碼,直接push提交即可。
下載克隆他人倉庫代碼
GitHub上有大量的機器學習項目,我們再百度上查找到有興趣的項目,進入作者首頁,點進去項目首頁找到:
執行clone命令,項目直接下載到本地倉庫,如
作為開源代碼庫以及版本控制系統,Github擁有超過900萬開發者用戶。隨著越來越多的應用程序轉移到了雲上,Github已經成為了管理軟體開發以及發現已有代碼的首選方法,對於進行計算機學習的我們,無疑是巨大的寶藏!本教程到此結束,推文略長,感謝觀看。
「
我們是圖靈智能創新團隊,同時也是廣東海洋大學第一個人工智慧創新團隊,我們團隊的主要方向有:計算機視覺和自然語言處理。本公眾號主要面向對人工智慧感興趣的讀者,如果想了解更多,歡迎關注我們!
」
—END—