一 Git(重點)
1 git是什么?
git是目前世界上最先進的分布式版本控制工具(沒有之一)。
git由什么特點?
什么是版本控制工具?
說白了就是幫助我們管理不同版本的文件的一個應用程序。
2 git誕生
2002年之前,linus自己手動維護linux的版本代碼
2002之后到2005年,使用的免費的bitkeeper
2005年之后,linus開發git
3 集中型版本控制工具和分布式版本控制工具
3.1 集中型的版本控制工具
svn,cvs,vss
特點:
1. 實現大部分開發中對版本管理的需求
2. 結構很簡單,上手容易
缺點:
1. 對中央倉庫依賴嚴重,一旦損壞了,歷史數據怎么恢復?
2. 程序員上傳的都是完整版,如何追溯查詢?
3. 系統正在上線運行,需要修改bug或增加幾個不同的功能,持續幾個月的時間。如何同時管理幾個版本
4. 如果管理一個分布在世界上各地且互不相識的大型開發團隊
3.2 分布式版本控制工具
4 git的作用
1. 協同開發
2. 版本記錄
3. 沖突解決
4. 歷史追查
5. 代碼備份
6. 版本還原
7. 權限管理
8. 分支管理
9. 代碼審查
...
5 git安裝
最早的git是在linux上開發的,很長一段時間中,git只能在linux和unix上運行。不過,后來有人把他一直到windows平台。現在git可以在linux、unix、mac os和windows幾個主流平台運行。
要使用git,第一步當然是安裝。在windows安裝
5.1 在windows中安裝git
1. 命令行工具:git for windows(重點)
https://git-for-windows.github.io/1
tip:
點擊安裝包,然后傻瓜式的安裝就可以成功
2. 可視化工具:TortoiseGit
https://tortoisegit.org
3. idea插件(掌握)
4. github網站(掌握)
http://www.github.com
6 配置git簽名
6.1 第一步
選中你要作為git工程存放的目錄,然后單擊鼠標右鍵選擇git bash即可。
tip:
git是分布式版本控制工具,所以我們需要填寫用戶名和郵箱作為一個標志。
C:\Users\lixi19861125路徑下.gitconfig文件,這個我文件里面可以看到--global屬性,所有的git項目都會公用這個屬性
git config --global user.name "lixi"
git config --global user.email "lixi@1000phone.com"
7 創建版本庫
7.1 第一步 選中一個的git工程的目錄
7.2 第二步 輸入命令初始化版本庫
git init
8 git命令行操作
8.1 查看文件狀態
git status
8.2 將文件/目錄添加到臨時暫存區
git add 文件名/目錄名
e.g.
git add src/HelloWorld.java
tip:
以上通過git add命令的文件會提交到暫存區中,但是這里的文件其實沒有真正的提交。使用下一個命令才是把他提交到一個統一的版本文件
8.3 提交文件
git commit
e.g.
git commit -m "提交提示信息"
tip:
每當有文件被修改/添加/刪除的時候,都需要重新git add,然后再git commit
8.4 查看日志
git log : 查看歷史記錄
e.g.
$ git log
commit 29df21765ff605e8f204417f9251c410f88563b0
Author: lixi <lixi@1000phone.com>
Date: Mon Mar 9 15:10:55 2020 +0800
update 002
commit 76551c4baf66d295d26a2798fe5ff8ca3e827f4a
Author: lixi <lixi@1000phone.com>
Date: Mon Mar 9 15:04:25 2020 +0800
create 001
e.g.
$ git log --pretty=oneline
29df21765ff605e8f204417f9251c410f88563b0 update 002
76551c4baf66d295d26a2798fe5ff8ca3e827f4a create 001
8.5 回退歷史
8.5.1 創建一個文件 : a.txt
aaaaaaaaaaaaa
bbbbbbbbbbbbb
ccccccccccccc
ddddddddddddd
tip:
添加到暫存區然后提交
8.5.2 修改這個文件:a.txt
aaaaaaaaaaaaa
ccccccccccccc
eeeeeeeeeeeee
tip:
添加到暫存區然后提交
8.5.3 回退到上一次提交
git reset --hard HEAD^1
tip:
HEAD是一個指針,永遠指向最新版本,^1表示讓HEAD指針指向上一個版本
--hard 硬:這種回顧不但將版本回顧,還會將指定的數據抹除。不會保留任何你修改的記錄
--soft 軟:回退版本,也會保留改動的記錄。會自動幫你git add。
--mix 折中:回退版本,並會保留所有改動記錄。但是不會自動幫你git add
git reset : 修改HEAD的位置
這種方式可以恢復到之前某個提交的版本,但是恢復之后,當前版本之后的版本將不復存在。
8.5.4 回退到多個版本
git reset --hard HEAD~2 #回退到2個版本之前的版本
8.5.5 版本穿越
git reflog # 查看歷史記錄的版本號
e.g.
$ git reflog
29df217 HEAD@{0}: reset: moving to HEAD~2
8938885 HEAD@{1}: reset: moving to HEAD^1
7c77ab0 HEAD@{2}: commit: update 004
8938885 HEAD@{3}: commit: update 003
c07b56d HEAD@{4}: commit: update 003
29df217 HEAD@{5}: commit: update 002
76551c4 HEAD@{6}: commit (initial): create 001
e.g.
git reset --hard 7c77ab0
8.6 還原文件
git checkout 文件名
e.g.
vi src/b.txt
111111111
222222222
333333333
444444444
git add src/b.txt
git commit -m "update 005"
修改 b.txt
111111111
222222222
333333333
444444444
555555555
666666666
git checkout src/b.txt
8.7 刪除文件
1. 先刪除文件
2. git add
3. git commit
9 工作區、暫存區、本地庫
9.1 概念
工作區(Working Directory) : 電腦的本地磁盤目錄
本地庫(Repostory) : 工作區中有一個隱藏目錄.git,它就是git的本地版本庫
暫存區(stage) : 一般存儲再git目錄下的index文件,所以我們把暫存區有時候也叫做索引。
9.2 關系圖
10 分支
10.1 分支概念
項目已經上線了,但是產品經理又提出了新的需求,評估實現這個新功能需要2個月的時就按。但是項目還是需要同時上線運行,時不時修改bug,如何管理這幾個版本。
10.2 查看分支
git branch -v
e.g.
$ git branch -v
* master b94d274 update 006
10.3 創建分支
git branch 分支名稱
e.g.
$ git branch common
$ git branch -v
common b94d274 update 006
* master b94d274 update 006
10.4 切換分支
git checkout 分支名
e.g.
git checkout common
10.5 合並分支(將其他分支合並到主分支:master)
1. 切換到主分支
git checkout master
2. 合並
git merge 分支名
e.g.
git merge common
11 沖突
11.1 什么是沖突
沖突一般是指同一個文件同一位置的代碼,再兩種版本的倉庫合並時,版本的管理軟件無法判斷到底應該保留哪一個版本,因此會提示該文件發生沖突,沖突一般都需要程序員手動解決。
11.2 在分支合並的時候解決沖突
1. 先在master分支上創建一個luosenhan.txt
2. 再在common分支上創建一個luosenhan.txt
3. 分別提交
4. 最后合並
e.g.
$ git merge common
Auto-merging src/luosenhan.txt
CONFLICT (add/add): Merge conflict in src/luosenhan.txt
Automatic merge failed; fix conflicts and then commit the result.
5. 查看沖突
git diff
$ git diff
diff --cc src/luosenhan.txt
index 7d8fefb,9f9848c..0000000
--- a/src/luosenhan.txt
+++ b/src/luosenhan.txt
@@@ -1,3 -1,2 +1,8 @@@
++<<<<<<< HEAD
+11111111111111111
+22222222222222222
- 33333333333333333
++33333333333333333
++=======
+ 222222222222222
-333333333333333
++333333333333333
++>>>>>>> common
6. 解決沖突:切換到哪個目錄,然后查看文件
7. 再重新add和commit即可
二 GitHub(重點)
1 什么是github?
github是一個git項目托管網站,主要提供基於git的版本托管服務。
網址:https://github.com
注冊賬號的注意事項
- 不要使用163郵箱,有可能收不到校驗郵件。
- 較長時間不適用,有可能被github凍結賬號。
- 如果凍結賬號,請登錄https://github.com/contact恢復申請
2 GitHub操作
2.1 建立本地倉庫
1. 創建guojing和huangrong子目錄
2. 搭建代碼庫
git init
git config user.name "huangrong"
git config user.email "lixi19861125@qq.com"
3. 提交代碼
git add
git commit
2.2 注冊github賬號並登錄
2.3 創建github的項目庫
2.4 推送代碼到git
- 增加遠程地址
git remote add <遠端代號> <遠端地址>
<遠端代號> :指遠程鏈接的代號,一般直接用origin做代號,也可以自定義
<遠端地址> :指遠程鏈接的url
e.g.
git remote add origin https://github.com/rocklee86/kongfu.git
- 推送到遠程庫
git push <遠端代號> <分支名>
e.g.
git push origin master
2.5 下載GitHub上的庫
- 從GitHub上克隆(guojing)
git clone <遠端地址> <項目的目錄名>
<項目的目錄名> : 指為克隆的項目在本地新建的一個目錄名,可以不填,默認就是使用github倉庫名
e.g.
git clone https://github.com/rocklee86/kongfu.git kongfu
- 修改文件
git push origin master
1. 問題1:
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
解決方案如下圖:
當黃蓉邀請了郭靖之后,郭靖用戶的郵箱會接受到一份邀請的郵件,點擊查看邀請會來到如下圖:
再次提交代碼:
git push origin master
2.6 huangrong用戶同步更新代碼
- 從github更新項目
git pull <遠程代碼> <遠程分支>
e.g.
git pull origin master
3 合作沖突
3.1 什么是協作沖突
在上傳或者同步代碼時,由於你和他人都修改了同一文件的同一位置的代碼,版本管理工具無法判斷究竟以誰為准,這就會報告沖突,需要程序員手動解決。
3.2 解決方式
1. 修改合並
2. git add
3. git commit
1. 在huangrong用戶修改打狗棒法.txt並提交
2. 在guojing用戶修改打狗棒法.txt並提交
4 第三方團隊參與場景
4.1 畫圖分析
4.2 操作測試
1. 使用所謂的穆念慈用戶(lixi86)fork出黃蓉對應的庫
2. 使用穆念慈用戶修改fork出來的某個文件
3. 然后查看如圖
4. 操作完成之后,項目管理者(黃蓉)就會收到一封同步請求的郵件
三 GitLab
5.1 什么是gitlab
"自架私服版"的github
官網:https://about.gitlab.com
下載網址:https://about.gitlab.com/install
5.2 安裝
1. 下載依賴
yum install -y curl policycoreutils-python openssh-server cronie lokkit http ssh
2. 安裝
rpm -ivh /opt/software/gitlab-ce-11.9.0-ce.0.el6.x86_64.rpm
3. 預配gitlab的組件
gitlab-ctl reconfigure
4. 修改gitlab的配置url
vi /etc/gitlab/gitlab.rb
external_url 'http://gitlab.1000phone.com'
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
host: gitlab.1000phone.com
port: 80
https: false
5. 修改windows的hosts
192.168.49.103 slave3 gitlab.1000phone.com
5.3 啟動gitlab
gitlab-ctl start/stop/restart
四 idea整合git
6.1 在github上創建一個庫
6.2 打開idea,選擇setting
settings ---> Version Control ---> Git
6.3 再選擇github
1. 需要現在github上生成授權令牌(token)
https://github.com/settings/tokens/new
2. 然后再將生成的令牌填入到idea的githup處即可
2.1 file ---> New ---> Project from Version Control ---> Git
3. 如何想要上傳的文件
右鍵 ---> Git ---> add/commit
4. repostory ---> clone/push/pull
5. 如果有沖突會自動提示,選擇merge