Git&Gitee

HammerZe發表於2022-04-24

Git

img

Git介紹

Git是分散式版本控制系統,控制的物件是開發的專案程式碼

安裝

?Git (git-scm.com)

?Git - Downloads (git-scm.com)

命令學習

?Learn Git Branching (gitee.io)

傻瓜式安裝就可以了,然後安裝完右擊桌面檢視,有Git Bash Here就說明裝成功了

image-20220421193517550

Git的作用

  1. 對檔案(程式碼)進行版本管理

  2. 完成協同開發 專案,幫助程式設計師整合程式碼

    • i)幫助開發者合併開發的程式碼

    • ii)如果出現衝突程式碼的合併,會提示後提交合並程式碼的開發者,讓其解決衝突

git與svn比較

git 分散式管理:每個客戶端都能完成版本管理的功能
svn集中式管理:所有程式碼都放在服務端,版本管理由服務端完成

img

img

Git:分散式,無網路時也可以提交到本地版本庫,待到有網路時再push到伺服器.
svn:非分散式,無網路不可以提交

Git,GitHub,GitLab,Gitee

Git:是一種版本控制系統,是一個命令,是一種工具。

GitHub:是一個基於Git實現的線上程式碼託管倉庫,包含一個網站介面,向網際網路開放,公有倉庫免費,部分私有倉庫收費,全球最大的開原始碼託管平臺

GitLab:是一個基於Git實現的線上程式碼倉庫託管軟體,可以通過GitLab自己搭建一個類似於GitHub一樣的系統,用在企業內部網路搭建Git私服,用於企業團隊內部協作開發

Gitee:(碼雲) 是 OSCHINA 推出的程式碼託管平臺,支援 Git 和 SVN,提供免費的私有倉庫託管,面向網際網路開發,分收費和付費,中國最大的開原始碼託管平臺

Git工作流程

未命名檔案 (1)

本地分為三個區:工作區、暫存區、版本庫

Git的工作流程就是三個區的來回切換:

  • 工作區(檔案變紅色):操作檔案就能變紅,比如增加內容等操作

  • 工作區提交到暫存區(檔案變綠色):git add . 或檔名

  • 暫存區提交到版本庫:git commit -m '註釋',註釋是必須加的

  • 版本庫回退到工作區沒有更改的時候:git reset --hard 版本號,版本號版本庫有

"""
1)有紅色資訊(工作區有內容),就執行 add 
2)全綠資訊(內容全部在暫存區),才執行 commit
3)只有被版本庫控制的程式碼,才能被監聽,所以可以回滾到任何一個版本
"""

總結:工作區管理的檔案發生變化會變色,變為紅色,通過命令git add .提交到暫存區變綠,暫存區通過git commit -m '註釋'提交到版本庫

注意:只有被版本庫控制的程式碼,才能被監聽,所以可以回滾到任何一個版本

Git常用命令

這裡在Desktop建一個資料夾(gittest)給做示範:

image-20220421195848563

使用的時候切到該資料夾的路徑下

image-20220421200344189

在倉庫目錄終端下 - 設定全域性使用者

"""
>: git config --global user.name '使用者名稱'
>: git config --global user.email '使用者郵箱'

注:在全域性檔案 C:\Users\使用者資料夾\.gitconfig新建使用者資訊,在所有倉庫下都可以使用
"""

在倉庫目錄終端下 - 設定區域性使用者

"""
>: git config user.name '使用者名稱'
	-- 使用者名稱
>: git config user.email '使用者郵箱'
	-- 使用者郵箱
	
注:在當前倉庫下的config新建使用者資訊,只能在當前倉庫下使用
注:一個倉庫有區域性使用者,優先使用區域性使用者,沒有配置再找全域性使用者
"""

自行建立使用者

初始化倉庫

初始化會在當前資料夾下建立出一個.git的隱藏資料夾,git配置,版本資訊在裡面。比如使用我們建立的gittest資料夾來初始化。

"""
>: cd 目標目錄
>: git init 檔案/資料夾
"""

demo

git init
'''
初始化倉庫,會在當前資料夾下建立出一個.git的隱藏資料夾,git配置,版本資訊在裡面
'''

image-20220421202929434

檢視狀態

檢視檔案是處於工作區還是暫存區還是版本庫

命令:git status

demo

這裡建立一個a.txt檔案隨便寫入點內容

image-20220421203229478

工作區變化提交到暫存區

命令:git add .

demo:紅色變綠色

$ git add .
$ git status

image-20220421203800498

暫存區提交到版本庫

命令:git commit -m 註釋

image-20220421204831181

檢視版本庫的版本資訊

  • git log : 檢視版本資訊,顯示詳細資訊,變化記錄的少
  • git reflog :檢視版本資訊,顯示簡略資訊,變化都會記錄

image-20220421204914104

回退到工作區的某個版本

命令git reset --hard 版本

比如我們存幾張妹子圖,然後提交到版本庫,再回退到剛提交a.txt檔案的狀態

image

image-20220421215123213

再次檢視,妹子圖就沒有了,這只是切換了狀態,並沒有刪除

image-20220421215144492

恢復妹子圖

image-20220421215311791

image-20220421215319483

image-20220421215328262

其他命令

#  其他,不需要太瞭解,基本不用
- 把工作區變化撤銷
git checkout .
- 把暫存區拉回到工作區(綠變紅)
git reset HEAD

注意

.git資料夾做了記錄,不能刪除,如果刪除,版本的記錄也就沒了
空資料夾不會被版本管理

Git過濾檔案

如果我們有一些檔案或資料夾不需要被git版本管理可以這樣處理:

在倉庫路徑下(被git管理的資料夾),建立一個 .gitignore 的檔案,在檔案中寫入忽略,檔案與資料夾均可以被過濾

檔案過濾語法

""" 過濾檔案內容
檔案或資料夾名:代表所有目錄下的同名檔案或資料夾都被過濾
/檔案或資料夾名:代表倉庫根目錄下的檔案或資料夾被過濾

舉例:
a.txt:專案中所有a.txt檔案和資料夾都會被過濾
/a.txt:專案中只有根目錄下a.txt檔案和資料夾會被過濾
/b/a.txt:專案中只有根目錄下的b資料夾下的a.txt檔案和資料夾會被過濾
*x*:名字中有一個x的都會被過濾(*代表0~n個任意字元)
空資料夾不會被提交,空包會被提交,包可以被提交(包中有一個init空檔案)
"""

比如我們建立一個vue專案,本質是從github拉取了一個空專案,只是改成了你自己定義的名字而已,所以也自帶了git版本管理

image-20220421215940697

比如我們現在建立a,b,c,d.txt檔案,q.py,test資料夾,來設定過濾檔案

 C:\Users\32972\Desktop\gittest   master ± 
$ touch .gitignore

# 寫入如下內容
$ cat .gitignore
/test
*.txt
q.py

image-20220421220703269

我們可以發現這幾個檔案和資料夾被過濾掉了,不會被管理

後端專案的.gitignore

一般這些檔案或資料夾需要被過濾掉

.idea
__pycache__
*.pyc
logs/*.log
scripts

分支操作

分支操作就是git 可以建立多條分支,建立完以後,在不通分支上提交版本,不同分支的版本相互不影響

img

分支操作常用命令

命令 說明
git branch 分支名 建立分支
git branch 檢視分支
git checkout 分支名 切換分支
git checkout -b 分支名 建立並切換到分支
git branch -d 分支名 刪除分支
git branch -a 檢視所有分支
git branch -r 檢視遠端分支
git merge 分支名 合併分支

注意:

  • 合併分支的時候是在master主幹合併,比如把dev分支合併到master分支,切換到master分支,執行合併dev分支的命令

  • 分支合併可能會出衝突,比如master主幹改了程式碼提交了,dev改了程式碼提交了,他們改的是同一個程式碼,合併就會出衝突

demo

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
------

遠端倉庫-gitee

倉庫的創始者,還是後期開發者

"""
1)你作為專案倉庫初始化人員:
	線上要建立空倉庫 => 本地初始化好倉庫 => 建立remote連結(remote add) => 提交本地倉庫到遠端(push)
	
2)你作為專案後期開發人員:(大部分都是公司已經有專案了,你基於這個專案繼續開發)
	遠端專案倉庫已經建立成功 => 複製遠端倉庫到本地(clone) => 進入倉庫就可以進行接下來的開發
"""

建立倉庫

image-20220421233815147

把原生程式碼提交到遠端倉庫

  1. 建立空倉庫,如上圖

  2. Git 全域性設定

    git config --global user.name "使用者名稱"
    git config --global user.email "郵箱"
    
  3. 如果沒有倉庫,建立 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"
    
  4. 如果有倉庫了

    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

憑據管理:控制皮膚\使用者帳戶\憑據管理器

image-20220422000438117

注意:要經常從遠端倉庫拉取程式碼,避免衝突

push到遠端倉庫,需要輸入一次使用者名稱和密碼

SSH 連線遠端倉庫

官網:https://gitee.com/help/articles/4181#article-header0

image-20220423210736419

上面連線到遠端倉庫採用的是https的連線方式,需要輸入使用者名稱和密碼,如果想使用SSH連線方式,需要配置公鑰和私鑰,把公鑰配置到遠端機器(gitee、GitHub、gitlab··),私鑰配置本地,我們就可以安全通訊了,ssh採用的是非對稱加密的方式

使用SSH協議,配置步驟參考官網就可以了,非常詳細

注意,如果連線方式改變,需要刪除原理的遠端倉庫,再次新增換成新的連線方式

git remote remove origin  # 刪除
git remote add origin git@gitee.com:li-gitte/luffy_api.git # 新增
git push oringin master    # 提交

如何成為其他碼雲專案的開發者

如果公司專案已經存在,同事新入職,基於原專案開發
"""
1)生成自己電腦的公鑰,配置到自己的碼雲個人公鑰中
2)把自己的碼雲使用者名稱提供給別人,別人新增你成為專案開發者
3)自己確認新增,成為開發者,克隆開發專案,進行開發
"""

協同開發

協同開發中如何稱為開發者?如何克隆專案?

一般都是專案的管理員邀請你稱為開發者或者觀察者···

image-20220423224121797

"""
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 clone 地址

pycharm克隆

image-20220423224300767


解決衝突

程式碼衝突

當我們本地和遠端倉庫修改了相同位置得相同程式碼提交得時候就會出現衝突;

我們本地提交程式碼的時候需要將本地的程式碼更新到最新,所以需要先git pull ···,然後再git push···

出現衝突

image-20220423235518414

只要我們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分支

線上分支合併

提交PR

image-20220424001739314

# 提交pull request---》提交pr---》提個合併分支請求

# 提交pr---》你領導稽核---》稽核通過同意---》程式碼合併完成

# 本地某個分支加入了程式碼,提交到遠端

# 在遠端新建一個pull Request,選擇要合併的兩條分支---》提交了領導收到請求

# 看你的程式碼---》沒有問題---》同意---》合併到分支中去,完成線上分支合併


變基https://www.cnblogs.com/liuqingzheng/p/15328319.html

搭建gitlab:https://zhuanlan.zhihu.com/p/413217715