1. 程式人生 > >Git 你會嗎?

Git 你會嗎?

為什麼要學 Git?

  • 完整的版本控制功能,解決多人協助問題。
  • 提高開發效率
  • 牛逼人都在用
  • 要習慣把自己的程式碼同步到 github 上。不管多爛的程式碼。

Git 是什麼?

Git 是目前世界上最先進的分散式版本控制系統。
原理

  • Workspace: 工作區
  • Index/Stage: 暫存區
  • Repository: 倉庫區(本地倉庫)
  • Remote: 遠端倉庫

SVN 與 Git 的最主要區別?

SVN 是集中式版本控制系統,版本庫是集中放在中央伺服器的,工作的時候,用的都是自己的電腦,所以首先要從中央伺服器那裡下載最新的版本,工作之後,需要把自己修改的地方或是工作的內容推送到中央伺服器。集中式版本控制系統必須聯網才能工作。如果在區域網還可以,頻寬夠大,下載速度夠快。如果在網際網路速度慢的情況下就悲催了。

Git 是分散式版本控制系統,它就沒有中央伺服器,每一個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網。因為版本就在自己的電腦上,那怎麼協作工作呢?比如說我在我的電腦上改了檔案 A ,其他人在他們的電腦上更改了檔案 B ,這時,只需要把各自修改的地方推送給對方,就可以看見對方的修改了。

在 Windows 上安裝 Git

直接在官網上安裝就好,傳送門

安裝之後在桌面右鍵就會出現:

看著這個還要配置一下:

滑鼠右擊開啟 Git Bash 或者在選單裡搜尋 Git Bash,設定 user.name 和 user.email 配置資訊:


git config -
-global user.name "使用者名稱" git config --global user.email "你的郵箱"

因為 Git 是分散式版本控制系統,所以要填寫使用者名稱和密碼作為唯一的標識。

注意:git config --global 引數,有了這個引數,表示這臺機器上所有的 Git 倉庫都會使用這個配置,當然你也可以對某個倉庫指定不同的使用者名稱和郵箱

如何操作

建立版本庫

什麼是版本庫?

版本庫又名倉庫,英文名是 repository ,可以簡單的理解為目錄,這個目錄裡的所有檔案都可以被 Git 管理起來,每個檔案的修改、刪除。Git 都可以追蹤,以便任何時刻都可以追蹤歷史,或者還可以在將來某個時刻將檔案還原。

所以建立一個版本也很簡單。

我在 E 盤資料夾 git 下點選右鍵選中 Git Bash 。

輸入命令 git init

通過命令 git init 把當前資料夾 git 變成了可以管理的倉庫。

這時候 git 資料夾下會多了一個 .git 的資料夾。這個檔案是 Git 來跟蹤管理版本的,沒事別動這裡面的東西,謹記謹記!!!

把檔案新增到版本庫裡

首先明確一點,所有的版本控制系統,只能跟蹤文字檔案的改動,比如 TXT 檔案、程式碼、網頁等這些。版本控制系統可以告訴你每次改動的情況。但是圖片,視訊這些二進位制檔案雖然也能用版本控制系統控制,但是沒有辦法跟蹤檔案的變化。圖片用 PS 弄過是沒有辦法返回以前的版本的。

一個例子:

我在版本庫 git 檔案下新建一個文字檔案 readme.txt 。

寫入內容:「第一次使用分散式版本控制系統」

第一步:使用 git add readme.txt 命令,將檔案新增到暫存區。

將檔案新增到暫存區

如果和上面一樣,沒有任何提示,說明已經新增成功了。

第二步:用命令 git commit 告訴 Git ,把檔案提交到倉庫裡。

現在我們已經提交了一個檔案 readme.txt 到倉庫裡了。可以使用命令 git status 來檢視狀態,比如說是否還有檔案沒有提交等。

檔案的修改

接下來修改一下 readme.txt 裡面的內容,新增這麼一行「我學會了git的修改啦」

然後用命令 git status 來檢視一下會發生什麼。

他說檔案改變了,但是沒有提交到倉庫中去。

接下來我想看看 readme.txt 檔案修改了那些內容,可以使用命令 git diff readme.txt 檢視。
修改的內容
上邊可以看到,檔案readme.txt 的內容由一行變成了兩行,雖然編碼不正確,湊合這還能看。

在生產中應該都是程式碼的,這種中文很少出現。所以也不用太擔心。

知道了對 readme.txt 的更改之後,就可以放心的提交到倉庫了。
提交修改跟之前的提交檔案是一樣的「第一步是 git add ,第二步是 git commit 。」
提交修改
事實上,可以在任何一步結束後用命令 git status 來檢視當前狀態。

總結一下:把檔案放到 git 的倉庫。

  • 第一步: git init 初始化倉庫。
  • 第二步:git add 新增檔案到暫存區。
  • 第三步 git commit 提交檔案到倉庫。
    git.png

工作場景

產品經理說我們來搞開發吧,底下一群嗷嗷待哺的小鮮肉:好啊好啊。佈置了第一天的需求。

第一天的需求是什麼呢。我們來模擬一下:

新建一個檔案 demo.txt 寫入「第一天產品經理的需求」

需求檔案
開發好了需求之後,我們提交到倉庫中去。

記得怎麼做嗎?
提交第一天的開發任務
好了,任務完成,忙裡偷閒耍會手機(偷樂)。快到下班的時候。產品經理來說要加一個需求。好吧,馬不停蹄趕在下班前完成,但是還沒有自測,不能提交到倉庫中去,好吧,暫且提交到暫存區。

在 demo.txt 中寫入「新增一個需求」

第一天下班前的需求
好了,提交到暫存區去:
提交到暫存區
可以看到是從第二個 git status 開始下班前的修改操作的。可以看到我輸入了一個 git add 後面沒有加檔名,它提示我可以使用 git add .

好了到這裡第一天的開發已經完成了。高高興興回家了。

第二天,產品經理跑來說昨天下班前的修改是不需要的。我們要回滾到上次的檔案。… 好吧,可以。
從暫存區回滾到工作區
命令:`git reset HEAD demo.txt
從暫存區回滾到工作區

好了,暫存區沒有了,但是工作區還有。可以使用命令 git checkout demo.txt來處理工作區的修改。
把工作區的修改去掉
再開啟看一下檔案:
第一天下班前的修改就不存在了

好了,開始第二天的開發。

在檔案 demo.txt 中開發第二天的需求:寫入「第二天產品經理的需求」

第二天的開發任務
完成之後,提交到版本庫去。
第二天的開發
完成之後正想休息一下呢,產品經理來說其實今天的開發需求不用做。可是我們已經提交到版本庫中去了。那怎麼做才能回滾到第一次裡面呢?
可以通過之前說的命令 git log 檢視我們兩次提交的版本號。通過命令 git reset --hard 加版本號。這個命令是倉庫、暫存區和工作區都回滾到第一次的提交。
回滾到版本一
好了,看一下工作區的內容:
工作區
好了,第二天的開發已經去掉了。

接著等產品經理的命令。
恩?產品經理說開發商把錢拿跑了,把倉庫清空吧。心理 MMP 。
清空本地工作區的開發命令 git rm demo.txt
清空本地工作區的開發
本地清空,但是暫存區和倉庫還沒有清空。
清空倉庫
好了,一整套流程完成了。
總結一下工作流:
git 工作流

遠端倉庫

目前我們使用的 Git 都是在本地操作,如果想分享程式碼,或者跟其他人合作來完成專案。我們就需要把資料放到一個公共的地方。就用全球最大的同性交友網站吧。

建立 SSH Key

為啥要建立這個東西呢?因為本地跟 github 連線是通過 ssh 來加密傳輸的。可以使用命令 ssh-keygen -t rsa -C "[email protected]" 來建立。這裡的郵箱是你註冊 github 時的郵箱。
這裡找到你的 github 的 ssh 設定的地方去,新建一個 SSH key 。不知道怎麼找。好吧。傳送門
建立ssh key
點選 new ssh key

這裡的 key 要在使用者目錄的「.ssh」下開啟 git bash 命令列輸入 :ssh-keygen -t rsa -C "[email protected]
接下來的操作有點複雜。我是看了教程,但是出現了教程裡沒有的東西。再次記錄一下。
輸入命令之後,會讓你輸入個檔名。這裡這個檔名最好輸入 id_rsa 。
然後會讓你輸入密碼、確認密碼。這才行。
密碼預設是不顯示的
根據提示,它說公鑰是存放在目錄 「id_rsa.pub」祕鑰是存放在目錄「id_rsa」。這裡公鑰可以隨便看。祕鑰要儲存好。

好了,我們把公鑰展示出來,複製到 github 上去。
獲取公鑰
新增 ssh key 之後,我們看一下是否成功連線 github 。可以使用命令 ssh -T [email protected] 檢視。

這裡也有坑,如果你不繼續嘗試下去完了。輸入 yes 。之後又讓輸入密碼。就是剛才我們設定的密碼。這裡同樣沒有顯示。輸入之後看到成功了。開心。

這裡可以再次檢視一下連線:
image.png
這一次知道了,這裡的密碼還是要輸入一次的。我的密碼「1326628437」 怕忘記,在此記錄一下,反正也沒人能看到這裡。

新增遠端倉庫

在 github 中新建一個倉庫。
建立一個倉庫
github 說可以有兩種方式來建立倉庫。一種是新建一個倉庫。按照提示的那樣來提交到遠端倉庫。一種是直接把已有的倉庫提交的遠端倉庫中去。相信英語好的你肯定能看懂。
這裡就以第一種方式演示一下。
建立檔案
這裡在一個空的資料夾裡使用命令 echo "# Learn_git" >> README.md 建立了一個名為 README.md 的檔案,寫入 「# Learn_git」。
echo 的意思就是輸入,然後 「>>」的意思就是追加。
提交到本地倉庫
提交到本地倉庫去。
接下來就是提交到遠端倉庫。
提交到遠端倉庫
其實按照提示操作就可以啦。重新整理 github 上剛才建立的倉庫就可以看到啦。
github 倉庫
接著想增加一些內容,然後在推到遠端倉庫。
開啟檔案 README.md 輸入「second commit 」。
這次就只要執行命令

  • git add README.md
  • git commit
  • git push
    就可以啦,因為之前我們已經把本地的倉庫和遠端倉庫關聯起來啦。

    看一下遠端的倉庫:
    遠端倉庫
    這樣就可以了。以後你可以寫自己的程式碼把程式碼放到 github 上面的倉庫裡。

克隆倉庫

克隆倉庫的意思是把遠端倉庫裡的檔案克隆到本地,在本地開發之後提交到遠端倉庫,以此來達到多人協助的目的。
其實就一個命令就可以了 git clone 後面加 github 上倉庫的連結就好了。
在本地開發完成之後

  • git add
  • git commit
  • git push

這裡因為本地倉庫是從遠端倉庫克隆下來的,不用再連線了,直接 git push 就可以。

總結

Git 是很有用的,建議大家學習。花不了太多時間就可以掌握這項技能,何樂而不為呢。

最後歡迎大家 star 我的 github 呀。傳送門