springBoot引入本地jar包
git 的使用
1、介紹
程式碼版本管理、協同開發
- 對檔案(程式碼)進行版本管理
- 完成協同開發 專案,幫助程式設計師整合程式碼
- i)幫助開發者合併開發的程式碼
- ii)如果出現衝突程式碼的合併,會提示後提交合並程式碼的開發者,讓其解決衝突
windows系統下載網址:https://git-scm.com/download
下載完成後可以直接在要進行版本管理的檔案中右鍵點選,即可調出bash命令視窗
git與svn比較
git 分散式管理:每個客戶端都能完成版本管理的功能
svn集中式管理:所有程式碼都放在服務端,版本管理由服務端完成
Git:分散式,無網路時也可以提交到本地版本庫,待到有網路時再push到伺服器.
svn:非分散式,無網路不可以提交
git,github,gitee,gitlab分別是什麼
-
Git:是一種版本控制系統,是一個命令,是一種工具。
-
GitHub:是一個基於Git實現的線上程式碼託管倉庫,包含一個網站介面,向網際網路開放,公有倉庫免費,部分私有倉庫收費,全球最大的開原始碼託管平臺
-
GitLab:是一個基於Git實現的線上程式碼倉庫託管軟體,可以通過GitLab自己搭建一個類似於GitHub一樣的系統,用在企業內部網路搭建Git私服,用於企業團隊內部協作開發
-
Gitee:(碼雲) 是 OSCHINA 推出的程式碼託管平臺,支援 Git 和 SVN,提供免費的私有倉庫託管,面向網際網路開發,分收費和付費,中國最大的開原始碼託管平臺
2、Git工作流程
本地分為三個區:工作區、暫存區、版本庫
Git的工作流程就是三個區的來回切換:
- 工作區(檔案變紅色):操作檔案就能變紅,比如增加內容等操作
- 工作區提交到暫存區(檔案變綠色):
git add . 或檔名
- 暫存區提交到版本庫:
git commit -m '註釋'
,註釋是必須加的 - 版本庫回退到工作區沒有更改的時候:
git reset --hard 版本號
,版本號版本庫有
""" 1)有紅色資訊(工作區有內容),就執行 add 2)全綠資訊(內容全部在暫存區),才執行 commit 3)只有被版本庫控制的程式碼,才能被監聽,所以可以回滾到任何一個版本 """
總結:工作區管理的檔案發生變化會變色,變為紅色,通過命令git add .
提交到暫存區變綠,暫存區通過git commit -m '註釋'
提交到版本庫
注意:只有被版本庫控制的程式碼,才能被監聽,所以可以回滾到任何一個版本
3、Git常用命令
在倉庫目錄終端下 - 設定全域性使用者
這是在全域性檔案 C:\Users\使用者資料夾.gitconfig新建使用者資訊,在所有倉庫下都可以使用
git config --global user.name '使用者名稱'
git config --global user.email '使用者郵箱'
在倉庫目錄終端下 - 設定區域性使用者
git config user.name '使用者名稱'
-- 使用者名稱
git config user.email '使用者郵箱'
-- 使用者郵箱
注:在當前倉庫下的config新建使用者資訊,只能在當前倉庫下使用
注:一個倉庫有區域性使用者,優先使用區域性使用者,沒有配置再找全域性使用者
自行建立使用者
初始化倉庫
初始化會在當前資料夾下創建出一個
.git
的隱藏資料夾,git配置,版本資訊在裡面。比如使用我們建立的gittest
資料夾來初始化。
"""
>: cd 目標目錄
>: git init 檔案/資料夾
"""
git init
'''
初始化倉庫,會在當前資料夾下創建出一個.git的隱藏資料夾,git配置,版本資訊在裡面
'''
工作命令:
檢視狀態--》紅色,綠色,沒有---》新增,修改,刪除--》變紅
git status
把工作區變化提交到暫存區---》變綠色
git add . # . 表示當前路徑下所有變更
把暫存區提交到版本庫 ---》從綠變無色
git commit -m '註釋'
檢視版本庫的版本資訊
git log # 檢視版本資訊,顯示詳細資訊,變化記錄的少
git reflog # 檢視版本資訊,顯示簡略資訊,變化都會記錄
工作區回退到某個版本
git reset --hard 7c419c9934
git reset --hard 0a5dbb0
其他,不需要太瞭解,基本不用
- 把工作區變化撤銷
git checkout .
- 把暫存區拉回到工作區(綠變紅)
git reset HEAD
注意 :
.git資料夾做了記錄,不能刪除,如果刪除,版本的記錄也就沒了
空資料夾不會被版本管理
4、Git過濾檔案
如果我們有一些檔案或資料夾不需要被git版本管理可以這樣處理:
在倉庫路徑下(被git管理的資料夾),建立一個 .gitignore
的檔案,在檔案中寫入忽略,檔案與資料夾均可以被過濾
檔案過濾語法
過濾檔案內容
檔案或資料夾名:代表所有目錄下的同名檔案或資料夾都被過濾
/檔案或資料夾名:代表倉庫根目錄下的檔案或資料夾被過濾
舉例:
a.txt:專案中所有a.txt檔案和資料夾都會被過濾
/a.txt:專案中只有根目錄下a.txt檔案和資料夾會被過濾
/b/a.txt:專案中只有根目錄下的b資料夾下的a.txt檔案和資料夾會被過濾
*x*:名字中有一個x的都會被過濾(*代表0~n個任意字元)
空資料夾不會被提交,空包會被提交,包可以被提交(包中有一個init空檔案)
後端專案的.gitignore
一般這些檔案或資料夾需要被過濾掉
.idea
__pycache__
*.pyc
logs/*.log
scripts
5、分支操作
分支操作就是git 可以建立多條分支,建立完以後,在不通分支上提交版本,不同分支的版本相互不影響
分支操作常用命令:
1.建立分支
git branch 分支名
2.檢視分支
git branch
3.切換分支
git checkout 分支名
4.建立並切換到分支
git checkout -b 分支名
5.刪除分支
git branch -d 分支名
6.檢視遠端分支(暫時先不看)
git branch -a
7.合併分支
git merge 分支名
把dev分支合併到master分支:切換到master分支,執行合併dev分支的命令
注意:
-
合併分支的時候是在
master
主幹合併,比如把dev分支合併到master分支,切換到master分支,執行合併dev分支的命令 - 分支合併可能會出衝突,比如master主幹改了程式碼提交了,dev改了程式碼提交了,他們改的是同一個程式碼,合併就會出衝突
實驗:
git checkout -b dev
touch dev.txt
git add .
git commit -m 'dev分支增加了dev.txt'
git checkout master
git merge dev
----------
git checkout dev
git add .
git commit -m 'dev分dev.txt增加了一行'
git checkout master
git merge dev
------
6、Git遠端倉庫
遠端倉庫:gitee,github,bitbucket,如果是自己搭建的gitlab,把本地版本庫中的程式碼提交到遠端倉庫,大家都提交,完成程式碼合併,協同開發。
倉庫的創始者,還是後期開發者
"""
1)你作為專案倉庫初始化人員:
線上要建立空倉庫 => 本地初始化好倉庫 => 建立remote連結(remote add) => 提交本地倉庫到遠端(push)
2)你作為專案後期開發人員:(大部分都是公司已經有專案了,你基於這個專案繼續開發)
遠端專案倉庫已經建立成功 => 複製遠端倉庫到本地(clone) => 進入倉庫就可以進行接下來的開發
"""
unix:系統--》收費---》學校用免費
gnu:類unix系統,開源免費的,
linux:核心
GNU專案(開源軟體cp,rm)+Linux核心=完整的作業系統
GPL開源協議
把原生代碼提交到遠端倉庫
-
建立空倉庫,如上圖
-
Git 全域性設定
git config --global user.name "使用者名稱" git config --global user.email "郵箱"
-
如果沒有倉庫,建立 git 倉庫
mkdir luffy_api cd luffy_api git init touch README.md git add README.md git commit -m "first commit" git remote add origin https://gitee.com/li-gitte/luffy_api.git git push -u origin "master"
-
如果有倉庫了
cd existing_git_repo git remote add origin https://gitee.com/li-gitte/luffy_api.git git push -u origin "master"
注意:git push -u origin master 中-u的意思是,只要執行一遍這個命令,以後執行git push 就等同於git push origin maste,所有-u表示設定一個預設
remote源操作
# 1 檢視遠端倉庫
git remote
#2 新增遠端倉庫
git remote add 起一個名字 遠端倉庫地址
git remote add origin https://gitee.com/li-gitte/luffy_api.git
# 3 刪除遠端倉庫
git remote remove origin
# 4 把本地倉庫提交到遠端倉庫
git push 遠端倉庫名字 分支名
# 第一次:要輸入使用者名稱密碼,只要輸入一次,以後就記錄到作業系統上了
# windows:憑證管理,刪除
git push origin master
# 5 從遠端倉庫更新(拉取)程式碼
git pull 遠端倉庫名字 分支名
git pull origin master
# 常用的命令
git add .
git status
git commit -m '註釋'
git pull origin master
git push origin master
憑據管理:控制面板\使用者帳戶\憑據管理器
採用ssh協議連線遠端源
建立電腦的公鑰私鑰
官網:https://gitee.com/help/articles/4181#article-header0
本機命令,生成公鑰:ssh-keygen -t rsa -C "*@*.com"
郵箱可以任意填寫
本機命令,檢視公鑰:cat ~/.ssh/id_rsa.pub
碼雲線上新增公鑰:專案倉庫 => 管理 => 部署公鑰管理 => 新增公鑰 => 添加個人公鑰
提交原生代碼到遠端倉庫
命令:git push origin master
如何成為其他碼雲專案的開發者
"""
1)生成自己電腦的公鑰,配置到自己的碼雲個人公鑰中
2)把自己的碼雲使用者名稱提供給別人,別人新增你成為專案開發者
3)自己確認新增,成為開發者,克隆開發專案,進行開發
"""
如何成為公司自建git伺服器的開發者
"""
1)生成自己電腦的公鑰(公鑰生成一次就可以了),把它提交給專案管理者
2)專案管理者新增你公鑰,加入開發者,提供給你專案克隆地址
3)克隆開發專案,進行開發
"""
協同開發
"""
1)作為開發者,第一次同步專案(前臺已經是專案開發者了)
>: git clone 專案地址
2)保證自己本地有dev分支,且與遠端倉庫版本同步(沒有就自己新建)
3)本地開發的程式碼,必須add、commit到本地版本庫後,才和遠端倉庫進行互動
4)互動順序:必須 先拉(pull)後提(push)
5)必須切換到要互動的分支,在與遠端同名的分支進行互動,如本地dev與遠端dev互動
>: git checkout dev
>: git add .
>: git commit -m '本次提交的資訊提示'
>: git pull origin dev
>: git push origin dev
"""
協同開發中如何稱為開發者?如何克隆專案?
一般都是專案的管理員邀請你稱為開發者或者觀察者···
-
遠端倉庫和本地倉庫的.git 檔案如果不一致,即 pull 拉不下來,也 push 不上去,需要另外建立一個檔案,把遠端倉庫的專案拉到那裡,然後遠端倉庫的 .git 檔案替換掉本地倉庫的 .git,這樣就能pull 和 push了,
-
本地倉庫提交之前一般要把遠端倉庫的pull下來,合併了遠端倉庫最新的版本,再 push提交
-
但如果是想要讓遠端倉庫回退到最新版本的,使用 git push origin master -f 強制提交
7、解決衝突
程式碼衝突
當我們本地和遠端倉庫修改了相同位置得相同程式碼提交得時候就會出現衝突;
我們本地提交程式碼的時候需要將本地的程式碼更新到最新,所以需要先git pull ···
,然後再git push···
出現衝突
只要我們pull下來就會發現衝突,哪個檔案衝突了檔名就會變紅
會把遠端衝突的程式碼合併進來
<<<<<<< HEAD # 衝突開始
HammerZe is big # 這裡是我的程式碼
=======
HammerZe is tobig # 這裡是遠端程式碼
>>>>>>> e2d67d7517d66d244f824a32e20d4dd43f4ffc4d # 衝突結束
解決
# 檢視程式碼,如果是同樣的功能,選擇保留同事的或自己的,如果是不同功能,兩個程式碼都保留,如果真的要刪同事的程式碼,交流抉擇刪除衝突程式碼,最終解決衝突
git add .
git commit -m '解決衝突'
git pull origin master
git push origin master
合併分支衝突#
比如如果我們在主幹master
和開發分支dev
增加或修改了相同的程式碼,這樣再合併就會衝突
demo
git branch dev
# 加入會衝突的程式碼
git add .
git commit -m '主分支加入了一行'
git checkout dev
git status
# 加入會衝突的程式碼
git add .
git commit -m 'dev分支加入了一行'
git checkout master
git merge dev
# 出現下面衝突
<<<<<<< HEAD
HammerZe is big
=======
HammerZe is very big
>>>>>>> dev
解決辦法和上面的一樣,如果程式碼功能相同選擇性刪除另外分支的程式碼,如果程式碼功能不相同都保留或優化
# 手動解決衝突,再提交
git add .
git commit -m '分支合併衝突解決'
注意:正常情況,合併完分支,就把dev刪除,繼續開發,再重新建立dev分支
8、線上分支合併
提交PR
# 提交pull request---》提交pr---》提個合併分支請求
# 提交pr---》你領導稽核---》稽核通過同意---》程式碼合併完成
# 本地某個分支加入了程式碼,提交到遠端
# 在遠端新建一個pull Request,選擇要合併的兩條分支---》提交了領導收到請求
# 看你的程式碼---》沒有問題---》同意---》合併到分支中去,完成線上分支合併
變基:https://www.cnblogs.com/liuqingzheng/p/15328319.html
搭建gitlab:https://zhuanlan.zhihu.com/p/413217715
補充
1 線上分支合併----》線下分支合併後提交到線上
-本地dev ,master,本地把dev合到master中後,push到master(有的公司不給你master的寫許可權)
2 git flow,git變基,git fetch和git pull的區別
-git flow 大神提出的一種git分支方案
-git 變基:1 多個記錄整合成一個記錄 2 解決分支合併分叉問題
-相同點首先在作用上他們的功能是大致相同的,都是起到了更新程式碼的作用。2. 不同點git pull 類似於 git fetch+git merge
3 pycharm操作git
-右下角可以操作分支
-原來用命令操作的,用圖形化點點點都能完成,並且更直觀且強大
4 為開源專案貢獻程式碼
-fork開原始碼---》你自己倉庫有一份
-改你自己倉庫的程式碼,提交到自己倉庫
-你的倉庫,跟它就不一樣了
-提交pr,等作者稽核,他是不是給你合進去,如果合進去了