Git多分支 遠端倉庫 協同開發以及解決衝突

2023-03-03 18:00:16

一、Git多分支及遠端倉庫

1.Git多分支

首先要搞明白什麼是多分支? 為什麼要多分支? 接下來回答一下這兩個問題吧!首先分支就是一個倉庫的字型檔;多分支可以保證主分支的版本都是可以檢視的版本、我們都在開發分支開發,開發完成,合併到主分支。

#分支操作的詳細步驟

第一步:分支檢視 git branch

第二步:分支建立 git branch dev
branch後面寫分支的名稱,比如dev(develop,即開發分支),dev指的是要建立的分支名字

第三步:分支切換 git checkout dev
切換的關鍵字是checkout,checkout後面寫要切換的分支名字(dev)

第四步:分支刪除 git branch -d dev
需要注意的是:在dev分支上不能刪除dev分支,需要先切換到master分支上執行刪除命令

分支合併

以上都是在本地操作;接下來要研究的是遠端操作!

2.正常密碼連結遠端倉庫

把原生的版本提交到遠端倉庫比如說(gitee,github,gitlab。。。。),本篇文章以Gitee為例講解此過程,提供一下gitlab的搭建過程https://zhuanlan.zhihu.com/p/413217715
因為路飛專案寫好了一部分板塊,按照敏捷開發的思路,完全可以管理程式碼,以下是具體步驟

-------------------------------------------------------------------開始--------------------------------------------------------------

在本地

第一步:在luffy_api 敲git init
tips:避免操作過程中不小心丟失專案檔案,最好複製一份用來練習題材

第二步:設定忽略檔案(.gitignore)

這是忽略檔名大全,我自己沒有完全寫好就提交到版本庫了,也不想來來回回,想著在筆記裡面總結一下

第三步:執行提交暫存區和版本庫的命令
git add .
git commit -m '第一次提交'


------------提交到了本地版本庫 被版本管理了------------

在遠端

第一步:遠端要建立倉庫:gitee上建立倉庫,右上角 +

第二步:填寫一些基本資訊,下面的是建立倉庫需要填寫資訊的詳細講解

最後不要勾選初始化倉庫和設定模板
開發者模式設定為master/develop模式
要保證倉庫是空的即可

再回到本地

第一步:設定設定郵賬戶和郵箱

git config --global user.email "[email protected]"
git config --global user.name "Almira998"

第二步:遠端新增原始碼

# 新增一個遠端倉庫地址名字叫origin,地址是xxx
git remote add origin https://gitee.com/almira998/luffy_api.git
# 把本地當前所在分支,推播到 origin對應的遠端的master上
git push origin master

倉庫地址在圖裡面提示找就行

說明密碼遠端提交成功

-------------------------------------------------------------------結束--------------------------------------------------------------

3.ssh公鑰私鑰方式連結遠端倉庫

首先回顧一下什麼是SSH吧 !SSH(Secure Shell),由 IETF 的網路小組(Network Working Group)所制定;SSH 為建立在應用層基礎上的安全協定。SSH 是較可靠,專為遠端登入對談和其他網路服務提供安全性的協定。利用 SSH 協定可以有效防止遠端管理過程中的資訊洩露問題。SSH最初是UNIX系統上的一個程式,後來又迅速擴充套件到其他操作平臺。SSH在正確使用時可彌補網路中的漏洞。SSH使用者端適用於多種平臺。幾乎所有UNIX平臺—包括HP-UX、Linux、AIX、Solaris、DigitalUNIX、Irix,以及其他平臺,都可執行SSH。傳統的網路服務程式,如:ftp、pop和telnet在本質上都是不安全的,因為它們在網路上用明文傳送口令和資料,別有用心的人非常容易就可以截獲這些口令和資料。而且,這些服務程式的安全驗證方式也是有其弱點的, 就是很容易受到「中間人」(man-in-the-middle)這種方式的攻擊。所謂「中間人」的攻擊方式, 就是「中間人」冒充真正的伺服器接收你傳給伺服器的資料,然後再冒充你把資料傳給真正的伺服器。伺服器和你之間的資料傳送被「中間人」一轉手做了手腳之後,就會出現很嚴重的問題。通過使用SSH,你可以把所有傳輸的資料進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處就是傳輸的資料是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、PoP、甚至為PPP提供一個安全的"通道"。SSH協定框架中設計了大量可延伸的冗餘能力,比如使用者自定義演演算法、客戶自定義金鑰規則、高層擴充套件功能性應用協定。這些擴充套件大多遵循 IANA 的有關規定,特別是在重要的部分,像命名規則和訊息編碼方面。SSH採用面向連線的TCP協定傳輸 應用22號埠 安全係數較高。

產生金鑰的步驟
第一步:存取瀏覽金鑰產生網址

第二步:獲取產生金鑰的命令ssh-keygen -t ed25519 -C "[email protected]"



第三步:在Gitee裡的ssh部分設定公鑰


這樣就設定完公鑰了,接下來重新提交到遠端,之後不用填寫賬號和密碼了,一路綠燈
第四步:在倉庫位置找克隆與下載按鈕,然後ssh對應的地址複製下來

第五步:重新設定ssh地址提交地址,就完成了ssh方式遠端提交程式碼的操作

三、協同開發及解決衝突

1.協同開發

第一步:倉庫管理員,邀請開發者進入>>>:邀請的開發者,對這個倉庫就有讀寫許可權,他們就可以開發程式碼,提交

第二步:作為開發者,本地沒有程式碼
第三步:把程式碼從遠端倉庫 clone 下來
git clone [email protected]:liuqingzheng/luffy_api.git
第四步:使用pycharm開啟,設定好直譯器,安裝依賴
第五步:開發程式碼,terminal依次敲如下程式碼

git add
git config --global user.email "[email protected]"
git config --global user.name "米熱"
git config user.name lqz
git config user.email [email protected]
git commit
git push origin master

2.解決衝突

出現衝突的原因

多人在同一分支開發

避免衝突的原則

你如果想少出現衝突>>>:勤拉取程式碼(git pull origin dev)

衝突出現的樣子:

你如果要刪除別人的程式碼,你需要跟別人說一聲
<<<<<<< HEAD   我的程式碼
print('劉亦菲')
=======   它的程式碼
print('彭于晏')
>>>>>>> 6f720edbd84c8744b1c7c10767fb89a5d0fa98f5

解決衝突的方法

箭頭去掉,閱讀程式碼,選擇保留或刪除別人或自己的程式碼,再提交

四、線上分支合併及遠端倉庫回滾

1.線上分支合併

gitee上,新建一個分支
本地同步遠端dev分支
git pull origin dev  # 拉下來了,還看不到,只有切過去,才看的導
git checkout dev
在dev上開發
隨便加程式碼
git add
git commit
提交到原生的dev了
git push origin dev  # 推到遠端 dev
master中沒有程式碼,dev中有提交的,現在要線上分支合併
把遠端的dev合併進遠端的master
提交pr    提交rr
在網站上,申請提交pull request
領導稽核,測試,通過後,點選合併
線上dev就合併進線上的master了

2.遠端倉庫回滾

你不要用 因為遠端回滾指的是把遠端的程式碼回滾到最初的狀態,這是一個危險操作,原因是一旦回滾到最初狀就相當於之前所做的工作白費了,其實可以找回的但是這項工作是另一項費時間的體力活。非常麻煩,所咱們不要輕易地敲 【 -f 】

遠端倉庫回滾的操作步驟如下:
第一步:本地版本回退
git reset --hard 版本號
第二步:強行推到遠端
git push origin master -f

五、為開源專案貢獻程式碼

# github,gitee 看到好的開源專案,  發現有bug,為他增加新功能---》你加入了程式碼---》想合併進開源專案,如何做

# 步驟:
	1 先fork開源專案--》複製這個專案到我的倉庫中
    2 clone下來,改程式碼,一路提交到遠端(我的)
    3 提交pr,等作者同意

六、pycharm使用git的教學

只要用命令操作的,都可以點選完成(命令都可以封裝成圖形化介面),pycharm使用gitgit的大前提是按照如下圖設定值以下

詳細使用方法看下面的截圖