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

語言: CN / TW / HK

theme: condensed-night-purple

本篇會援引RUNOOB.COM http://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 ```

源碼安裝

我們也可以在官網下載源碼包來安裝,最新源碼包下載地址:http://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 安裝文件並運行:

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

官網慢,可以用國內的鏡像:http://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 參數只對當前倉庫有效。

今天就到這裏吧!大家也可以去到原網上查看。 http://www.runoob.com/git