Git分布式版本控制工具
Git概述和基本使用
git分布式版本管理與svn(cvs)對(duì)比
類(lèi)型:git是開(kāi)源的分布式版本控制系統(tǒng) ,svn是集中式版本控制系統(tǒng)
架構(gòu):git包括工作目錄留晚、暫存區(qū)笔链、本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)己儒。 svn包括工作目錄和中央倉(cāng)庫(kù)
分支修改:git分支結(jié)構(gòu)只要不提交合并到遠(yuǎn)程倉(cāng)庫(kù)蓖议,對(duì)其他共同開(kāi)發(fā)者沒(méi)有影響,svn只有一個(gè)目錄腥刹,是完整目錄贱鼻,改變分支宴卖,其他共同開(kāi)發(fā)者都會(huì)改變
分支匹配:git本地倉(cāng)庫(kù)分支和遠(yuǎn)程倉(cāng)庫(kù)分支可以自由匹配,svn是全局統(tǒng)一的
內(nèi)部數(shù)據(jù)存儲(chǔ)方式:git統(tǒng)一存儲(chǔ)管理元數(shù)據(jù)邻悬,存放在項(xiàng)目根目錄下.git文件里症昏,svn是以文件的形式存放管理,與工作區(qū)文件存放在一起
git強(qiáng)調(diào)個(gè)體父丰。速度快肝谭、靈活。公共服務(wù)器壓力和數(shù)據(jù)量都不會(huì)太大蛾扇,離線(xiàn)工作攘烛,svn只有一個(gè)單一的集中管理服務(wù)器,容易出現(xiàn)單點(diǎn)故障镀首,容易負(fù)載過(guò)重
git特點(diǎn)
最優(yōu)的存儲(chǔ)能力
非凡的性能
開(kāi)源的
很容易做備份
支持離線(xiàn)操作
很容易定制工作流程
使用git的web管理平臺(tái):github坟漱、coding、碼云更哄、gitlab(開(kāi)放源代碼靖秩,自帶持續(xù)集成)、BitBucket竖瘾、Gerrit、百度效率云等
git安裝和使用
安裝:在 https://git-scm.com/ 下載根據(jù)說(shuō)明安裝花颗,或者下載免安裝版本捕传,配置git環(huán)境
-
git配置用戶(hù)名和郵箱
$ git config --global user.name 'your_name' $ git config --global user.email 'your_email@domain.com' //除了設(shè)置global還可以設(shè)置--local、--system //local只對(duì)某個(gè)倉(cāng)庫(kù)生效 //global對(duì)當(dāng)前用戶(hù)所有倉(cāng)庫(kù)有效 //system對(duì)系統(tǒng)所有登錄的用戶(hù)有效 //顯示config的配置加--list $ git config --list --local
git創(chuàng)建或初始化倉(cāng)庫(kù)
git init//把項(xiàng)目納入git管理 git init filename//創(chuàng)建文件夾扩劝,并納入git管理 git log //查看提交信息 cp ../exportapp/readme.md . //從exportapp目錄下拷貝文件到當(dāng)前倉(cāng)庫(kù),需要加點(diǎn) git add readme.md// 添加文件到暫存區(qū)
Git常用命令
git config --list --localgit init//把項(xiàng)目納入git管理git init filename//創(chuàng)建文件夾庸论,并納入git管理git log //查看提交信息cp ../exportapp/readme.md . //從exportapp目錄下拷貝文件到當(dāng)前倉(cāng)庫(kù),需要加點(diǎn)cp -r ../EclipseAdt/lib . //拷貝文件夾需要加上-rgit add readme.md// 添加文件到占存取git add index.html images //add命令后邊可以跟多個(gè)文件和目錄git status //查看當(dāng)前工程狀態(tài)git commit -m'Add readme' //將暫存區(qū)的代碼提交到本地倉(cāng)庫(kù)(此時(shí)用戶(hù)優(yōu)先local然后global)ls -al//查看當(dāng)前目錄下文件vi index.html//使用vi編輯器編輯文件;按Esc輸入冒號(hào)退出編輯git add -u //update职辅,把所有被跟蹤的文件一起添加到暫存區(qū)git rm index.html//刪除暫存區(qū)指定文件 mv index.html index.htm(重命名三步,此命令執(zhí)行后暫存區(qū)有兩個(gè)文件)git mv index.htm index.html//重命名文件git log --oneline//簡(jiǎn)潔方式查看loggit log -n2 //查看最近兩次(后面可以加--oneline)
git rm lib -r -f //git刪除指定文件夾和其下所有文件
git branch -v//查看所有本地分支git branch命令git checkout -b temp e82c332(分支名)//用歷史分支創(chuàng)建一個(gè)臨時(shí)分支
git checkout master//切換分支
git merge temp//合并分支
git tag -a 53d3d6c -m 'my 53d3d6c tag'
git branch -d fix_readme/git branch -D fix_readme//刪除分支
git commit -am'Add test'//把工作區(qū)直接創(chuàng)建到歷史版本庫(kù),其實(shí)就是把a(bǔ)ddhe-m合并一句使用git log (--oneline) --all//log命令默認(rèn)查看當(dāng)前分支,查看所有添加allgit log --oneline --all (-n4) --graph//圖形化查歷史看關(guān)聯(lián)或版本演進(jìn)git help --web log//通過(guò)瀏覽器查看git指令
gitk //啟動(dòng)git圖形化界面
git fetch origin master//代碼拉取git pull origin master //拉取并合并兩步
git remote add origin <address> //連接遠(yuǎn)程git push -u origin master //指定默認(rèn)主機(jī)提交代碼git push origin master
Gt圖形化界面
.git目錄
HEAD:指明我們當(dāng)前工作在哪個(gè)分支下
config:文件用戶(hù)信息(name/email)的配置信息
res:包含分支和標(biāo)簽(關(guān)鍵版本添加tag)信息
tags:標(biāo)簽信息
objects:樹(shù)結(jié)構(gòu)信息,包含tree聂示、blob
git核心對(duì)象:commit域携、tree、blob
一個(gè)commit對(duì)應(yīng)一顆樹(shù)鱼喉,即當(dāng)前commit對(duì)應(yīng)的視圖,包含commit當(dāng)時(shí)所有文件的快照秀鞭,tree是樹(shù),可能對(duì)應(yīng)的是一個(gè)文件夾扛禽,文件下可能也有樹(shù)锋边,也可能是一個(gè)blob(文件),blob和文件名沒(méi)有關(guān)系,它看的是文件內(nèi)容
Git探秘
Git使用和遇到的問(wèn)題
git tag -a 53d3d6c -m 'branchAmey tag' //一個(gè)里程碑式的版本添加一個(gè)tag
-
數(shù)一數(shù)tree的個(gè)數(shù)
mkdir doc// 創(chuàng)建一個(gè)文件夾
echo "hello,word" > readme//創(chuàng)建readme编曼,并寫(xiě)入內(nèi)容
git add doc/git commit //把內(nèi)容提交
find .git/objects -type f //查看objects下有幾個(gè)對(duì)象
git cat-file -t 02fe07b//查看產(chǎn)生的object對(duì)象類(lèi)型
git cat-file -p 02fe07b//查看產(chǎn)生的object對(duì)象內(nèi)容
一個(gè)文件夾下一個(gè)文件提交產(chǎn)生四個(gè)對(duì)象豆巨,一個(gè)commit(tree)一個(gè)文件名(tree)一個(gè)內(nèi)容(blob)一個(gè)文件夾(tree)
-
detached HEAD(分離頭指針)--隨意切換某個(gè)分支
本質(zhì)上就是在沒(méi)有分支的狀態(tài)下工作,你做了很多變更直接切換了分支,變更可能會(huì)丟失
嘗試性變更反而有好處
git branch fix_edit 3d4651d //對(duì)沒(méi)有分支的commit在切換后創(chuàng)建分支
-
HEAD和branch
git checkout -b fix_readme master//創(chuàng)建并切換到新分支掐场,HEAD指向也會(huì)變
git diff 3ff43d7d62cf 53d3d6c4e//比較兩個(gè)分支的不同
git diff HEAD HEAD^1 //HEAD和父分支進(jìn)行比對(duì)
-
commit的描述與合并
git commit --amend//修改剛提交的commit描述
git rebase -i e82c3322f6//變更某個(gè)歷史commit描述.指定父commit,把pick改為r,然后修改
git rebase --abort//退出rebase狀態(tài)
git rebase -i e82c3322f6//把子commit修改為s往扔,表示合并到一個(gè)commit
git rebase --continue//rebase vi終斷
git merge temp//合并分支
git commit -c commitID//當(dāng)rebase -i錯(cuò)誤時(shí)先add然后指定commit
-
git忽略文件
-
git備份
`啞協(xié)議傳輸進(jìn)度不可見(jiàn),智能協(xié)議傳輸速度比啞協(xié)議快 `
啞協(xié)議(/path/to/repo.git):本地協(xié)議熊户、智能協(xié)議(file:///path/to/repo.git)萍膛、http/https協(xié)議、ssh協(xié)議
-
本地倉(cāng)庫(kù)備份和同步
git clone --bare /g/workcode/AndroidCode/will/.git ya.git //本地啞協(xié)議備份
git clone --bare file:///g/workcode/AndroidCode/will/.git zhineng.git //本地智能協(xié)議備份
git remote show| git remote show//查看遠(yuǎn)程關(guān)聯(lián)
git remote add zhineng file:///g/workcode/AndroidCode/666-backup/zhineng.git// 遠(yuǎn)程關(guān)聯(lián)本地倉(cāng)庫(kù)
git push --set-upstream zhineng dev // 新增本地更改提交到遠(yuǎn)程倉(cāng)庫(kù)
Git與github誕生
-
git 出現(xiàn)前
程序員之間協(xié)作編程方式少
-
即使有svn敏弃,與開(kāi)源團(tuán)隊(duì)合作也要獲得管理員許可才能ferk分支
許多時(shí)候批準(zhǔn)過(guò)程比寫(xiě)代碼時(shí)間還長(zhǎng)
許多開(kāi)源項(xiàng)目都受到權(quán)限問(wèn)題以及其它一些低效率問(wèn)題困擾
-
git誕生后
-
發(fā)展
開(kāi)源領(lǐng)域經(jīng)歷文藝復(fù)興
Linux受到追捧
第一個(gè)web2.0出現(xiàn)
開(kāi)源項(xiàng)目的合作變的很容易
許多公司將項(xiàng)目遷移到開(kāi)源服務(wù)器
-
不足
無(wú)法幫助開(kāi)發(fā)人員尋找開(kāi)源項(xiàng)目
開(kāi)發(fā)的開(kāi)源項(xiàng)目很難讓他人知道
-
-
Github誕生與發(fā)展
讓git更好用卦羡,讓團(tuán)隊(duì)協(xié)作與編寫(xiě)軟件變的輕松、安全麦到,遠(yuǎn)程協(xié)作更方便
開(kāi)源和尋找開(kāi)源項(xiàng)目變得容易,互相學(xué)習(xí)鑒戒提升變的高效
2007-2011-代碼協(xié)作與軟件社交绿饵,用戶(hù)突破100萬(wàn),庫(kù)存200萬(wàn)
2012-2015-從快速增長(zhǎng)到無(wú)處不在瓶颠,用戶(hù)280萬(wàn)拟赊,庫(kù)存460萬(wàn)
2015-2018-全球擴(kuò)張,用戶(hù)3千萬(wàn)粹淋,庫(kù)存9千萬(wàn)
GitHub使用
注冊(cè)帳號(hào)與配置
網(wǎng)站與探索:網(wǎng)址|幫助|探索|開(kāi)發(fā)輔助工具
-
配置ssh公私鑰
Generated a new SSH key and added it to the ssh-agent創(chuàng)建
打開(kāi)git bash吸祟,然后輸入 ssh-keygen -t rsa -b 4096 -C "your_email@example.com",回車(chē)桃移,出現(xiàn)下圖配置成功
-
pwd//查看目錄
ls -al //查看目錄下文件
cat id_rsa.pub 打開(kāi)公鑰文件并復(fù)制
粘貼公鑰到github sshKey屋匕,保存
創(chuàng)建Hello Word項(xiàng)目
在github創(chuàng)建新倉(cāng)庫(kù),組織名為個(gè)人借杰,倉(cāng)庫(kù)名是項(xiàng)目名过吻,選擇是否公開(kāi),選擇編程語(yǔ)言自動(dòng)添加git忽略文件,選擇自動(dòng)創(chuàng)建說(shuō)明文件,選擇公開(kāi)聲明自動(dòng)創(chuàng)建LICENSE
git remote ssh連接,git fetch origin master拉取合并遠(yuǎn)程代碼
git merge --allow-unrelated-histories githubWill/master//讓沒(méi)有關(guān)聯(lián)的本地和遠(yuǎn)程分支合并
git push githubWill master//提交代碼到遠(yuǎn)程倉(cāng)庫(kù)
git merge githubWill/feature/add_gitcommands //合并代碼到遠(yuǎn)程倉(cāng)庫(kù)
不同的用戶(hù)修改了文件,用戶(hù)需要先拉取纤虽,在提交乳绕,然后合并
不同用戶(hù)修改了同一個(gè)文件的名稱(chēng),只需要把協(xié)商好的文件名提交逼纸,其它刪除,其它用戶(hù)修改了文件名洋措,你只需要拉取代碼就好,你修改文件內(nèi)容git會(huì)自動(dòng)識(shí)別
git push -f //命令強(qiáng)制提交杰刽,會(huì)替換遠(yuǎn)程倉(cāng)庫(kù)內(nèi)容,包括提交記錄
禁止向集成分支執(zhí)行變更歷史的操作
github搜索
搜索關(guān)鍵字+in:readme(>1000) 能搜索出更多項(xiàng)目
blog easily start in:readme stars:>5000:搜索容易使用的博客項(xiàng)目
help下搜索search查看搜索技巧