Git和GitHub的正確開啟姿勢

weixin_33860722發表於2018-03-29
7822237-e9cb763d9af8670d.png
Git圖片

起因

都說做攻城獅是需要積累的,果然不錯,積累到一定階段就會發現自己已經弄了很多東西,但是這些東西都很零散不好管理。然後就想,有什麼工具可以幫我管理這些東西呢?這時候,一個以前一直覺得沒用的東西就跳入腦海了:GitHub。

沒錯,GitHub就是用來管理零散的物件的倉庫,而Git則是配套的工具。

Git和GitHub的基本概念

在學習一個新工具的時候,我們首先需要了解關於新工具的一些基本概念。這是非常重要的一個步驟,如果連基本概念都不瞭解,你能用只不過是運氣好而已,遇到一點問題就會不知所措。要解決這些問題最根本的就是要靠這些基本概念,也就是我們平常所說的基礎。那麼,Git和GitHub的基本概念有哪些呢?

Git是什麼?

Git是全球最先進的分散式版本控制系統。重點是版本控制系統,前面的都是噱頭。

那麼什麼是版本控制系統呢?

想象一個這樣的場景:你正在寫一個檔案,名叫遊戲策劃案.docx。寫完之後,給老闆看,結果老闆說要改,你一想,那就改吧,誰讓他是老闆呢。接著,你的遊戲策劃案(改).docx完成了,繼續給老闆過目。

這時候,老闆辦公室正好有其他人在,就一起看了這份文件,其他人自然也想發揮一下他們的聰明才智,就提出了各種各樣的意見,老闆一拍桌子,改!你就回去繼續改你的策劃案了。經過了無數的掙扎和煎熬,你的遊戲策劃案(改改).docx完成了。

然後,你滿懷希望地又走進了老闆辦公室,結果發現老闆辦公室又有人了。他們也對這個策劃有點看法,於是你就又回去修改了,這時候你發現要寫得東西太多,你想讓別人幫忙一起弄,然後拷貝了一份遊戲策劃案(改改)-副本.docx給了他。又經過了一番掙扎,終於把遊戲策劃案(改改改).docx完成了,這時候同事的遊戲策劃案(改改改)-副本.docx也完成了,你就糾結了!怎麼合併這兩份文件呢?

好不容易將文件合併好了,你又滿懷希望地去了老闆辦公室,老闆看了你的策劃案之後,悠悠的說了一句:“還是之前的策劃比較好”。Duang,你就倒地了,上哪去找之前的策劃案啊?

7822237-803c01c267904699.png
示例

這個時候,就需要Git出馬了。你可以將所有的修改通過Git提交,儲存每一次修改的副本,這樣你就可以在任何時候獲取到以前改過的版本。更棒的是,它可以讓你同事也受益,你不用再拷貝文件給同事讓他改,而是從Git倉庫中獲取文件,改完之後提交,你使用Git掃一眼就看出有什麼差別,這樣就太省事了。

注意:所有的版本控制系統都只能跟蹤文字檔案的改動,比如txt檔案、網頁、程式程式碼等等,Git也不例外。

GitHub是什麼?

7822237-c5fb166ed27717b1.png
GitHub

GitHub是一個倉庫。使用Git總是需要一個儲存這些檔案的地方,這個地方就是倉庫。你可以在本地建立一個倉庫,也可以使用遠端倉庫,GitHub就是一個遠端倉庫。你可以將程式碼或者文件儲存到這個倉庫裡,別人也可以訪問你的倉庫,從你的倉庫中獲取你想要分享的重要內容。同時,其他人修改了倉庫中的內容也可以上傳(當然需要經過你的同意),這樣,你的內容就更完整,更充實了。

Git在Windows上的安裝

因為筆者是在Windows下進行開發,所以只介紹Windows下的安裝方式。其實很簡單,去官網下載安裝程式,然後一路next安裝完成即可。安裝完成後,在某一個目錄下面右擊檢視是否有Git的按鈕,如果有,表示已經安裝成功:

7822237-fe5332a2db362420.png
右鍵選單

點選Git Bash Here按鈕,開啟Shell,我們還有最後一步要設定。在命令列下面輸入:

git config --global user.name "Name"
git config --global user.email "email@email.com"

用你的名字和電子郵件地址替換上面的Name和email@email.com。因為Git是分散式版本控制系統,所以每個機器都需要又自己的“門牌號”,name和email就相當於是你機器的門牌號。不用擔心有人故意冒充別人的門牌號,這是有辦法可以查的。

Git的基本操作

設定好後,我們來熟悉一下基本操作。最常用的操作有:

  • 初始化倉庫
  • 新增檔案
  • 提交修改
  • 狀態查詢
  • 檔案比較
  • 日誌檢視
  • 版本回滾
  • 刪除檔案
初始化倉庫

隨便在哪個目錄下建立一個資料夾,取名為repository,表示倉庫。當然你可以隨便取什麼名字,只要不取中文名就可以(路徑中也不能有中文)。

在repository資料夾下啟動Git命令列,輸入下面的命令:

git init

當看到有如下的輸出的時候,倉庫就初始化好了:


7822237-3cb5f454683fa9f1.png
初始化倉庫

開啟repository資料夾,發現資料夾下面有一個.git的隱藏資料夾:


7822237-6083fc6bbd407b1f.png
初始化倉庫完畢
新增檔案與提交修改

在repository目錄下新建一個readme.txt檔案,輸入兩行文字:

Git is a very useful tool.
GitHub is a very wonderful repository.

我們只需要簡單的兩步就可以將readme.txt檔案納入Git的管轄下。第一步:將檔案新增到倉庫。第二步:提交檔案到倉庫。轉換成Git命令就是:

git add readme.txt
git commit -m "Add readme file"

解釋一下'git commit'命令,-m引數後面輸入的是本次提交的說明,比如"Add readme file"這種。說明必須是有意義的,說明本次提交了哪些內容,做了什麼修改,這樣別人不用看你的檔案光看說明就可以知道你做了什麼,便於協作。

7822237-499f5423f927ef2f.png
新增檔案與提交修改

提醒:每次提交都必須有有意義的說明,否則時間長了就會找不到檔案!!!

狀態檢視

繼續修改檔案,新增一行I use git to control my files.。這時候,有一個快遞來了,你去收了個快遞,回來之後忘記了這個檔案有沒有提交怎麼辦?哼哼,別急,有方法。在Shell中輸入git status就可以看到了:

7822237-d0c581fc657198b6.png
git status效果

Git提示,有一個檔案修改了但是沒有提交,修改的檔案是readme.txt。

檔案比較

一個激靈,你忘了修改了什麼東西,於是使用另一個命令來比較檔案:

git diff readme.txt

git就提示了你有什麼東西修改了:

7822237-16b2446a60908e39.png
git diff提示

確定無誤之後,你使用git add和'git commit'命令上傳了檔案。為了確定上傳成功,你又使用了'git status'命令檢視狀態,發現上傳成功了。

日誌檢視與版本回滾

某天夜裡,你加班到很晚,心裡非常煩躁,咒罵著老闆沒人性,在文件裡寫下了My boss is so stupid並且提交了。第二天,你清醒了,那個著急啊,寫了老闆壞話還提交了,要是被老闆看到了這不得翻了天嗎。可是你忘了提交的版本號,這可怎麼辦?趕緊查git手冊,所幸發現了一條命令可以檢視日誌,於是你興高采烈的輸入了git log:

7822237-02a39bb4f9efbaaf.png
git log

終於抓到了罪魁禍首,就是那個'my boss is stupid'的版本。這下你就放心了,志得意滿的輸入了回滾命令'git reset --hard HEAD^'
7822237-6b64f5da1e68e2f7.png
git reset

Git提示你已經回到了7123466版本,你鬆了一大口氣,因為這版本號是上一個版本的版本號。趕緊上傳覆蓋,以免其他人看到。

HEAD^ 表示上一個版本,HEAD^ ^ 表示上上一個版本,HEAD^ ^ ^
嘛,相信你不會想這麼用。我們可以直接用版本號來替代,版本號不用輸完整,只需要前幾位讓Git能準確找到版本就可以了。比如,上面的命令可以換成git reset --hard 7123466,一樣可以達到目的。

小提示:如果git log出來的日誌太多,你已經查到想要的版本,可以按q鍵退出日誌檢視命令,注意不能用ctrl+c,會無法繼續輸入命令,切記切記!

刪除檔案

時光荏苒,你發現readme檔案沒有用了,這時候你就想將它從倉庫中刪除,於是,你輸入了'git rm readme.txt'命令:


7822237-e0f74f8f937efd1f.png
git rm效果

Git提示,你已經把readme檔案刪掉了,你長長的撥出一口氣,事情總算是完結了。

分支

程式碼管理中,最常用的就是分支功能。在開發版本上打一個分支用於修復BUG,修復之後把分支合併到開發版本中,這幾乎是工作的常態。
要檢視當前的分支狀況,我們需要用到的命令是git branch

7822237-bd35c96dc0ad6b72.png

可以看到,當前我的版本中有兩個分支,master和test。其中,test顯示為綠色字,並且前面還有一個*號,說明我們當前所操作的就是這個test分支。要切換分支也很容易,使用命令git checkout 分支名就可以了:
7822237-3203b66f9a3d6d79.png

如果你想建立一個新分支,可以使用git checkout -b 分支名

7822237-6d5cf6f848d46766.png

當你在新分支上的工作完成,想將新分支的內容合併到老分支上時,首先必須要切換到老分支上,然後使用git merge 新分支名來合併:

7822237-4f99e564d473feeb.png

這裡合併沒有什麼問題,非常順利。當然也有不順利的時候,這時候你就要處理衝突了,有時候衝突解決起來是個非常麻煩的事情。所以,最好的方式就是解決完一個問題就合併一次,這樣,在多人協作的時候效率會高點。

末了,新分支也沒啥用了,刪掉吧:

7822237-1c03bbabdbcfbe8a.png

刪除之前要注意,你不能刪除正在操作的分支。也就是說,如果你想要刪除newtest分支,你必須先切換到別的分支上(例如master),然後再呼叫 git branch -d newtest來刪除newtest分支。刪除完之後檢查一下,確保分支確實被刪除了。

剩下的是一些隨著時間流逝,慢慢才會用到的命令
命令 註釋
git add . 新增所有未納入倉庫管理的檔案
git checkout . 丟棄所有修改,將檔案恢復到之前的乾淨狀態
git tag 用於給程式碼打上標籤,標記當前程式碼的狀態是什麼。常見的形式如:git tag -a v0.0 -m "註釋"。表示當前程式碼版本號為0.0,並且可以加上註釋來說明這個版本是做什麼用的(在封板的時候極為有用)

GitHub的基本操作

首先,到官網去註冊一個賬號,根據它的提示一步步來就可以。

7822237-c7410ccfefd9a307.png
GitHub註冊頁面

完成註冊後就登入,在介面上點選右側的“start a project”或者右上角的“+”號選擇“new repository”


7822237-67b583683f071922.png
登入進去之後的介面

7822237-6a9307f29979dc53.png
建立repository介面

給你的倉庫取一個響亮的名字,比如大名鼎鼎的Hello World,填上描述,選擇Public託管方式(事實上你也沒法選Private,因為Private是要保護費的),然後點選左下角的“Create repository”按鈕就成功建立了一個倉庫。

完了,GitHub的準備工作就完成了。

Git與GitHub的互動

為了使本地的Git和遠端的GitHub能相互識別,我們需要讓雙方都儲存一份憑據。

建立憑據(SSH Key)

開啟Git Bash,輸入下面的命令

ssh-keygen -t rsa -C "youremail@example.com"

一路回車,不需要設定其他的東西,完成之後再使用者主目錄裡找到一個.ssh目錄,裡面有id_rsa和id_rsa.pub兩個檔案,這兩個就是憑據(SSH Key),id_rsa裡存放的是私鑰,id_rsa.pub裡存放的是公鑰。開啟id_rsa.pub,複製其中的內容。

設定GitHub賬戶中的SSH Key

點選頭像旁的小下三角按鈕,在彈出的選單中選擇Settings。在左側的Personal settings裡選擇“SSH and GPG keys”。點選SSH keys右側的New SSH key按鈕:


7822237-43a1fe0726d3290e.png
設定介面

將複製的公鑰拷貝到Key下方的編輯框裡,設定一個合適的Title(比如Company),點選Add SSH key。我們的憑據就設定好了。

從遠端庫中克隆

上一步我們建立了一個Hello World倉庫,怎麼把它down到本地呢,很簡單,使用git clone命令就可以了。

7822237-a247a2d83f4bb639.png
git clone

clone的路徑可以點選專案中的“Clone and download”按鈕找到:
7822237-261397db5cd215ec.png
路徑

點選圖中框起來的按鈕,你就可以找到SSH路徑了。

down下來之後,你就可以使用上面的命令來操作本地庫了。操作完成後,使用git push就可以將本地倉庫中的內容推送到GitHub中:

7822237-2bb08c823b3f72fc.png
git push命令

如果你網頁上對檔案做了改動,那也沒什麼關係,在對應的目錄中使用'git pull'就可以把最新的檔案down下來了:


7822237-8ddf3a8392d0d688.png
git pull命令

怎麼樣,是不是非常簡單?對攻城獅來說簡直就是天大的福音,頓時被一股巨大的幸福感包圍!

用命令列不方便?不要緊,我們有圖形介面!

.net Framework 4.7.2 離線安裝包
sourcetree安裝包
安裝完成之後的配置
繞過註冊的方式
https://blog.csdn.net/mjg0101001/article/details/78653994
新增ssa金鑰的方式

7822237-dccbc415895d79f8.png

小結

經過上面的學習,相信你已經可以使用Git和GitHub了。當然,這只是初步的使用,我們學習的目的就是為了使用,所以在文章中沒有涉及到任何複雜的東西(甚至連繞個彎的東西都沒有),只要能開始使用,剩下的一切都好說。

參考資料

Git教程:非常好的git教程
GitHub指導:官網的東西不可不看

相關文章