Git
主要概念:本地庫邮偎、暫存區(qū)index file犹撒、工作區(qū)working tree
提交:工作區(qū)add→暫存區(qū)commit→本地庫
回退:本地庫(soft)→暫存區(qū)(mix)→工作區(qū)(hard)
一、代碼托管中心
內網托管:搭建gitlab服務器
外網托管:github、碼云
二症概、本地庫和遠程庫
2.1.團隊內部開發(fā)
本地庫 push 到遠程庫
遠程庫 clone 到本地庫
2.2.跨團隊開發(fā)
遠程庫A fork 到遠程庫B
A組把自己開發(fā)的push和clone到遠程庫A
B組把自己開發(fā)的push和clone到遠程庫B
然后遠程庫B pull request →審核→merge到遠程庫A
三、起步
3.0.建立遠程連接
這里用碼云作為遠程倉庫
3.0.1首先在碼云創(chuàng)建一個賬號
3.0.2添加一個SSH公鑰(方法可以參考碼云的提示)
3.0.3在git本地倉庫SSH公鑰
//查看本地ssh密鑰命令早芭,如果沒有設置過會顯示No such file or directory
$ cd ~/.ssh
$ ls
//然后會像上圖那樣顯示
//如果沒有彼城,就來創(chuàng)建新的密鑰,這里的email地址是碼云或github的賬號
$ ssh-keygen -t rsa -C "your_email@youremail.com"
Creates a new ssh key using the provided email # Generating public/private rsa key pair.
//其他系統(tǒng):
Enter file in which to save the key (/home/you/.ssh/id_rsa):
//windows:
Enter file in which to save the key(/c/Users/xxx/.ssh/id_rsa):
完成后,大概是這個樣子的
Your identification has been saved in /c/Users/xxx/.ssh/id_rsa.
Your public key has been saved in /c/Users/xxx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:g0Bjal6pyev27yb6lSofUUk7CcB3zVasdLqQDfR3rzk xxxx@qq.com
The key's randomart image is:
+---[RSA 2048]----+
| .=..oo= o. |
| +.o..*o= o |
| o +. .oBo+. |
| + + . oo.+. . |
| = o S. . . |
| . . o. o |
| . . o E |
| .. + .+ . |
| ..o.O* |
+----[SHA256]-----+
3.0.4添加公鑰到你的遠程倉庫
1募壕、查看生成公鑰
//輸入命令后调炬,顯示一串SSH-RSA碼,復制到github里面
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZEE8qJA8jYY7NqcoQWwjcvdQuwDG4RHWDKZzpz5bZ1byJRAQA8vxcRJ5mqrwlYcISErXUcsfqjGkLbgXJMPSR7ggwdDgEBcpBXQE+eXFIafgZfUS5ZsCkNXtKJ3RXVdAkQGb6krVUbk7Bll7N+ygyZv1iH0s6GtKlz4uNicpyUZY+lv0BewWTAy+Dm0EpFh8FAIWufhpYpY8MvPf23RaZEMSaB8hDo+Ep4bLHNM5D4SKU6eggEARQYlI3m/f8kHZm600bEoJxwsxM03Qmqcr/kbKFC/TiJWVm4UiLj1DKOiHrtYUBaqx0m0cbtb6LYjoAedtKksLmqJg/sOe0CKEz xxx@qq.com
2舱馅、設置遠程倉庫的SSH公鑰
github:登陸你的github帳戶缰泡。點擊你的頭像,然后 Settings -> 左欄點擊 SSH and GPG keys -> 點擊 New SSH key
碼云:碼云賬戶代嗤,點擊你的頭像棘钞,然后左側導航欄SSH。
3干毅、然后你復制上面的公鑰內容宜猜,粘貼進“Key”文本域內。 title域硝逢,自己隨便起個名字姨拥。
4、點擊 Add key渠鸽。
完成以后叫乌,驗證下這個key是不是正常工作:
5、查看公鑰能不能用
//ssh -T選項的意思為徽缚,不分配偽終端
$ ssh -T git@github.com
$ ssh -T git@gitee.com
//顯示下面的字符串說明連接OK
$ Hi xxx! You've successfully authenticated, but GitHub/gitee does not provide shell access.
3.0.5.創(chuàng)建一個倉庫
如碼云提示的操作憨奸,不過因為我放git的文件夾換過位置,顯示證書錯誤凿试,所以要多一步操作
$ git config --global user.name "用戶名"
$ git config --global user.email "xxx@xxx.com"
//把遠程倉庫地址賦值給origin膀藐,origin = 'https://.........'
$ git remote add origin https://gitee.com/用戶名/項目名.git
//關閉證書校驗
$ git config --system http.sslverify false
//更新證書位置,一般是放在git里面
$ git config --system http.sslcainfo "D:/ProgramFiles/Git/mingw64/ssl/certs/ca-bundle.crt"
//把本文件夾的git倉庫推送至遠程倉庫
$ git push -u origin master
//第一次使用上一行的代碼會讓你輸入碼云或github賬號密碼红省。
3.0.6[可選]修改git的remote url
使用命令 git remote -v 查看你當前的 remote url
$ git remote -v
origin https://github.com/someaccount/someproject.git (fetch)
origin https://github.com/someaccount/someproject.git (push)
origin https://gitee.com/someaccount/someproject.git (fetch)
origin https://gitee.com/someaccount/someproject.git (push)
如果是以上的結果那么說明此項目是使用https協(xié)議進行訪問的(如果地址是git開頭則表示是git協(xié)議)
你可以登陸你的碼云/github额各,就像本文開頭的圖例,你在上面可以看到你的ssh協(xié)議相應的url吧恃,類似:
復制此ssh鏈接虾啦,然后使用命令 git remote set-url 來調整你的url。
git remote set-url origin git@github.com:someaccount/someproject.git
然后你可以再用命令 git remote -v 查看一下痕寓,url是否已經變成了ssh地址傲醉。
然后你就可以愉快的使用git fetch, git pull , git push,再也不用輸入煩人的密碼了
3.0.7git保存遠程地址
#查看本文件夾底下呻率,git保存的遠程倉庫地址(github地址硬毕、碼云地址)
$ git remote -v
#添加遠程地址,別名為origin
$ git remote add origin https://github.com/someaccount/someproject.git
$ git remote add origin https://gitee.com/someaccount/someproject.git
3.0.8PUSH到遠程倉庫
#push master分支到origin地址
$ git push origin master
3.0.9Clone到本地倉庫
#克隆到本地
$ git clone https://github.com/skyloyal/JavaProject.git
3.0.10邀請開發(fā)人員
github登陸后礼仗,在需要更多開發(fā)人員的項目底下吐咳。
3.0.11.pull到本地
#抓取master分支
$ git fetch origin master
#切換到抓取下來的master分支
$ git checkout 'origin/master'
#合并
$ git merge origin/master
#pull = fetch + merge
$ git pull origin master
3.1.基本操作
//任何項目開始都先初始化本地git倉庫
$ git init
//展示文件夾內文件數目
$ ll
//創(chuàng)建文件夾wechat
$ mkdir wechat
3.2.設置簽名
3.2.1.形式如下
用戶名:XX
Email地址:XXXXX@xx.com
作用:區(qū)分不同開發(fā)人員的身份
辨析:這里設置的簽名和登陸遠程庫(github)的賬號密碼沒有任何關系逻悠。
3.2.2.設置簽名命令
項目級別/倉庫級別:僅在當前本地庫范圍內有效
信息保存位置:~/.gitconfig文件
設置簽名
$ git config user.name XXX
$ git config user.email XXXXX@xx.com
系統(tǒng)用戶級別:登錄當前操作系統(tǒng)的用戶范圍
$ git config --global user.name XXX
$ git config --global user.email XXXXX@xx.com
優(yōu)先級:就近原則,項目級別優(yōu)先于系統(tǒng)用戶級別韭脊,二者都有時童谒,采用項目級別的簽名
如果只有系統(tǒng)用戶級別的簽名,就以系統(tǒng)用戶級別的簽名為準
不允許都沒有系統(tǒng)級或項目級簽名.
3.3.提交更改
下面以新建good.txt為例子
#查看工作區(qū)沪羔、暫存區(qū)狀態(tài)
$ git status
#添加到本地暫存區(qū)
$ git add
$ git add -all
#撤出本地暫存區(qū)
$ git rm --cached good.txt
#提交暫存區(qū)到本地庫饥伊,提交后會去到vim編譯器,要寫一段注釋
$ git commit
#用一條命令添加暫存區(qū)蔫饰、提交
$ git commit -a
#帶注釋提交
$ git commit -m "it is the node" good.txt
3.4.提交記錄
#顯示所有提交琅豆,顯示作者author、記錄date篓吁、記錄node茫因,記錄hash。
$ git log
#分行顯示(完整)
$ git log --pretty=oneline
#分行顯示(哈希值最后7位越除,提交注釋)
$ git log oneline
#分行顯示(哈希值最后7位,提交注釋外盯,head指針移動步數)
$ git reflog
3.5.版本回退
#{9a9ebe0}是提交記錄的后7位哈希值摘盆,版本回退命令
$ git reset --hard 9a9ebe0
#按相對步數回退
#一步
$ git reset --hard HEAD^
#兩步
$ git reset --hard HEAD^^
#三步
$ git reset --hard HEAD^^^
#回退三步
$ git reset --hard HEAD~3
3.6.刪除
#刪除操作
$ rm good.txt
#把操作放到暫存區(qū)
$ git add good.txt
#提交到本地庫
$ git commmit -m "delete" good.txt
#如果刪除了想要回來,就可以用版本回退命令恢復
3.7.比較文件差異
#將工作區(qū)中的文件和暫存區(qū)進行比較
$ git diff good.txt
#將工作區(qū)中的文件和本地庫歷史記錄比較
$ git diff HEAD^ good.txt
#不帶文件名比較多個文件
四饱苟、分支管理
剛開始的主干是master
4.0.查詢分支
$ git branch -v
4.1.新建分支
#新建分支hot_fix
$ git branch hot_fix
4.2.切換分支
#切換分支hot_fix
$ git checkout hot_fix
4.3.接受分支
#在主干上孩擂,接受分支
$ git checkout master
$ git merge hot_fix
4.4.沖突的解決
第一步:編輯文件,刪除特殊符號
第二步:把文件修改到滿意的程度箱熬,保存
第三步:git add 文件名
第四步:git commit -m ""
五类垦、基本原理
git的文件管理機制
git把數據看作是小型文件系統(tǒng)的一組快照,同一個文件城须,做了變化蚤认,新的文件就會包含舊文件的指針。
每一個提交對象都會有一個hash值糕伐,