了解一下 Git

為什么要學(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):

image

看著這個還要配置一下:

鼠標(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 變成了可以管理的倉庫。

image

這時候 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ū)。

將文件添加到暫存區(qū)

如果和上面一樣,沒有任何提示,說明已經(jīng)添加成功了。

第二步:用命令 git commit 告訴 Git ,把文件提交到倉庫里。

image

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

image

文件的修改

接下來修改一下 readme.txt 里面的內(nèi)容,添加這么一行「我學(xué)會了git的修改啦」

然后用命令 git status 來查看一下會發(fā)生什么。

image

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

接下來我想看看 readme.txt 文件修改了那些內(nèi)容,可以使用命令 git diff readme.txt 查看。

修改的內(nèi)容

上邊可以看到,文件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ā)好了需求之后,我們提交到倉庫中去。

記得怎么做嗎?


提交第一天的開發(fā)任務(wù)

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

在 demo.txt 中寫入「添加一個需求」

第一天下班前的需求

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

可以看到是從第二個 git status 開始下班前的修改操作的??梢钥吹轿逸斎肓艘粋€ git add 后面沒有加文件名,它提示我可以使用 git add .

好了到這里第一天的開發(fā)已經(jīng)完成了。高高興興回家了。

第二天,產(chǎn)品經(jīng)理跑來說昨天下班前的修改是不需要的。我們要回滾到上次的文件。... 好吧,可以。
從暫存區(qū)回滾到工作區(qū)
命令:`git reset HEAD demo.txt

從暫存區(qū)回滾到工作區(qū)

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

把工作區(qū)的修改去掉

再打開看一下文件:
第一天下班前的修改就不存在了

好了,開始第二天的開發(fā)。

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

第二天的開發(fā)任務(wù)

完成之后,提交到版本庫去。
第二天的開發(fā)

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

好了,看一下工作區(qū)的內(nèi)容:
工作區(qū)

好了,第二天的開發(fā)已經(jīng)去掉了。

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

清空本地工作區(qū)的開發(fā)

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

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

遠程倉庫

目前我們使用的 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 。不知道怎么找。好吧。傳送門

創(chuàng)建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è)置的密碼。這里同樣沒有顯示。輸入之后看到成功了。開心。

這里可以再次查看一下連接:


image.png

這一次知道了,這里的密碼還是要輸入一次的。我的密碼「1326628437」 怕忘記,在此記錄一下,反正也沒人能看到這里。

添加遠程倉庫

在 github 中新建一個倉庫。

創(chuàng)建一個倉庫

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

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

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

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

接著想增加一些內(nèi)容,然后在推到遠程倉庫。
打開文件 README.md 輸入「second commit 」。
這次就只要執(zhí)行命令

  • git add README.md
  • git 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 呀。傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容