為什么要學(xué) Git?
- 完整的版本控制功能,解決多人協(xié)助問題。
- 提高開發(fā)效率
- 牛逼人都在用
- 要習(xí)慣把自己的代碼同步到 github 上。不管多爛的代碼。
Git 是什么?
Git 是目前世界上最先進的分布式版本控制系統(tǒng)。

- Workspace: 工作區(qū)
- Index/Stage: 暫存區(qū)
- Repository: 倉庫區(qū)(本地倉庫)
- Remote: 遠程倉庫
SVN 與 Git 的最主要區(qū)別?
SVN 是集中式版本控制系統(tǒng),版本庫是集中放在中央服務(wù)器的,工作的時候,用的都是自己的電腦,所以首先要從中央服務(wù)器那里下載最新的版本,工作之后,需要把自己修改的地方或是工作的內(nèi)容推送到中央服務(wù)器。集中式版本控制系統(tǒng)必須聯(lián)網(wǎng)才能工作。如果在局域網(wǎng)還可以,帶寬夠大,下載速度夠快。如果在互聯(lián)網(wǎng)速度慢的情況下就悲催了。
Git 是分布式版本控制系統(tǒng),它就沒有中央服務(wù)器,每一個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯(lián)網(wǎng)。因為版本就在自己的電腦上,那怎么協(xié)作工作呢?比如說我在我的電腦上改了文件 A ,其他人在他們的電腦上更改了文件 B ,這時,只需要把各自修改的地方推送給對方,就可以看見對方的修改了。
在 Windows 上安裝 Git
直接在官網(wǎng)上安裝就好,傳送門
安裝之后在桌面右鍵就會出現(xiàn):

看著這個還要配置一下:
鼠標(biāo)右擊打開 Git Bash 或者在菜單里搜索 Git Bash,設(shè)置 user.name 和 user.email 配置信息:
git config --global user.name "用戶名"
git config --global user.email "你的郵箱"
因為 Git 是分布式版本控制系統(tǒng),所以要填寫用戶名和密碼作為唯一的標(biāo)識。
注意:git config --global 參數(shù),有了這個參數(shù),表示這臺機器上所有的 Git 倉庫都會使用這個配置,當(dāng)然你也可以對某個倉庫指定不同的用戶名和郵箱
如何操作
創(chuàng)建版本庫
什么是版本庫?
版本庫又名倉庫,英文名是 repository ,可以簡單的理解為目錄,這個目錄里的所有文件都可以被 Git 管理起來,每個文件的修改、刪除。Git 都可以追蹤,以便任何時刻都可以追蹤歷史,或者還可以在將來某個時刻將文件還原。
所以創(chuàng)建一個版本也很簡單。
我在 E 盤文件夾 git 下點擊右鍵選中 Git Bash 。
輸入命令 git init
通過命令 git init 把當(dāng)前文件夾 git 變成了可以管理的倉庫。

這時候 git 文件夾下會多了一個 .git 的文件夾。這個文件是 Git 來跟蹤管理版本的,沒事別動這里面的東西,謹記謹記!??!
把文件添加到版本庫里
首先明確一點,所有的版本控制系統(tǒng),只能跟蹤文本文件的改動,比如 TXT 文件、代碼、網(wǎng)頁等這些。版本控制系統(tǒng)可以告訴你每次改動的情況。但是圖片,視頻這些二進制文件雖然也能用版本控制系統(tǒng)控制,但是沒有辦法跟蹤文件的變化。圖片用 PS 弄過是沒有辦法返回以前的版本的。
一個例子:
我在版本庫 git 文件下新建一個文本文件 readme.txt 。
寫入內(nèi)容:「第一次使用分布式版本控制系統(tǒng)」
第一步:使用 git add readme.txt 命令,將文件添加到暫存區(qū)。

如果和上面一樣,沒有任何提示,說明已經(jīng)添加成功了。
第二步:用命令 git commit 告訴 Git ,把文件提交到倉庫里。

現(xiàn)在我們已經(jīng)提交了一個文件 readme.txt 到倉庫里了??梢允褂妹?git status 來查看狀態(tài),比如說是否還有文件沒有提交等。

文件的修改
接下來修改一下 readme.txt 里面的內(nèi)容,添加這么一行「我學(xué)會了git的修改啦」
然后用命令 git status 來查看一下會發(fā)生什么。

他說文件改變了,但是沒有提交到倉庫中去。
接下來我想看看 readme.txt 文件修改了那些內(nèi)容,可以使用命令 git diff readme.txt 查看。

上邊可以看到,文件readme.txt 的內(nèi)容由一行變成了兩行,雖然編碼不正確,湊合這還能看。
在生產(chǎn)中應(yīng)該都是代碼的,這種中文很少出現(xiàn)。所以也不用太擔(dān)心。
知道了對 readme.txt 的更改之后,就可以放心的提交到倉庫了。
提交修改跟之前的提交文件是一樣的「第一步是 git add ,第二步是 git commit ?!?br>

事實上,可以在任何一步結(jié)束后用命令
git status 來查看當(dāng)前狀態(tài)。
總結(jié)一下:把文件放到 git 的倉庫。
- 第一步: git init 初始化倉庫。
- 第二步:git add 添加文件到暫存區(qū)。
-
第三步 git commit 提交文件到倉庫。
git.png
工作場景
產(chǎn)品經(jīng)理說我們來搞開發(fā)吧,底下一群嗷嗷待哺的小鮮肉:好啊好啊。布置了第一天的需求。
第一天的需求是什么呢。我們來模擬一下:
新建一個文件 demo.txt 寫入「第一天產(chǎn)品經(jīng)理的需求」

開發(fā)好了需求之后,我們提交到倉庫中去。
記得怎么做嗎?

好了,任務(wù)完成,忙里偷閑耍會手機(偷樂)??斓较掳嗟臅r候。產(chǎn)品經(jīng)理來說要加一個需求。好吧,馬不停蹄趕在下班前完成,但是還沒有自測,不能提交到倉庫中去,好吧,暫且提交到暫存區(qū)。
在 demo.txt 中寫入「添加一個需求」

好了,提交到暫存區(qū)去:

可以看到是從第二個 git status 開始下班前的修改操作的??梢钥吹轿逸斎肓艘粋€
git add 后面沒有加文件名,它提示我可以使用 git add . 。
好了到這里第一天的開發(fā)已經(jīng)完成了。高高興興回家了。
第二天,產(chǎn)品經(jīng)理跑來說昨天下班前的修改是不需要的。我們要回滾到上次的文件。... 好吧,可以。
從暫存區(qū)回滾到工作區(qū):
命令:`git reset HEAD demo.txt

好了,暫存區(qū)沒有了,但是工作區(qū)還有??梢允褂妹?git checkout demo.txt來處理工作區(qū)的修改。

再打開看一下文件:

好了,開始第二天的開發(fā)。
在文件 demo.txt 中開發(fā)第二天的需求:寫入「第二天產(chǎn)品經(jīng)理的需求」

完成之后,提交到版本庫去。

完成之后正想休息一下呢,產(chǎn)品經(jīng)理來說其實今天的開發(fā)需求不用做??墒俏覀円呀?jīng)提交到版本庫中去了。那怎么做才能回滾到第一次里面呢?
可以通過之前說的命令
git log 查看我們兩次提交的版本號。通過命令 git reset --hard 加版本號。這個命令是倉庫、暫存區(qū)和工作區(qū)都回滾到第一次的提交。
好了,看一下工作區(qū)的內(nèi)容:

好了,第二天的開發(fā)已經(jīng)去掉了。
接著等產(chǎn)品經(jīng)理的命令。
恩?產(chǎn)品經(jīng)理說開發(fā)商把錢拿跑了,把倉庫清空吧。心理 MMP 。
清空本地工作區(qū)的開發(fā)命令 git rm demo.txt

本地清空,但是暫存區(qū)和倉庫還沒有清空。

好了,一整套流程完成了。
總結(jié)一下工作流:

遠程倉庫
目前我們使用的 Git 都是在本地操作,如果想分享代碼,或者跟其他人合作來完成項目。我們就需要把數(shù)據(jù)放到一個公共的地方。就用全球最大的同性交友網(wǎng)站吧。
創(chuàng)建 SSH Key
為啥要創(chuàng)建這個東西呢?因為本地跟 github 連接是通過 ssh 來加密傳輸?shù)摹?梢允褂妹?ssh-keygen -t rsa -C "youremail@example.com" 來創(chuàng)建。這里的郵箱是你注冊 github 時的郵箱。
這里找到你的 github 的 ssh 設(shè)置的地方去,新建一個 SSH key 。不知道怎么找。好吧。傳送門

點擊 new ssh key

這里的 key 要在用戶目錄的「.ssh」下打開 git bash 命令行輸入 :
ssh-keygen -t rsa -C "youremail@example.com。接下來的操作有點復(fù)雜。我是看了教程,但是出現(xiàn)了教程里沒有的東西。再次記錄一下。
輸入命令之后,會讓你輸入個文件名。這里這個文件名最好輸入 id_rsa 。
然后會讓你輸入密碼、確認密碼。這才行。

根據(jù)提示,它說公鑰是存放在目錄 「id_rsa.pub」秘鑰是存放在目錄「id_rsa」。這里公鑰可以隨便看。秘鑰要保存好。
好了,我們把公鑰展示出來,復(fù)制到 github 上去。

添加 ssh key 之后,我們看一下是否成功連接 github 。可以使用命令
ssh -T git@github.com 查看。
這里也有坑,如果你不繼續(xù)嘗試下去完了。輸入 yes 。之后又讓輸入密碼。就是剛才我們設(shè)置的密碼。這里同樣沒有顯示。輸入之后看到成功了。開心。
這里可以再次查看一下連接:

這一次知道了,這里的密碼還是要輸入一次的。我的密碼「1326628437」 怕忘記,在此記錄一下,反正也沒人能看到這里。
添加遠程倉庫
在 github 中新建一個倉庫。

github 說可以有兩種方式來創(chuàng)建倉庫。一種是新建一個倉庫。按照提示的那樣來提交到遠程倉庫。一種是直接把已有的倉庫提交的遠程倉庫中去。相信英語好的你肯定能看懂。
這里就以第一種方式演示一下。

這里在一個空的文件夾里使用命令
echo "# Learn_git" >> README.md 創(chuàng)建了一個名為 README.md 的文件,寫入 「# Learn_git」。echo 的意思就是輸入,然后 「>>」的意思就是追加。

提交到本地倉庫去。
接下來就是提交到遠程倉庫。

其實按照提示操作就可以啦。刷新 github 上剛才創(chuàng)建的倉庫就可以看到啦。

接著想增加一些內(nèi)容,然后在推到遠程倉庫。
打開文件 README.md 輸入「second commit 」。
這次就只要執(zhí)行命令
git add README.mdgit commit-
git push
就可以啦,因為之前我們已經(jīng)把本地的倉庫和遠程倉庫關(guān)聯(lián)起來啦。
看一下遠程的倉庫:
遠程倉庫
這樣就可以了。以后你可以寫自己的代碼把代碼放到 github 上面的倉庫里。
克隆倉庫
克隆倉庫的意思是把遠程倉庫里的文件克隆到本地,在本地開發(fā)之后提交到遠程倉庫,以此來達到多人協(xié)助的目的。
其實就一個命令就可以了 git clone 后面加 github 上倉庫的鏈接就好了。
在本地開發(fā)完成之后
- git add
- git commit
- git push
這里因為本地倉庫是從遠程倉庫克隆下來的,不用再連接了,直接 git push 就可以。
總結(jié)
Git 是很有用的,建議大家學(xué)習(xí)?;ú涣颂鄷r間就可以掌握這項技能,何樂而不為呢。
最后歡迎大家 star 我的 github 呀。傳送門


