前言
? ? 學(xué)習(xí)git也是應(yīng)了很多年前大家說的,不會(huì)用git的程序員不是一個(gè)好程序員。為了做一個(gè)好的程序員之前也有大體了解過git與github,但是由于所處的公司基本上都是用svn來管理公司的代碼托管,所以很少能夠真正的了解到git的強(qiáng)大。換了新公司之后,由于不會(huì)使用git一度還覺得很尷尬,那么就讓我們來學(xué)習(xí)他吧!
? ? 本文是基于來學(xué)習(xí)的。
git
Git 是一個(gè)開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項(xiàng)目。
Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件。
Git 與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務(wù)器端軟件支持。
git與gitlab與github的區(qū)別
安裝git
搭建gitlab
常用的gitlab工具命令以及注意事項(xiàng)
? ? gitlab的使用命令其實(shí)就是git命令,git 命令都是以git開始的。
1、本地庫初始化:git init

2、設(shè)置簽名
形式-->
用戶名:tom
Email地址:xxxx@qq.com
作用:區(qū)分不同開發(fā)人員的身份
辨析:這里設(shè)置的簽名和登陸遠(yuǎn)程庫[代碼托管中心]的賬號(hào)、密碼沒有任何關(guān)系。
命令:
? ? ? ? ~倉(cāng)庫級(jí)別/倉(cāng)庫級(jí)別:僅在當(dāng)前本地倉(cāng)庫范圍內(nèi)有效
? ? ? ? ? ? $ git config user.name? hyz_pro
? ? ? ? ? ? $ git config user.email? ?hyz_pro@qq.com
? ??????????$ 信息保存位置:./.git/config文件
? ? ? ? ~系統(tǒng)用戶級(jí)別:登陸當(dāng)前操作系統(tǒng)的用戶范圍;
? ? ? ? ? ? $ git config --global user.name hyz_glb
? ? ? ? ? ? $ git config --global user.email? hyz_glb@qq.com
? ? ? ? ? ? $ 信息保存位置:~/.gitconfig 文件? ? ? ? ? ? ? ??
? ? ? ? 級(jí)別優(yōu)先級(jí):
? ? ? ? ? ? ~就近原則:項(xiàng)目級(jí)別優(yōu)先于系統(tǒng)用戶級(jí)別,二者都有事采用項(xiàng)目級(jí)別的簽名
? ? ? ? ? ? ~如果只有系統(tǒng)用戶級(jí)別的簽名,就以系統(tǒng)用戶級(jí)別的簽名為準(zhǔn)
? ? ? ? ? ? ~二者都沒有不允許
3、基本操作
1.狀態(tài)查看操作:查看工作區(qū)、暫存區(qū)狀態(tài)
????????git status
2.添加操作:將工作區(qū)的”新建/修改“添加到暫存區(qū)
????????git add? [file name]
3.提交操作:將暫存區(qū)的內(nèi)容提交到本地庫
????????git commit -m "commit message" [file name]
4.查看歷史記錄操作:
? ? ? ? git log
? ? ? ? git log --pretty=oneline
? ? ? ? git log --oneline
? ? ? ? git reflog5.前進(jìn)后退
? ? ? ? git reset --hard? [局部索引值]
? ? ? ? ? ? e.g: git reset --hard??b8fc9ee
? ? ? ? git reset --hard HEAD^^(后退多少個(gè)版本,就寫多少個(gè)”^“)或者git reset --hard HEAD~n(表示后退n個(gè)版本),可以通過git reflog 來查看到達(dá)歷史版本需要的步數(shù);只能后退;6.刪除文件并找回:
? ? 前提:刪除前,文件存在時(shí)的狀態(tài)提交到了本地庫。
? ? 操作:git reset --hard? [指針位置]
? ? ? ? ? ? ? ? ~刪除操作已經(jīng)提交到了本地庫:指針位置指向歷史記錄
? ? ? ? ? ? ? ? ~刪除操作尚未提交到本地庫:指針位置使用HEAD7、文件差異比較
? ? git diff [文件名] :將工作區(qū)中的文件呵暫存區(qū)進(jìn)行比較
? ? git diff [本地庫中歷史版本] [文件名]:將工作區(qū)中的文件呵本地庫歷史記錄比較
? ? git diff :不帶文件名,對(duì)比工作區(qū)中的所有文件8、在本地創(chuàng)建遠(yuǎn)程庫地址別名
? ? git remote -v :查看地址的別名列表
? ? git remote add? [別名] [遠(yuǎn)程庫地址]9、推送操作
? ? git push [遠(yuǎn)程庫分支別名]? [遠(yuǎn)程庫分支]
? ? ? ? e.g:git push origin master
4、分支
1、創(chuàng)建分支:?git branch [分支名]? ?
2、查看分支:git branch -v?
3、切換分支:git checkout [分支名]
4、合并分支:
? ? 第一步:切換到接收修改的分支(被合并,增加新內(nèi)容)上
????????????-->git checkout [被合并分支名];
? ? 第二步:執(zhí)行merge命令
????????????--->git merge [有新內(nèi)容分支名]
5、解決沖突

? ? 6、GitHub遠(yuǎn)程庫的創(chuàng)建與使用
?作用:
? ? ? ? ~完整的把遠(yuǎn)程庫下載到本地
? ? ? ? ~創(chuàng)建origin遠(yuǎn)程庫的地址別名
? ? ? ? ~初始化本地庫1、克隆命令
????????? 命令:git clone? [遠(yuǎn)程地址]? ??
2、拉取
? ? ? ? ~? pull=fetch + merge
? ? ? ? ~ git fetch [遠(yuǎn)程庫地址別名] [遠(yuǎn)程分支名]
? ? ? ? ~ git merge [遠(yuǎn)程庫地址別名/遠(yuǎn)程分支名]
3、解決沖突
? ? 要點(diǎn):
? ? ? ? ? ? ~如果不是基于GitHub遠(yuǎn)程庫的最新版所做的修改,不能推送,必須先拉取
? ? ? ? ? ? ~拉取下來后如果進(jìn)入沖突狀態(tài),則按照“分支沖突解決”操作解決即可。
? ??
7、Eclipse操作?
1、eclipse的關(guān)聯(lián)操作,以及創(chuàng)建git項(xiàng)目關(guān)聯(lián)。。。
2、Eclipse中忽略文件
? ? 概念:Eclipse特定文件、這些都是eclipse為了管理我們創(chuàng)建的工程而維護(hù)的文件,和開發(fā)的代碼沒有直接關(guān)系。最好不要在git中進(jìn)行追蹤,也就是把他們忽略。至于為什么要忽略掉他們,自己想??!
? ? .classpath 文件
? ? .project 文件
? ? .settings 目錄下所有文件
做法:添加忽略文件配置,在~/.gitconfig文件中引入一下文件。
? ? [core]
? ? ? ? ? ? excludesfile=C:/Users/Administrator/Java.gitignore
注意:這里路徑中是使用linux路徑符號(hào),一定要使用“/”,而不能使用“\”;
3、推送到運(yùn)程庫
4、oxygen eclipse克隆工程操作(高版本)
? ? import ...導(dǎo)入工程--->project from git---->clone url---->填寫遠(yuǎn)程庫的復(fù)制地址,輸入用戶名,密碼---->導(dǎo)入到工作區(qū)目錄中(低版本的eclipse無法導(dǎo)入到工作區(qū)目錄,只能導(dǎo)入到另外的其他目錄中)-->轉(zhuǎn)換工程的模式為eclipse模式
8、跨團(tuán)隊(duì)合作
9、SSH登陸
? ? 1、輸入ssh-keygen -t rsa -C 919242695@qq.com生成一個(gè).ssh目錄,該目錄在系統(tǒng)用戶目錄下面。
? ? 2、將.ssh目錄下的文件id_rsa.pub里面的內(nèi)容,復(fù)制到用戶設(shè)置ssh and GPG keys里面