Git&Gitee

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 //gitee.com/li-gitte/luffy_api.git
    git push -u origin "master"
    
  4. 如果有倉庫了

    cd existing_git_repo
    git remote add origin //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 //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 連接遠程倉庫

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

image-20220423210736419

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

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

注意,如果連接方式改變,需要刪除原理的遠程倉庫,再次添加換成新的連接方式

git remote remove origin  # 刪除
git remote add origin [email protected]: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,選擇要合併的兩條分支---》提交了領導收到請求

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


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

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

Tags: