你還不會在GitHub上分享專案嗎?來看看這篇git使用吧!(一)

語言: CN / TW / HK

theme: condensed-night-purple

本篇會援引RUNOOB.COM https://www.runoob.com/git/git-tutorial.html 上的內容以及自己適當修改補充

Git 是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案。

Git 是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。

Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分散式版本庫的方式,不必伺服器端軟體支援。

## Git 與 SVN 區別

Git 不僅僅是個版本控制系統,它也是個內容管理系統(CMS),工作管理系統等。

如果你是一個具有使用 SVN 背景的人,你需要做一定的思想轉換,來適應 Git 提供的一些概念和特徵。

Git 與 SVN 區別點:

  • 1、Git 是分散式的,SVN 不是:這是 Git 和其它非分散式的版本控制系統,例如 SVN,CVS 等,最核心的區別。
  • 2、Git 把內容按元資料方式儲存,而 SVN 是按檔案: 所有的資源控制系統都是把檔案的元資訊隱藏在一個類似 .svn、.cvs 等的資料夾裡。
  • 3、Git 分支和 SVN 的分支不同: 分支在 SVN 中一點都不特別,其實它就是版本庫中的另外一個目錄。
  • 4、Git 沒有一個全域性的版本號,而 SVN 有: 目前為止這是跟 SVN 相比 Git 缺少的最大的一個特徵。
  • 5、Git 的內容完整性要優於 SVN: Git 的內容儲存使用的是 SHA-1 雜湊演算法。這能確保程式碼內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。

image.png

安裝

在使用Git前我們需要先安裝 Git。Git 目前支援 Linux/Unix、Solaris、Mac和 Windows 平臺上執行。

Git 各平臺安裝包下載地址為:http://git-scm.com/downloads

Debian/Centos上安裝git

``` $ yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel

$ yum -y install git-core

$ git --version git version 1.7.1 ```

ubuntu上安裝git

``` $ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev

$ apt-get install git

$ git --version git version 1.8.1.2 ```

原始碼安裝

我們也可以在官網下載原始碼包來安裝,最新原始碼包下載地址:https://git-scm.com/download

安裝指定系統的依賴包:

```

#### Centos/RedHat

$ yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel

#### Debian/Ubuntu

$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev ```

解壓安裝下載的原始碼包:

$ tar -zxf git-1.7.2.2.tar.gz $ cd git-1.7.2.2 $ make prefix=/usr/local all $ sudo make prefix=/usr/local install


Windows 平臺上安裝

在 Windows 平臺上安裝 Git 同樣輕鬆,有個叫做 msysGit 的專案提供了安裝包,可以到 GitHub 的頁面上下載 exe 安裝檔案並執行:

安裝包下載地址:https://gitforwindows.org/

官網慢,可以用國內的映象:https://npm.taobao.org/mirrors/git-for-windows/

image.png 完成安裝之後,就可以使用命令列的 git 工具(已經自帶了 ssh 客戶端)了,另外還有一個圖形介面的 Git 專案管理工具。

在開始選單裡找到"Git"->"Git Bash",會彈出 Git 命令視窗,你可以在該視窗進行 Git 操作。


Mac 平臺上安裝

在 Mac 平臺上安裝 Git 最容易的當屬使用圖形化的 Git 安裝工具,下載地址為:

http://sourceforge.net/projects/git-osx-installer/

安裝介面如下所示:

18333fig0107-tn

Git 配置

Git 提供了一個叫做 git config 的工具,專門用來配置或讀取相應的工作環境變數。

這些環境變數,決定了 Git 在各個環節的具體工作方式和行為。這些變數可以存放在以下三個不同的地方:

  • /etc/gitconfig 檔案:系統中對所有使用者都普遍適用的配置。若使用 git config 時用 --system 選項,讀寫的就是這個檔案。
  • ~/.gitconfig 檔案:使用者目錄下的配置檔案只適用於該使用者。若使用 git config 時用 --global 選項,讀寫的就是這個檔案。
  • 當前專案的 Git 目錄中的配置檔案(也就是工作目錄中的 .git/config 檔案):這裡的配置僅僅針對當前專案有效。每一個級別的配置都會覆蓋上層的相同配置,所以 .git/config 裡的配置會覆蓋 /etc/gitconfig 中的同名變數。

在 Windows 系統上,Git 會找尋使用者主目錄下的 .gitconfig 檔案。主目錄即 $HOME 變數指定的目錄,一般都是 C:\Documents and Settings\$USER。 比如我的:

3.png 此外,Git 還會嘗試找尋 /etc/gitconfig 檔案,只不過看當初 Git 裝在什麼目錄,就以此作為根目錄來定位。

這裡我推薦一下Everything這個windows下的檔案查詢工具。別再用資源管理器來查找了。那龜速度你不著急嗎。不過平常就要做好分類。第一手直接下載的資源、解壓的目錄、exe安裝的目錄、軟體快取儲存的目錄等都建好資料夾,做好分類。這是一個好習慣。不要過度依賴Everything

使用者資訊

配置個人的使用者名稱稱和電子郵件地址:

$ git config --global user.name "github或gitee的使用者名稱" $ git config --global user.email "註冊的郵箱"

如果用了 --global 選項,那麼更改的配置檔案就是位於你使用者主目錄下的那個,以後你所有的專案都會預設使用這裡配置的使用者資訊。

如果要在某個特定的專案中使用其他名字或者電郵,只要去掉 --global 選項重新配置即可,新的設定儲存在當前專案的 .git/config 檔案裡。

文字編輯器

設定Git預設使用的文字編輯器, 一般可能會是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的話,可以重新設定

$ git config --global core.editor emacs

差異分析工具

還有一個比較常用的是,在解決合併衝突時使用哪種差異分析工具。比如要改用 vimdiff 的話:

$ git config --global merge.tool vimdiff

Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合併工具的輸出資訊。

當然,你也可以指定使用自己開發的工具。

檢視配置資訊

要檢查已有的配置資訊,可以使用 git config --list 命令:

$ git config --list http.postbuffer=2M user.name=runoob [email protected] 有時候會看到重複的變數名,那就說明它們來自不同的配置檔案(比如 /etc/gitconfig 和 ~/.gitconfig),不過最終 Git 實際採用的是最後一個。

這些配置我們也可以在  ~/.gitconfig 或  /etc/gitconfig 看到,如下所示:

vim ~/.gitconfig

顯示內容如下所示:

[http] postBuffer = 2M [user] name = runoob email = [email protected]

也可以直接查閱某個環境變數的設定,只要把特定的名字跟在後面即可,像這樣:

$ git config user.name runoob

Git 工作流程

本章節我們將為大家介紹 Git 的工作流程。

一般工作流程如下:

  • 克隆 Git 資源作為工作目錄。
  • 在克隆的資源上新增或修改檔案。
  • 如果其他人修改了,你可以更新資源。
  • 在提交前檢視修改。
  • 提交修改。
  • 在修改完成後,如果發現錯誤,可以撤回提交併再次修改並提交。

下圖展示了 Git 的工作流程:

Git 工作區、暫存區和版本庫


基本概念

我們先來理解下 Git 工作區、暫存區和版本庫概念:

  • 工作區: 就是你在電腦裡能看到的目錄。
  • 暫存區: 英文叫 stage 或 index。一般存放在 .git 目錄下的 index 檔案(.git/index)中,所以我們把暫存區有時也叫作索引(index)。 我在我的工程裡隨便找了一個,裡面的index長這樣:16進位制的應該是。 Snipaste_2022-05-16_15-11-06.png
  • 版本庫: 工作區有一個隱藏目錄 .git,這個不算工作區,而是 Git 的版本庫。

下面這個圖展示了工作區、版本庫中的暫存區和版本庫之間的關係:

  • 圖中左側為工作區,右側為版本庫。在版本庫中標記為 "index" 的區域是暫存區(stage/index),標記為 "master" 的是 master 分支所代表的目錄樹。
  • 圖中我們可以看出此時 "HEAD" 實際是指向 master 分支的一個"遊標"。所以圖示的命令中出現 HEAD 的地方可以用 master 來替換。
  • 圖中的 objects 標識的區域為 Git 的物件庫,實際位於 ".git/objects" 目錄下,裡面包含了建立的各種物件及內容。
  • 當對工作區修改(或新增)的檔案執行 git add 命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的檔案內容被寫入到物件庫中的一個新的物件中,而該物件的ID被記錄在暫存區的檔案索引中。
  • 當執行提交操作(git commit)時,暫存區的目錄樹寫到版本庫(物件庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。
  • 當執行 git reset HEAD 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。
  • 當執行 git rm --cached  命令時,會直接從暫存區刪除檔案,工作區則不做出改變。
  • 當執行 git checkout . 或者 git checkout --  命令時,會用暫存區全部或指定的檔案替換工作區的檔案。這個操作很危險,會清除工作區中未新增到暫存區中的改動。
  • 當執行 git checkout HEAD . 或者 git checkout HEAD  命令時,會用 HEAD 指向的 master 分支中的全部或者部分檔案替換暫存區和以及工作區中的檔案。這個命令也是極具危險性的,因為不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。

Git 建立倉庫

本章節我們將為大家介紹如何建立一個 Git 倉庫。

你可以使用一個已經存在的目錄作為Git倉庫。


git init

Git 使用 git init 命令來初始化一個 Git 倉庫,Git 的很多命令都需要在 Git 的倉庫中執行,所以 git init 是使用 Git 的第一個命令。

在執行完成 git init 命令後,Git 倉庫會生成一個 .git 目錄,該目錄包含了資源的所有元資料,其他的專案目錄保持不變。

使用方法

使用當前目錄作為 Git 倉庫,我們只需使它初始化。

git init

該命令執行完後會在當前目錄生成一個 .git 目錄。

使用我們指定目錄作為Git倉庫。

git init newrepo

初始化後,會在 newrepo 目錄下會出現一個名為 .git 的目錄,所有 Git 需要的資料和資源都存放在這個目錄中。

如果當前目錄下有幾個檔案想要納入版本控制,需要先用 git add 命令告訴 Git 開始對這些檔案進行跟蹤,然後提交:

$ git add *.c $ git add README $ git commit -m '初始化專案版本'

以上命令將目錄下以 .c 結尾及 README 檔案提交到倉庫中。

注:  在 Linux 系統中,commit 資訊使用單引號 ',Windows 系統,commit 資訊使用雙引號 "。

所以在 git bash 中 git commit -m '提交說明' 這樣是可以的,在 Windows 命令列中就要使用雙引號 git commit -m "提交說明"。


git clone

我們使用 git clone 從現有 Git 倉庫中拷貝專案(類似 svn checkout)。

克隆倉庫的命令格式為:

git clone <repo>

如果我們需要克隆到指定的目錄,可以使用以下命令格式:

git clone <repo> <directory>

引數說明:

  • repo: Git 倉庫。
  • directory: 本地目錄。

比如,要克隆 Ruby 語言的 Git 程式碼倉庫 Grit,可以用下面的命令:

$ git clone git://github.com/schacon/grit.git

執行該命令後,會在當前目錄下建立一個名為grit的目錄,其中包含一個 .git 的目錄,用於儲存下載下來的所有版本記錄。

如果要自己定義要新建的專案目錄名稱,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit

配置

git 的設定使用 git config 命令。

顯示當前的 git 配置資訊:

$ git config --list credential.helper=osxkeychain core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true core.precomposeunicode=true

編輯 git 配置檔案:

$ git config -e # 針對當前倉庫

或者:

$ git config -e --global # 針對系統上所有倉庫

設定提交程式碼時的使用者資訊:

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

如果去掉 --global 引數只對當前倉庫有效。

今天就到這裡吧!大家也可以去到原網上檢視。 https://www.runoob.com/git