為什么要做版本控制?
在平時的工作中午阵,經(jīng)常會遇到寫文檔的事情,而寫文檔基本都不會一蹴而就享扔,總是會修修改改很多次底桂,而版本控制能夠記錄每次修改的版本,能夠進(jìn)行回溯惧眠。有很多版本控制工具籽懦,但是作為一個程序員,肯定是首推 Git 不解釋氛魁,由于我暫時還只是一個人自己鼓搗暮顺,所以不存在多人協(xié)作流程相關(guān)的東西,但是我有多臺設(shè)備秀存,我希望能夠在多臺設(shè)備上都能操作同樣的文件捶码,再結(jié)合對文件需要進(jìn)行版本控制,所以下面配置 Git 版本控制環(huán)境分需求進(jìn)行介紹或链,大家可以根據(jù)自己的需求進(jìn)行配置惫恼,環(huán)境是在windows系統(tǒng)下。
必需工具
基于需求 | 命令行 | 英文界面 | 中文界面 |
---|---|---|---|
單人本地 | Git | Git + TortoiseGit | Git + TortoiseGit + LanguagePack |
單人遠(yuǎn)程 | Git + ssh-keygen | Git + TortoiseGit + PuTTY | Git + TortoiseGit + PuTTY+ LanguagePack |
多人遠(yuǎn)程 | GitHub + Git + ssh-keygen | Git + TortoiseGit + PuTTY | GitHub no Chinese version, same as above |
- 單人本地:表示版本庫僅被單人在本地一臺機(jī)器上修改澳盐、更新祈纯、使用,能夠?qū)Ρ镜氐奈募M(jìn)行版本控制洞就,需求不高的話盆繁,這種情況下就可以滿足了;
- 單人遠(yuǎn)程:仍然是單人旬蟋,但是可能會有多個設(shè)備都想對這個版本庫進(jìn)行操作油昂,如果通過不斷的拷貝太過麻煩,可以自己建立一個遠(yuǎn)程的 Git 服務(wù)器,配置此多個設(shè)備都可以連接到 Git 服務(wù)器獲取版本庫冕碟,先拉后推拦惋,相當(dāng)于在模擬多人協(xié)同工作流程了;
- 多人遠(yuǎn)程:這里主要指 GitHub 提供的社交化編程安寺,可以把自己的東西上傳到 GitHub 上進(jìn)行開源厕妖,可能可以吸收到志同道合的朋友一起來維護(hù)一個項目,也是一種展示自己項目實力的方式挑庶;
- 命令行:通過 Git 提供的 bash 來執(zhí)行相關(guān) Git 命令言秸,可以練習(xí) Git 命令,不過的確上手比較困難一點(diǎn)迎捺,當(dāng)然举畸,大神就盡管用了;
- 英文界面:可以練習(xí)英語表達(dá)凳枝,可能初步上手會有點(diǎn)點(diǎn)困惑抄沮;
- 中文界面:可能是最適合小白新手入門的配置,推薦岖瑰;
- PS:Git其實也提供了界面的 GUI 操作叛买,右鍵選擇
Git GUI Here
個人覺得非常簡陋,還不如命令行敲起來舒服蹋订,所以如果用界面的話率挣,還是建議用 TortoiseGit 比較好。
工具分類
- Git:最基礎(chǔ)的工具辅辩,支持 Git 的相關(guān)命令难礼;
- ssh-keygen/PuTTY:生成公私鑰對的工具,如果要連接遠(yuǎn)程 Git 服務(wù)器玫锋,就需要生成一個公鑰和一個私鑰蛾茉,把公鑰放到遠(yuǎn)端的 Git 服務(wù)器中,私鑰保存在本地撩鹿,每次從遠(yuǎn)程克隆或拉取文件到本地和從本地推送文件到遠(yuǎn)程時都需要使用這一對公私鑰作為認(rèn)證手段谦炬,其中PuTTY是專門用來生成 TortoiseGit 可以識別的公私鑰對,普通由ssh-keygen生成的公私鑰無法被 TortoiseGit 所使用节沦;
- TortoiseGit:windows下的界面工具键思,支持通過各種按鈕進(jìn)行方便的克隆、拉取甫贯、推送吼鳞、對比、分支操作等叫搁;
- LanguagePack:是 TortoiseGit 的語言包赔桌,TortoiseGit 默認(rèn)為全英文界面供炎,可以安裝語言包轉(zhuǎn)換成中文;
配置工作
-
Git:直接下載安裝疾党,下一步往下點(diǎn)音诫,最后確定,只需要再配置一下全局的提交人信息即可雪位,隨便在某個文件夾下右鍵選擇
Git Bash Here
- 輸入
git config --global user.name "Chayeen"
竭钝,Chayeen
修改成你自己的名字,這里是在配置每次 Git 提交文件到版本庫時的提交人信息雹洗,主要用于多人協(xié)作時可以看到到底是誰進(jìn)行的此次提交香罐,方便找人; -
git config --global user.email "chayeenhuang@126.com"
时肿,同樣穴吹,把chayeenhuang@126.com
修改成你自己的郵箱即可;
- 輸入
-
ssh-keygen:主要工作就是生成公私鑰對嗜侮,windows應(yīng)該自帶該軟件,安裝 Git 后啥容,隨便在某個文件夾下右鍵選擇
Git Bash Here
- 輸入
cd ~/.ssh
:查看是否已經(jīng)有 id_rsa 和 id_rsa.pub 兩個文件锈颗,如果有,跳過下一步咪惠,沒有就下一步击吱; - 輸入
ssh-keygen.exe -t rsa -C "郵箱名"
回車,如ssh-keygen.exe -t rsa -C "chayeenhuang@126.com"
遥昧,回車之后要求輸入公私鑰存儲的文件名覆醇,如果直接回車,默認(rèn)文件名為 id_rsa炭臭,否則就是你輸入的名字永脓,建議直接回車(后續(xù) GitHub 默認(rèn)讀取的就是 id_rsa 名字的私鑰);然后會要求輸入密碼鞋仍,這個密碼其實是在對私鑰加密常摧,如果沒有輸密碼,別人如果拿到你的私鑰威创,他在使用的時候就可以直接使用落午,否則就需要輸入密碼才行。建議還是輸一個簡單的密碼肚豺,只是輸了之后溃斋,推送到遠(yuǎn)端 Git 服務(wù)器時,有時候就需要輸入密碼才能用吸申,稍微讓自己的操作又麻煩了點(diǎn)梗劫;
- 輸入
-
TortoiseGit 和 PuTTY:配置工作同上類似享甸,只是上面是通過命令行,而這里是通過界面按鈕在跳,正常安裝枪萄,下一步往下點(diǎn),最后確定即可猫妙;
- 安裝完成后瓷翻,在任意文件夾下右鍵,可看到
TortoiseGit
按鈕割坠,點(diǎn)擊齐帚; -
Settings
設(shè)置,彈出一個框彼哼,點(diǎn)擊確定对妄; -
General
,點(diǎn)擊Re-run First Start Wizard
敢朱; - 彈出一個框剪菱,第一頁設(shè)置語言,默認(rèn)英文拴签;第二頁可以不看孝常,跳過;第三頁蚓哩,瀏覽選中 Git.exe 的安裝路徑构灸;第四頁,配置 Git 提交的姓名和郵箱岸梨,
Chayeen
和chayeenhuang@126.com
喜颁;第五頁,把默認(rèn) OpenSSH 修改成TortoiseGitPlink
; - 還是在第五頁曹阔,點(diǎn)擊右側(cè)的
Generate PuTTY key pair
半开,彈出生成公私鑰的界面,點(diǎn)擊Generate
次兆,在 該界面框內(nèi) 移動鼠標(biāo)稿茉,直至進(jìn)度條滿生成公私鑰,然后點(diǎn)擊Save public Key
和Save private key
保存公私鑰在某個位置(后面要用)芥炭;這里可以輸入公私鑰密碼Key passphrase
漓库,之后如果要使用這個公私鑰之前就需要使用這個密碼才能使用,也可以不輸入园蝠,這樣任何人只要拿到這對公私鑰就可以使用渺蒿,同 ssh-keygen 相似; - TortoiseGit 還需要多做一步彪薛,在 pageant.exe 中還要進(jìn)一步配置才行:
- 找到 PuTTY 的安裝路徑茂装,找到執(zhí)行文件
pageant.exe
雙擊運(yùn)行怠蹂; - 打開桌面底部工作條右邊折疊起來的地方(就是一般收qq等軟件小圖標(biāo)的地方),找到 pageant 的圖表少态,右鍵
Add Key
城侧,找到上面 PuTTY 生成的私鑰添加即可;
- 找到 PuTTY 的安裝路徑茂装,找到執(zhí)行文件
- 安裝完成后瓷翻,在任意文件夾下右鍵,可看到
- LanguagePack:更沒有什么配置工作彼妻,只是在安裝它之前必須要先安裝 TortoiseGit 嫌佑,然后再安裝它,重啟即可侨歉。
至此屋摇,本地的配置工作告一段落,利用 Git 完成了基本軟件環(huán)境幽邓,然后利用 TortoiseGit 安裝了界面環(huán)境炮温,利用 ssh-keygen 和 PuTTY 完成了生成公私鑰的任務(wù),下面的配置則是在服務(wù)器端的操作牵舵。
-
Git 服務(wù)器搭建及配置:
- 如果是能夠聯(lián)外網(wǎng)的服務(wù)器柒啤,比如說阿里云這種,直接登錄到遠(yuǎn)端服務(wù)器畸颅,使用包管理工具
yum intall git
白修,依賴yum包管理工具就可以安裝了; - 建立專門操作版本控制的用戶 git重斑,并禁止它通過shell遠(yuǎn)程登錄:
-
useradd git
回車; -
passwd git
肯骇,回車輸入密碼2次窥浪,linux不會顯示密碼,這是正常的笛丙,直接輸就行了漾脂; -
vim /etc/passwd
,修改git用戶權(quán)限胚鸯,git:x:1000:1000::/home/git:/usr/bin/git-shell
骨稿,主要是把/home/git:
后面修改成/usr/bin/git-shell
即可;
-
- 建立遠(yuǎn)程倉庫姜钳,之后可以讓本地克隆它然后就開始開發(fā)了:
-
mkdir 文件夾
坦冠,在遠(yuǎn)端新建一個文件夾,作為遠(yuǎn)端倉庫位置哥桥,假設(shè)就是/home/demo
辙浑,后續(xù)會用到; -
cd demo
拟糕,進(jìn)入文件夾判呕; -
git init
倦踢,回車在該文件夾內(nèi)建立一個版本庫; -
git config --bool core.bare true
侠草,把該版本庫修改成一個 bare 裸倉庫辱挥,如果不是裸倉庫的話,在本地提交到遠(yuǎn)端的時候就會出現(xiàn)遠(yuǎn)端已經(jīng)存在工作樹边涕,本地工作樹提交沖突
的問題(深層次的原因不清楚晤碘,反正用這個命令就可以解決問題); -
cd ..
回到上層文件夾奥吩; -
chown -R git:git demo
修改該文件夾的用戶權(quán)限哼蛆,由于之前在服務(wù)器上搭建 git 的時候,新建了一個 git 用戶并限制了它的 shell 登錄(即不能使用 git 賬號登錄該服務(wù)器)霞赫,所以 sudo 切換到 git 用戶下建立倉庫不可行腮介,上述文件夾及操作都是在 root 用戶下,需要修改成 git 用戶端衰,這樣本地推送的時候才能夠正確推送上去叠洗,否則會出現(xiàn) git 用戶沒有對 root 建立的文件夾的寫權(quán)限而推送失敗。
-
- 添加公鑰到服務(wù)器上:
- 前面在本地建立了一對公私鑰旅东,但是并沒有在服務(wù)器上進(jìn)行配置灭抑,需要把公鑰配置到服務(wù)器中,這樣抵代,當(dāng)本地與服務(wù)器建立連接的時候腾节,就可以用本地的私鑰和服務(wù)器的公鑰進(jìn)行匹配了;
- 登錄遠(yuǎn)程服務(wù)器荤牍,打開git用戶主目錄下的.ssh目錄案腺,注意這里使用
cd ~/.ssh
是進(jìn)不去的,原因是登錄時是root用戶康吵,如果這么進(jìn)就進(jìn)入root主目錄了劈榨,所以只能cd /home/git/.ssh
回車; -
vim authorized_keys
晦嵌,把公鑰復(fù)制粘貼到文件里同辣,如果沒有這個文件,vim會自動新建一個新的惭载,文件名一定不能錯旱函。
- 如果是能夠聯(lián)外網(wǎng)的服務(wù)器柒啤,比如說阿里云這種,直接登錄到遠(yuǎn)端服務(wù)器畸颅,使用包管理工具
-
GitHub配置:
- 申請一個 GitHub 的賬號;
- 添加公鑰到 GitHub 的賬號中:
- 道理是一樣的描滔,登錄 GitHub 后陡舅,點(diǎn)擊
個人頭像
,選擇Setting
伴挚; - 點(diǎn)擊
SSH and GPG keys
靶衍,點(diǎn)擊按鈕New SSH key
灾炭,給公鑰取一個名字作為區(qū)分,然后把內(nèi)容貼在下面的內(nèi)容框中颅眶,保存即可蜈出; - 如果采用命令行,添加 ssh-keygen.exe 生成的那個涛酗,GitHub 默認(rèn)到 ~/.ssh文件下找 id_rsa 文件铡原,一定不能改變位置和名稱;
- 如果要用 TortoiseGit 商叹,必須添加 PuTTY 生成的那個燕刻,只要在 pageant 中配置過即可。
- 道理是一樣的描滔,登錄 GitHub 后陡舅,點(diǎn)擊
至此剖笙,所有的配置工作完成卵洗,這里簡單的梳理一下流程:
- 下載軟件、安裝弥咪;
- 生成公私鑰對过蹂;
- 把公鑰配置到遠(yuǎn)端;
- 開始工作聚至!
工作基本流程
-
僅使用Git:——命令行
- 新建一個文件夾酷勺;
- 進(jìn)入文件夾,右鍵扳躬,點(diǎn)擊
Git Bash Here
脆诉; - 輸入
git init
,在這個文件夾下新建了一個本地版本庫贷币,此時在文件夾下可以看到一個隱藏文件.git
库说; - 在該文件夾下,新建一個文件片择,如
test.txt
; -
git add test.txt
骚揍,添加文件到本地的暫存區(qū)字管,表示想要git跟蹤該文件的修改歷史; -
git commit -m "注釋"
信不,每次提交必須寫注釋嘲叔,用來解釋這次提交干了什么,便于回溯抽活,表示把該文件提交到本地倉庫硫戈,如果前面沒有配置提交人信息的話,這里就需要補(bǔ)充上下硕,否則不能提交丁逝; - 至此汁胆,僅在本地的版本控制基本就夠了,還有更多的 git 命令霜幼,如果用到再查就行嫩码。
-
Git + 遠(yuǎn)端服務(wù)器 or GitHub:——命令行
- 如果要提交到遠(yuǎn)端,如前所述罪既,需要先在遠(yuǎn)端建立一個空的版本庫克隆到本地進(jìn)行操作铸题;
- 確定遠(yuǎn)端要克隆的文件夾路徑后,在本地進(jìn)入一個父文件夾琢感,右鍵丢间,點(diǎn)擊
Git Bash Here
輸入git clone git@1.1.1.1:/home/demo
遠(yuǎn)程倉庫的鏈接,回車即可驹针,如果是 GitHub 命令I(lǐng)P地址的地方應(yīng)該是github.com
烘挫,另外,如果公私鑰的配置有點(diǎn)問題牌捷,可能會需要輸入該 git 用戶遠(yuǎn)端服務(wù)器密碼墙牌; -
git add 文件名
,文件名連續(xù)寫多個暗甥,用空格分隔即可喜滨,添加文件到本地的工作空間,表示想要跟蹤該文件的修改歷史撤防; -
git commit -m "注釋"
虽风,每次提交必須寫注釋,用來解釋這次提交干了什么寄月,便于回溯辜膝,表示把該文件提交到本地倉庫; -
git push
漾肮,推送厂抖,表示把本地倉庫里面的東西提交到遠(yuǎn)程倉庫中; -
git pull
克懊,拉取忱辅,記住四個字 先拉后推,每次推送到遠(yuǎn)程倉庫之前谭溉,或者說墙懂,每次工作之前,都需要先從遠(yuǎn)端拉取內(nèi)容扮念,然后再進(jìn)行開發(fā)损搬,這個時候可能會遇到一些沖突的情況,解決沖突就是稍微麻煩一點(diǎn)的事情了,命令行暫時不會巧勤,開始使用界面解決沖突嵌灰,比較好看。
-
使用 TortoiseGit :—— windows 界面
- 克绿吖亍:
- 找一個沒有進(jìn)行版本控制的文件夾伞鲫,直接右鍵選擇克隆
Git Clone
; - 在彈出來的框中签舞,填寫
URL
和Directory
秕脓,分別表示遠(yuǎn)端的版本庫鏈接和本地的版本庫名稱,和前面命令行一樣儒搭,URL填寫如git@github.com:Chayeen/chayeen.github.io.git
吠架,名稱默認(rèn)會是chayeen.github.io
,點(diǎn)擊OK即可搂鲫;
- 找一個沒有進(jìn)行版本控制的文件夾伞鲫,直接右鍵選擇克隆
- 提交文件到本地倉庫:
- 進(jìn)入一個進(jìn)行版本控制的文件傍药,右鍵選擇提交到主分支
Git commit -> master
; - 在彈出來的框中魂仍,選擇需要進(jìn)行版本控制的文件拐辽,并設(shè)置提交人的信息,確定提交即可擦酌;
- 顯示成功提交俱诸,則文件作為一個版本存到了本地的版本倉庫;
- 進(jìn)入一個進(jìn)行版本控制的文件傍药,右鍵選擇提交到主分支
- 推送文件到遠(yuǎn)端倉庫:
- 上面的框別關(guān)赊舶,確定的左側(cè)睁搭,有一個推送
push
按鈕,點(diǎn)擊之后笼平,推送文件到了遠(yuǎn)端园骆; - 顯示成功推送,則文件作為一個版本存到了遠(yuǎn)程的版本倉庫寓调。
- 上面的框別關(guān)赊舶,確定的左側(cè)睁搭,有一個推送
- 克绿吖亍: