22.7 創建遠程倉庫linux
22.8 克隆遠程倉庫git
22.9 分支管理github
22.10 遠程分支管理vim
22.7 創建遠程倉庫bash
1 首先到 https://github.com 註冊一個帳號ssh
2 建立本身的git,點repositories 再點newide
名字自定義,好比叫studygit 選擇public 點 create repository測試
3 添加key:右上角點本身頭像,選擇settings,左側選擇SSH and GPG keysspa
左側點New SSH key,添加新的ssh key3d
4 把linux機器上的~/.ssh/id_rsa.pub內容粘貼到這裏
5 執行命令,生成公鑰
ssh-keygen cat ./.ssh/id_rsa.pub
6 將cat到的內容,輸出到github主頁的公鑰信息欄
有了公鑰以後就能進行互相通訊了
6.1 在本地(客戶端)建立倉庫 ,在倉庫寫入內容,將內容推送到遠程倉庫上面
準備工做:在本地(客戶端)創建項目目錄
# mkdir -p /data/git/gh-project01 # cd !$ cd /data/git/gh-project01 ls
6.2 本地倉庫建立
本地倉庫建立指南
…or create a new repository on the command line echo "# gh-project01" >> README.md git init git add README.md git commit -m "first commit" git remote add origin https://github.com/kevinxlau/gh-project01.git git push -u origin master Username for 'https://github.com': kevinxlau Password for 'https://kevinxlau@github.com': Counting objects: 3, done. Writing objects: 100% (3/3), 221 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/kevinxlau/gh-project01.git * [new branch] master -> master
分支 master 設置爲跟蹤來自 origin 的遠程分支 master。
解釋:
git init
初始化倉庫
git add README.md
創建文件
git commit -m "first commit"
commit操做
git remote add origin https://github.com/kevinxlau/gh-project01.git
此處用了https的鏈接方式,若是用ssh的話就能更好的直接互動了,至關於免密操做,由於剛纔已經設置了ssh的匹對
git push -u origin master
推送到遠程倉庫
7 測試自定義推送文件
7.1 創建文件1.txt
[root@9F-VM1 gh-project01]# touch 1.txt [root@9F-VM1 gh-project01]# echo -e "111\n222\n333" > 1.txt [root@9F-VM1 gh-project01]# cat 1.txt 111 222 333
7.2 推送到遠程倉庫
# git add 1.txt # git commit -m "add 1.txt" [master 09e0188] add 1.txt 1 file changed, 3 insertions(+) create mode 100644 1.txt #git pust Username for 'https://github.com': kevinxlau Password for 'https://kevinxlau@github.com': Counting objects: 4, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 276 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/kevinxlau/gh-project01.git 72948bc..09e0188 master -> master
查看是否推送成功
22.8 克隆遠程倉庫
mkdir lamp
cd lamp
git clone git@github.com:aminglinux/lanmp.git
它提示,會在當前目錄下初始化一個倉庫,並建立一個.git的目錄,以下
Initialized empty Git repository in /home/lanmp/.
git/完成後,ls能夠看到一個lanmp的目錄
cd lanmp
vi lanmp.sh 編輯一下文件,而後提交
git add lanmp.sh
git commit -m "sdlfasdf"
而後再推送到遠程服務端
git push
1 克隆前作的準備工做
建立克隆相關的目錄並進入
mkdir test cd test
2 得到克隆地址後,進行克隆
git clone git@github.com:kevinxlau/gh-project-00.git 正克隆到 'gh-project-00'... remote: Counting objects: 6, done. remote: Compressing objects: 100% (3/3), done. remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0 接收對象中: 100% (6/6), done.
3 查看本地是否克隆到項目了
ls gh-project-00
4 同步測試
編輯命令,修改一下文件內容,
echo -e "111\n222\n333" > 1.txt git add 1.txt git commit -m "add 1.txt" # git push Counting objects: 4, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 302 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@github.com:kevinxlau/gh-project-00.git d22f536..275d339 master -> master
克隆成功
5 修改1.txt內容待同步
6 進行同步
同步前1.txt
# cat 1.txt 111 222 333
執行進行同步操做
# git pull remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. 來自 github.com:kevinxlau/gh-project-00 275d339..53d5469 master -> origin/master 更新 275d339..53d5469 Fast-forward 1.txt | 2 ++ 1 file changed, 2 insertions(+)
同步後
# !cat cat 1.txt 111 222 333 444 555
7 done
22.9 分支管理
1 經常使用命令
git branch //查看分支 git branch * master
git branch xxxx //建立分支 git branch kevin
git checkout kevin //切換到了kevin分支下 git checkout kevin 切換到分支 'kevin'
再用git branch查看,會看到有兩個分支master和kevin,當前使用的分支前面會有一個*在kevin分支下 ,編輯2.txt,並提交到新分支
git branch * kevin master
2 修改測試
修改 2.txt的內容
echo "branch,kevin" >> 2.txt
將修改加入版本庫
git add 2.txt git commit -m "ch 2.txt" [kevin 16ea353] ch 2.txt 1 file changed, 1 insertion(+)
分支與分支之間的工做是隔離開的,不管是內容仍是文件都是
# git branch *kevin master #cat 2.txt 111 222 333 branch,kevin
切換回master分支
git checkout master //此時cat 2.txt發現並無更改內容
# git checkout master 切換到分支 'master' # cat 2.txt 111 222 333 # git branch kevin * master
上述能夠看到,我在kevin分支下添加的內容,在master分支下是看不到剛剛添加的內容。
3 分支合併
做用:將2個分支的內容統一分支之間內容同樣,保持一致。
4 例如如今要把kevin分支合併到master分支下
git checkout master //合併分支以前,先切換到目標分支
git merge kevin //把kevin分支合併到了master # git merge kevin 更新 c5aac76..16ea353 Fast-forward 2.txt | 1 + 1 file changed, 1 insertion(+) 查看2.txt,發現到剛剛在kevin分支修改的內容也被同步上去了。 # cat 2.txt 111 222 333 branch,kevin
5 衝突狀況
當同一個文件在兩個分支下面作過編輯修改處理,可是內容不一樣步的話,會發生衝突
若是master分支和kevin分支都對2.txt進行了編輯,當合並時會提示衝突,須要先解決衝突才能夠繼續合併。
解決衝突的方法是在master分支下,編輯2.txt,改成kevin分支裏面2.txt的內容。 而後提交2.txt,再合併kevin分支。
可是這樣有一個問題,萬一master分支更改的內容是咱們想要的呢?
能夠編輯2.txt內容,改成想要的,而後提交。切換到kevin分支,而後合併master分支到kevin分支便可(倒着合併)。合併分支有一個原則,那就是要把最新的分支合併到舊的分支。也就是說merge後面跟的分支名字必定是最新的分支。
6 刪除
git branch -d kevin #刪除分支
若是分支沒有合併,刪除以前會提示,那就不合並,強制刪除
git branch -D kevin
22.10 遠程分支管理
使用分支的原則
對於分支的應用,建議你們以這樣的原則來:
master分支是很是重要的,線上發佈代碼用這個分支,平時咱們開發代碼不要在這個分支上。
建立一個dev分支,專門用做開發,只有當發佈到線上以前,纔會把dev分支合併到master
開發人員應該在dev的基礎上再分支成我的分支,我的分支(在本身pc上)裏面開發代碼,而後合併到dev分支
dev分支合併bob分支的命令是:
git checkout dev //先切換到dev分支,而後
git merge bob
遠程分支
1 本地新建的分支若是不推送到遠程,對其餘人就是不可見的
克隆下來的倉庫,默認是隻克隆master的分支,其餘是不會跟着克隆的
# git clone git@github.com:kevinxlau/test-2210.git 正克隆到 'test-2210'... remote: Counting objects: 15, done. remote: Compressing objects: 100% (9/9), done. 接收對象中: 100% (15/15), done. 處理 delta 中: 100% (1/1), done. remote: Total 15 (delta 1), reused 9 (delta 0), pack-reused 0 # git branch * master
查看遠程分支 git ls-remote origin,能夠看到全部分支
# git ls-remote origin c22273949100d3921cc68aa9186c16a069179f23HEAD c22273949100d3921cc68aa9186c16a069179f23refs/heads/dev c22273949100d3921cc68aa9186c16a069179f23refs/heads/master
2 git clone的時候默認只把master分支克隆下來,若是想把全部分支都克隆下來,須要手動建立,在本地建立和遠程分支對應的分支,使用#git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱要一致
例如如今要將遠程倉庫的dev分支克隆下來
[root@9F-VM1 test-2210]# git checkout -b dev origin/dev 分支 dev 設置爲跟蹤來自 origin 的遠程分支 dev。 切換到一個新分支 'dev' [root@9F-VM1 test-2210]# git branch * dev master
3 內容變動
創建文件,添加內容,以及推送到遠程倉庫
# vim 2.txt 1112 2333 444455
4 推送
[root@9F-VM1 test-2210]# git add 2.txt [root@9F-VM1 test-2210]# git commit -m "add 2.txt" [dev d6a3dad] add 2.txt 1 file changed, 4 insertions(+) create mode 100644 2.txt [root@9F-VM1 test-2210]# git push Counting objects: 4, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 334 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@github.com:kevinxlau/test-2210.git c222739..d6a3dad dev -> dev
最後一行能夠看到是dev-->dev 是本地的dev推送到遠程的dev
格式是:本地分支-->遠程匹配分支
git push會把全部本地分支的變動一同推送到遠程,
若是想指定只推送一個分支,使用git push origin branch-name
[root@9F-VM1 test-2210]# git push origin dev Everything up-to-date
5 本地建立分支,並推送
[root@9F-VM1 test-2210]# git branch dev2 [root@9F-VM1 test-2210]# git branch * dev dev2 master [root@9F-VM1 test-2210]# git push origin dev2 Total 0 (delta 0), reused 0 (delta 0) To git@github.com:kevinxlau/test-2210.git * [new branch] dev2 -> dev2
對於git push分支分兩種狀況
當本地分支和遠程分支一致時
當本地分支比遠程分支多,默認git push 只推送本地和遠程一致的分支,想要把多出來的本地分支推送到遠程時,使用git push origin branch-name 若是推送失敗,先用git pull抓取遠程的新提交
總結:
把本地的分支推送到遠程分支執行命令:#git push origin branch-name
將遠程的分支克隆到本地執行名:#git checkout -b branch-name origin/branch-name