- 序言
- Git是什麼?
- 為什麼要做版本控制?
- 安裝git
- 使用
- 大體流程
- 回滾
- 回滾至之前版本
- 回滾之之後版本
- 撤銷修改
- 從暫存區回滾到工作區
- 商城&緊急修復bug
- 分支
- 緊急修復bug方案
- 命令總結
- 工作流
- GitHub
- 第五階段:進軍三里屯
- 第一天上班前在家上傳程式碼
- 初次在公司新電腦下載程式碼
- 下班回到家繼續寫程式碼
- 到公司繼續開發
- 在公司約妹子忘記提交程式碼
- 回家繼續寫程式碼
- 到公司繼續寫程式碼
- 其他
- rebase的作用?
- 快速解決衝突
- 小總結
- 第六階段:多人協同開發工作流
- 建立專案&邀請成員
- 擴充套件:Tag標籤管理
- 小弟開發
- code review
- 提測上線(預釋出)
- 建立專案&邀請成員
- 第七階段:給開源軟體貢獻程式碼
- 第五階段:進軍三里屯
- 其他
- 配置
- 免密碼登入
- git忽略檔案
- github任務管理相關
- 結課
序言
Git是什麼?
Git:分散式 版本控制 的軟體
檔案版本控制的方式:檔案複製--->本地版本控制--->集中式版本控制(中央伺服器, 例:SVN, NAS)--->分散式
為什麼要做版本控制?
- 放置線上程式碼出問題, 做回滾
安裝git
-
安裝在自己的電腦上, 只能用這個軟體完成在本地的版本控制, 若要多電腦使用, 需要依賴中心(倉庫: GitHub gitlab )
-
官網連結 Git - 安裝 Git (git-scm.com)
下載完畢後, 一直點next安裝即可, 安裝好後在滑鼠右鍵選單上會有顯示
使用
大體流程
版本控制--->git管理資料夾
1. 進入要管理的資料夾, 滑鼠右鍵選擇`Git Bash Here`, 在命令框輸入 初始化命令 進行初始化, 會在當前路徑下建立`.git`隱藏資料夾, 該資料夾儲存所有的該資料夾的版本資訊及配置
get init #初始化, 讓git幫助我們管理當前資料夾
輸入檢測當前檔案狀態命令 新的沒有在版本中的檔案會紅色表示
git status #檢測當前目錄下檔案狀態
輸入增加檔案命令 後面是檔名稱, 按tab補全.
git add readme.txt #增加一個檔案
git add . #增加當前路徑下的所有檔案
# 紅色:新增的檔案/修改了原老檔案 --->git add
# 綠色:git已經管理起來了, 檔案未存檔--->git commit -m ''
# 無色或不可見, 表示檔案已被管理且建立了新版本, 檔案已存檔
個人資訊配置:使用者名稱、郵箱 【一次即可】
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
生成版本
git commit -m '描述資訊' #生成版本
若你修改了檔案, 則需要重新檢測檔案改動, 然後增加需要更新到git的檔案或資料夾, 最後生成版本
git log #檢視版本記錄
回滾
若需要恢復到上一個版本, 那麼則需要進行回滾
回滾至之前版本
git log
git reset --hard 版本號 #回滾
示範:
$ git log
commit 4a7ca6fb18b0a7c728a709759c1a99270f9207f3 (HEAD -> master)#這裡的4a7c...就是版本號
Author: 舟清颺 <2225083194@qq.com>
Date: Sat Apr 22 17:05:13 2023 +0800
測試
Super@YU-ROG MINGW64 /c/MyDatabase/00 臨時處理/臨時 (master)
$
回滾之之後版本
git reflog
git reset --hard 版本號
撤銷修改
git checkout --檔名稱#例如對檔案進行了修改, 當需要恢復之前狀態時.
從暫存區回滾到工作區
git reset HEAD 檔名稱
商城&緊急修復bug
分支
分支可以給使用者提供多個環境的可以,意味著你可以把你的工作從開發主線上分離開來 ,以免影響開發主線。 git的檔案只保留修改的檔案, 別的是透過連結的方式儲存的.
緊急修復bug方案
主幹線master(線上內容), dev分支(新功能分支)
當專案開發到C3時, 建立分支dev(新功能分支, 會自動將C3快照一份),
然後再C3基礎上開發C4時(測試版新功能), 發現正式版C3有bug
切換為master分支, 然後建立bug分支, 切換到bug分支, 然後臨時建立bug修復版C5
合併: 切換到master分支, 將bug分支C5合併到master, 沒問題後刪除bug分支.
繼續開發: 切換到dev分支, 繼續開發C6功能(但是bug還沒修復, 因為是繼承於C3), 切換到master分支, 將dev分支合併到master分支上
衝突: 若在合併時, 同一檔案均做了不同修改, 例如C6沒有修復bug但有新功能, C5修復了bug但無新功能. 系統會將C5和C6衝突檔案放在一起, 等待你手動修改為唯一, 然後自己建立為C7版本
因為C5和C3指向同一個源頭, 故而合併無衝突. 而C6指向C3, C5在master且比C3高階, 所以不同源, 會衝突
命令總結
-
檢視分支
git branch #檢視分支, 預設主分支為master
-
建立分支
git branch 分支名稱 # git branch dev
-
切換分支
git checkout 分支名稱 # git checkout dev
-
分支合併(可能產生衝突)
git merge 要合併的分支#這裡是將要被合併分支合併到現在所在分支, 所以要切換到合併分支 git merge C5 注意:切換分支再合併
-
刪除分支
git branch -d 分支名稱#git branch -d bug 修復bug以後, bug分支就沒用了, 可以刪除了
工作流
工作的思維
至少有2個分支, 一個master, 一個dev(開發 )
GitHub
程式碼託管的倉庫
GitHubs程式碼託管平臺, 公共開發的免費, 私有的協同的需要租賃
gitlab是程式碼託管工具,可以自己搭建程式碼託管倉庫
第五階段:進軍三里屯
有錢之後就要造呀,一個人在三里屯買了一層樓做辦公室。
第一天上班前在家上傳程式碼
首先,需要註冊github賬號,並建立遠端倉庫,然後再執行如下命令,將程式碼上傳到github。
1. 給遠端倉庫起別名
git remote add origin 遠端倉庫地址
2. 向遠端推送程式碼
git push -u origin 分支
初次在公司新電腦下載程式碼
1. 克隆遠端倉庫程式碼
git clone 遠端倉庫地址 (內部已實現git remote add origin 遠端倉庫地址)
2. 切換分支
git checkout 分支
在公司下載完程式碼後,繼續開發
1. 切換到dev分支進行開發
git checkout dev
2. 把master分支合併到dev [僅一次]
git merge master
3. 修改程式碼
4. 提交程式碼
git add .
git commit -m 'xx'
git push origin dev
下班回到家繼續寫程式碼
1. 切換到dev分支進行開發
git checkout dev
2. 拉程式碼
git pull origin dev
3. 繼續開發
4. 提交程式碼
git add .
git commit -m 'xx'
git push origin dev
到公司繼續開發
1. 切換到dev分支進行開發
git checkout dev
2. 拉最新程式碼(不必再clone,只需要透過pull獲取最新程式碼即可)
git pull origin dev
3. 繼續開發
4. 提交程式碼
git add .
git commit -m 'xx'
git push origin dev
開發完畢,要上線
1. 將dev分支合併到master,進行上線
git checkout master
git merge dev
git push origin master
2. 把dev分支也推送到遠端
git checkout dev
git merge master
git push origin dev
在公司約妹子忘記提交程式碼
1. 拉程式碼
git pull origin dev
2. 繼續開發
3. 提交程式碼
git add .
git commit -m 'xx'
注:忘記push了
回家繼續寫程式碼
1. 拉程式碼,發現在公司寫的程式碼忘記提交...
git pull origin dev
2. 繼續開發其他功能
3. 把dev分支也推送到遠端
git add .
git commit -m 'xx'
git push origin dev
到公司繼續寫程式碼
1. 拉程式碼,把晚上在家寫的程式碼拉到本地(有合併、可能產生衝突)
git pull origin dev
2. 如果有衝突,手動解決衝突
3. 繼續開發其他功能
4. 把dev分支也推送到遠端
git add .
git commit -m 'xx'
git push origin dev
其他
git pull origin dev
等價於
git fetch origin dev
git merge origin/dev
rebase的作用?
rebase可以保持提交記錄簡潔,不分叉。
快速解決衝突
-
安裝beyond compare
-
在git中配置
git config --local merge.tool bc3 git config --local mergetool.path '/usr/local/bin/bcomp' git config --local mergetool.keepBackup false
-
應用beyond compare 解決衝突
git mergetool
小總結
-
新增遠端連線(別名)
git remote add origin 地址
-
推送程式碼
git push origin dev
-
下載程式碼
git clone 地址
-
拉取程式碼
git pull origin dev 等價於 git fetch origin dev git merge origin/dev
-
保持程式碼提交整潔(變基)
git rebase 分支
-
記錄圖形展示
git log --graph --pretty=format:"%h %s"
第六階段:多人協同開發工作流
建立專案&邀請成員
協同開發時,需要所有成員都可以對同一個專案進行操作,需要邀請成員並賦予許可權,否則無法開發。github支援兩種建立專案的方式(供多人協同開發)。
-
合作者,將使用者新增到倉庫合作者中之後,該使用者就可以向當前倉庫提交程式碼。
-
組織,將成員邀請進入組織,組織下可以建立多個倉庫,組織成員可以向組織下倉庫提交程式碼。
擴充套件:Tag標籤管理
為了能清晰的管理版本,在公司不會直接使用commit來做版本,會基於Tag來實現:v1.0 、 v1.2 、v2.0 版本。
git tag -a v1.0 -m '版本介紹' 建立本地建立Tag資訊
git tag -d v1.0 刪除Tag
git push origin --tags 將本地tag資訊推送到遠端倉庫
git pull origin --tags 更新本地tag版本資訊
git checkout v.10 切換tag
git clone -b v0.1 地址 指定tag下載程式碼
小弟開發
-
小弟註冊Github 或 Gitlab賬號
-
邀請小弟進入組織(預設對組織中的專案具有讀許可權)
-
邀請小弟成為某專案的合作者
-
小弟在自己電腦上下載程式碼並開發
git clone https://github.com/oldboy-org/dbhot.git cd dbhot git checkout dev git checkout -b dzz 寫程式碼... git add . git commit -m '鬥地主功能開發完成' git push origin ddz
code review
-
配置,程式碼review之後才能合併到dev分支。
-
小弟提交 code review申請
-
組長做 code review
提測上線(預釋出)
由專門團隊或團隊leader執行以下步驟:
-
基於dev分值建立release分值
git checkout dev git checkout -b release
-
測試等
-
合併到master
使用pull request 或 本地將release合併到master分支
-
在master分支打tag
git tag -a v2 -m '第二版 鬥地主功能' git push origin --tags
-
運維人員就可以去下載程式碼做上線了
git clone -b v2 地址
第七階段:給開源軟體貢獻程式碼
- fork原始碼
將別人原始碼複製到我自己的遠端倉庫。 - 在自己倉庫進行修改程式碼
- 給原始碼的作者提交 修復bug的申請(pull request)
其他
配置
-
專案配置檔案:專案/.git/config
git config --local user.name '武沛齊' git config --local user.email 'wupeiqi@xx.com'
-
全域性配置檔案: ~/.gitconfig
git config --global user.name 'wupeiq' git config --global user.name 'wupeiqi@xx.com'
-
系統配置檔案:/etc/.gitconfig
git config --system user.name 'wupeiq' git config --system user.name 'wupeiqi@xx.com' 注意:需要有root許可權
應用場景:
git config --local user.name '武沛齊'
git config --local user.email 'wupeiqi@xx.com'
git config --local merge.tool bc3
git config --local mergetool.path '/usr/local/bin/bcomp'
git config --local mergetool.keepBackup false
git remote add origin 地址 ,預設新增在本地配置檔案中(--local)
免密碼登入
-
URL中體現
原來的地址:https://github.com/WuPeiqi/dbhot.git 修改的地址:https://使用者名稱:密碼@github.com/WuPeiqi/dbhot.git git remote add origin https://使用者名稱:密碼@github.com/WuPeiqi/dbhot.git git push origin master
-
SSH實現
1. 生成公鑰和私鑰(預設放在 ~/.ssh目錄下,id_rsa.pub公鑰、id_rsa私鑰) ssh-keygen 2. 複製公鑰的內容,並設定到github中。 3. 在git本地中配置ssh地址 git remote add origin git@github.com:WuPeiqi/dbhot.git 4. 以後使用 git push origin master
-
git自動管理憑證
git忽略檔案
讓Git不再管理當前目錄下的某些檔案。
*.h
!a.h
files/
*.py[c|a|d]
更多參考:https://github.com/github/gitignore
github任務管理相關
- issues,文件以及任務管理。
- wiki,專案文件。
結課
感謝各位同學的關注和學習,希望git實戰課程對你能夠有所幫助,更多資源關注:
- 小猿圈 <www.apeland.cn>
- 路飛學城 <www.luffycity.com>
- 老男孩IT教育 <www.oldboyedu.com>