Git使用詳解(結合GitLab和GitHub)

轉載請註明出處:https://blog.csdn.net/mythmayor/article/details/82346539

如果你想了解更多關於GitHub使用的問題,歡迎查看我的另一篇博客進行學習與交流:
GitHub的使用詳解

一、Git簡介及分佈式版本控制系統與集中式版本控制系統。

Git是一個開源的分佈式版本控制系統,可以有效、高速的處理從很小到非常大的項目版本管理。它是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。Git 是用於 Linux內核開發的版本控制工具。與常用的版本控制工具 CVS, Subversion 等不同,它採用了分佈式版本庫的方式,不必服務器端軟件支持(這要分是用什麼樣的服務端,使用http協議或者git協議等不太一樣。並且在push和pull的時候和服務器端還是有交互的。),使源代碼的發佈和交流極其方便。 Git 的速度很快,這對於諸如 Linux kernel 這樣的大項目來說自然很重要。Git 最爲出色的是它的合併跟蹤(merge tracing)能力。

我們知道,CVS及SVN這些屬於集中式版本控制系統。而Git屬於分佈式版本控制系統。
集中式版本控制系統,版本庫是集中存放在中央服務器的,而幹活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給中央服務器。集中式版本控制系統最大的毛病就是必須聯網才能工作,如果在局域網內還好,帶寬夠大,速度夠快,可如果在互聯網上,遇到網速慢的話,可能提交一個10M的文件就需要5分鐘,這個體驗就太差了。

那分佈式版本控制系統與集中式版本控制系統有何不同呢?
首先,分佈式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因爲版本庫就在你自己的電腦上。既然每個人電腦上都有一個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

和集中式版本控制系統相比,分佈式版本控制系統的安全性要高很多,因爲每個人電腦裏都有完整的版本庫,某一個人的電腦壞掉了不要緊,隨便從其他人那裏複製一個就可以了。而集中式版本控制系統的中央服務器要是出了問題,所有人都沒法幹活了。

二、Git的安裝與配置。

最早Git是在Linux上開發的,很長一段時間內,Git也只能在Linux和Unix系統上跑。不過,慢慢地有人把它移植到了Windows上。現在,Git可以在Linux、Unix、Mac和Windows這幾大平臺上正常運行了。

1.在Linux上安裝Git

首先,你可以試着輸入git,看看系統有沒有安裝Git:

$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

像上面的命令,有很多Linux會友好地告訴你Git沒有安裝,還會告訴你如何安裝Git。

如果你碰巧用Debian或Ubuntu Linux,通過一條sudo apt-get install git就可以直接完成Git的安裝,非常簡單。
老一點的Debian或Ubuntu Linux,要把命令改爲sudo apt-get install git-core,因爲以前有個軟件也叫GIT(GNU Interactive Tools),結果Git就只能叫git-core了。由於Git名氣實在太大,後來就把GNU Interactive Tools改成gnuit,git-core正式改爲git。

如果是其他Linux版本,可以直接通過源碼安裝。先從Git官網下載源碼,然後解壓,依次輸入:./config,make,sudo make install這幾個命令安裝就好了。

2.在Mac OS X上安裝Git

如果你正在使用Mac做開發,有兩種安裝Git的方法。

一是安裝homebrew,然後通過homebrew安裝Git,具體方法請參考homebrew的文檔:http://brew.sh/

第二種方法更簡單,也是推薦的方法,就是直接從AppStore安裝Xcode,Xcode集成了Git,不過默認沒有安裝,你需要運行Xcode,選擇菜單“Xcode”->“Preferences”,在彈出窗口中找到“Downloads”,選擇“Command Line Tools”,點“Install”就可以完成安裝了。

3.在Windows上安裝Git

在Windows上使用Git,可以從Git官網直接下載安裝程序,(網速慢的同學請移步國內鏡像,然後按默認選項安裝即可。
安裝完成後,在開始菜單裏找到“Git”->“Git Bash”(也可以右擊選擇Git Bash),蹦出一個類似命令行窗口的東西,就說明Git安裝成功!

安裝完成後,還需要最後一步設置,在命令行輸入:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

因爲Git是分佈式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。
注意git config命令的–global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。

三、將本地代碼提交到遠程倉庫。

1.創建本地代碼庫。

在項目目錄下打開Git Bash,鍵入”git init”命令,會自動生成一個”.git”目錄,這代表你已經創建成功。
這裏寫圖片描述

2.創建遠程倉庫。

在GitLab上點擊”New Project”,之後鍵入項目名,其它選項默認即可,點擊”Create project”按鈕即可完成創建。
這裏寫圖片描述

3.將本地倉庫連接推送到遠程倉庫。

在項目目錄下打開Git Bash,鍵入”git remote add origin <遠程倉庫地址/SSH>”命令。
這裏寫圖片描述

4.將代碼提交到本地倉庫中。

使用”git add .”命令添加所有文件,使用”git commit -m <提交日誌信息>”命令將代碼提交到本地倉庫。
這裏寫圖片描述

5.將代碼提交到遠程倉庫。

鍵入”git push -u origin master”,這是第一次提交時用的命令,之後再提交的話使用簡化命令”git push”即可。
這裏寫圖片描述
此時我們再去遠程倉庫上刷新一下,就能看到我們剛剛提交上去的文件了。
這裏寫圖片描述

四、從遠程倉庫克隆代碼到本地。

先找到項目Git地址或SSH,如下圖,點擊鏈接後面的複製按鈕:
這裏寫圖片描述
我們新創建一個項目目錄,打開Git Bash,鍵入”git clone 遠程倉庫地址/SSH”命令,回車,就可以將項目克隆下來了。
這裏寫圖片描述

五、分支管理

1.創建分支。

我們剛剛已經將代碼提交到GitLab遠程倉庫了,默認的話會提交到項目的主幹目錄,如下圖。這時候我們點擊項目名後面的加號,會出現下面的彈窗,然後點擊New branch按鈕。
這裏寫圖片描述
之後在下面的界面中輸入分支的名字,另外你可以選擇Create from的來源,這會決定從哪個分支進行創建,我這裏用了默認的master主幹目錄,點擊Create branch按鈕即可創建分支。
這裏寫圖片描述
這時候再來看項目的分支目錄,可以看到,除了默認的master主幹目錄,現在多了一個version_1.1分支目錄,你也可以點進去查看一下詳細信息,該目錄的創建源是主幹目錄,所以你會發現目錄中的內容和master主幹目錄完全一致。
這裏寫圖片描述

2.切換分支。

現在我們已經有master個version_1.1兩個分支了,目前我們本地倉庫是master主分支的,現在我們要切換到version_1.1分支,使用的是”git checkout 要切換的分支名”命令,如下圖,可以看到,我們成功從master分支切換到了version_1.1分支,當然,如果你想再切回主幹分支,則使用”git checkout master”命令,你可以去嘗試切換一下。
這裏寫圖片描述

3.合併分支。

使用分支這個功能另外一個很重要的操作就是分支的合併,你可以任意將代碼從某一分支合併到另一分支,那麼就讓我們一起來學習一下這部分內容:
剛剛我們已經切換到version_1.1分支了,不妨就直接在這個分支中改動一些內容,然後將代碼合併到master分支。
我在當前分支目錄下的README.md文件中改動了些內容,並增加了code3.txt文件,我們依次執行”git add .”、”git commit -m <提交日誌>”、”git push”命令三部曲來將代碼提交到遠程倉庫(相信這部分大家已經很熟練了)。
此時我們再執行”git checkout master”切換到主幹目錄,可以看到文件發生了一些變化:我剛剛的改動都不見了!這就代表你已經成功切換到master目錄。
接下來就到關鍵的合併步驟了,使用”git merge 分支名”命令合併某分支到當前分支:
這裏寫圖片描述
可以看到,本地代碼發生了變化,在version_1.1分支下的改動都合併到了當前的master主幹目錄下。有一點你必須清楚的是,改動只是發生在了本地,而本地倉庫和遠程倉庫都沒有發生變化,此時你仍需要執行命令三部曲”git add”、”git commit”、”git push”來將合併後的代碼提交到遠程倉庫。此時你可以發揮你舉一反三的能力了,試着在主幹目錄改動代碼並將代碼合併到分支目錄吧。

六、GitLab配置SSH key。

1.首先我們這裏說明一下,我們爲什麼要使用SSH協議呢?因爲SSH更加安全,然後更加方便,比如我們的GitLab由http協議換成了https協議,那麼如果你是使用http協議管理代碼,那麼需要修改所有的項目中的git地址變成https,這簡直是太繁瑣了!但是如果我們一開始就是用SSH協議,這不需要任何的修改。
2.現在我們這是開始進行配置,打開Git Bash窗口,使用命令(ssh-keygen -t rsa -C ‘[email protected]’)生成SSH公鑰和私鑰對,-C參數是你的郵箱,然後一路回車,使用默認值即可。然後你就可以在用戶主目錄裏找到.ssh目錄(比如Windows就是C:\Users\Administrator),裏面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH KEY的祕鑰對,id_rsa是私鑰,不能泄漏出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
3.在GitLab中進行SSH KEY的配置。可參考下圖,將上一步中生成的id_rsa.pub文件中的內容粘貼到Key的輸入框中,然後再自定義一下Title,點擊”Add key”即可。

這裏寫圖片描述

4.相信現在你已經配置好並可以正常使用了,這裏在額外說明一下關於本地配置多個SSH KEY的問題。想一下這樣的場景,大多數時候,我們的機器上會有很多的GIT HOST,比如GitLab、Github、OSChina等,那我們就可能需要在本地配置多個SSH KEY,使得不同的HOST能使用不同的SSH KEY。

當然,其中一種解決方案就是所有的GIT HOST都使用同一個郵箱,由於郵箱是識別的唯一手段,那麼自然的,這兩者採用同一個郵箱,生成的public key也會是同一個,上傳到 Github 或者 Gitlab 上面,在 Git 的配置中 ,設置好 Global 的配置 :git config –global user.name ‘mythmayor’ && git config –global user.email ‘[email protected]’ 進行日常的開發是沒有問題的。
但在實際開發中採用同一個郵箱的可能性並不是太大,這就引出了方案二,做法如下(以GitLab和Github爲例):
(1)爲GitLab生成一對祕鑰SSH KEY

ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/gitlab-rsa

(2)爲Github生成一對祕鑰SSH KEY

ssh-keygen -t rsa -C '[email protected]' -f ~/..sh/github-rsa

(3)在~/.ssh目錄下新建名稱爲config的文件(無後綴名)。用於配置多個不同的host使用不同的SSH KEY,內容如下:

# gitlab
Host gitlab.com
    HostName gitlab.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/gitlab_id-rsa
# github
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github_id-rsa
  ​
# 配置文件參數
# Host : Host可以看作是一個你要識別的模式,對識別的模式,進行配置對應的的主機名和ssh文件
# HostName : 要登錄主機的主機名
# User : 登錄名
# IdentityFile : 指明上面User對應的identityFile路徑

(4)按照上面的步驟分別往gitlab和github上添加生成的公鑰gitlab_id-rsa.pub和github_id-rsa.pub。
(5)OK,大功告成,再次執行git命令驗證是不是已經不需要再次驗證權限了。
(6)再次查看~/..ssh目錄下的文件,會有gitlab_id-rsa、gitlab_id-rsa.pub和github_id-rsa、github_id-rsa.pub四個文件。

七、GitLab刪除項目。

爲什麼要單獨提一下這個操作呢?因爲刪除項目的入口比較深,我第一次使用的時候也是找了一會才找到了刪除的操作。
首先我們來到項目Settings的Genaral下,然後可以看到Advanced選項,點擊右面的Expand按鈕。
這裏寫圖片描述
向下翻到最後,你會看到Remove project這一項
這裏寫圖片描述
點擊Remove project按鈕,會出現下面的彈窗,這時候在輸入框中重新鍵入項目名(圖中標紅框的名字),填寫正確的話Confirm按鈕會變成可點擊的狀態,此時點擊按鈕即可刪除項目。
這裏寫圖片描述

八、個人Git常用命令。

(ssh-keygen -t rsa -C ‘[email protected]’) 生成SSH公鑰和私鑰對
(git remote add origin <遠程倉庫地址/SSH>) 將本地倉庫連接推送到遠程倉庫
(git push -u origin master) 第一次提交代碼到遠程倉庫
(git clone 遠程倉庫地址/SSH) 從遠程倉庫克隆代碼
(git diff) 查看本地代碼差異
(git status) 查看本地代碼狀態
(git log) 查看提交歷史日誌,後面加上–pretty=oneline會輸出簡化日誌
(git reflog) 查看每一次命令記錄日誌
(git add .) 添加代碼到本地倉庫
(git commit - m 提交信息) 提交代碼到本地倉庫
(git push) 提交代碼到遠程倉庫
(git pull) 從遠程倉庫拉取代碼
(git branch) 查看分支
(git branch 分支名) 創建分支
(git checkout -b 本地分支目錄 origin/遠程分支目錄) 創建並切換到分支目錄
(git checkout 本地分支目錄) 切換到分支目錄
(git checkout master) 切換到主幹目錄
(git merge 分支名) 合併某分支到當前分支
(git reset –hard commit_id) 版本穿梭,HEAD指向當前版本
(git branch -d 分支名) 刪除分支
(ls) 列出當前目錄下的所有文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章