1. 程式人生 > >Git教程--如何安裝Git & 如何高效地使用Git & 合理使用Git分支

Git教程--如何安裝Git & 如何高效地使用Git & 合理使用Git分支

      原作者:傑森科茨  翻譯&轉載:https://www.digitalocean.com/community/tutorials/how-to-use-git-effectively

 

介紹

現代軟體開發中不可或缺的工具是某種版本控制系統。版本控制系統允許您在源級別跟蹤軟體。您可以跟蹤更改,還原到以前的階段,然後分支以建立檔案和目錄的備用版本。

最流行的版本控制系統之一是git分散式版本控制系統。許多專案將檔案儲存在git儲存庫中,而像GitHub和Bitbucket這樣的站點已經使程式碼共享和貢獻簡單而有價值。

在本指南中,我們將演示如何在Ubuntu 14.04 VPS例項上安裝git。我們將介紹如何以兩種不同的方式安裝軟體,每種方式都有好處。本教程假設您以

非root使用者身份登入,您可以在此處瞭解如何建立。

 

如何安裝Git

 

到目前為止,git安裝和使用的最簡單方法是使用Ubuntu的預設儲存庫。這是最快的方法,但版本可能比最新版本更舊。如果您需要最新版本,請考慮按照git從原始碼編譯的步驟進行操作。

您可以使用apt包管理工具更新本地包索引。之後,您可以下載並安裝該程式:

  sudo apt-get update
  sudo apt-get install git

RedHat/Fedora/Centos系統

  • sudo yum install git

Mac OS X 系統

  • sudo brew install git 

這將下載並安裝git到您的系統。您仍然需要完成我們在“設定”部分中介紹的配置步驟,因此請立即跳到該部分

 

如何從原始碼安裝Git

更靈活的安裝方法git是從原始碼編譯軟體。這需要更長時間,並且不會通過您的軟體包管理器進行維護,但它允許您下載最新版本,並且如果您希望自定義,將允許您對所包含的選項進行一些控制。

在開始之前,您需要安裝git依賴的軟體。這在預設儲存庫中都可用,因此我們可以更新本地包索引,然後安裝包:

sudo apt-get update
sudo apt-get install build-essential libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext unzip

安裝必要的依賴項後,您可以通過訪問GitHub上git專案頁面繼續獲取所需的git版本。

到達專案頁面時看到的版本是主動提交的分支。如果您需要最新的穩定版本,您應該使用專案標題左側的此按鈕將分支更改為最新的非“rc”標記:

接下來,在頁面右側,右鍵單擊“下載ZIP”按鈕,然後選擇類似於“複製連結地址”的選項:

回到您的Ubuntu 14.04伺服器上,您可以wget通過貼上您複製的地址來鍵入並關注它。您複製的URL可能與我的不同:

wget https://github.com/git/git/archive/v1.9.2.zip -O git.zip

通過鍵入以下內容解壓縮您下載的檔案並移動到生成的目錄中:

unzip git.zip
cd git-*

     現在,您可以通過鍵入以下兩個命令來建立包並進行安裝:

make prefix=/usr/local all
sudo make prefix=/usr/local install

既然已經git安裝了,如果要升級到更高版本,只需克隆儲存庫,然後構建並安裝:

git clone https://github.com/git/git.git

要查詢用於克隆操作的URL,請導航到專案的GitHub頁面上所需的分支或標記,然後複製右側的克隆URL:

git clone URL

這將在您當前目錄中建立一個新目錄,您可以在其中重建包並重新安裝新版本,就像您上面所做的那樣。這將使用新版本覆蓋舊版本:

make prefix=/usr/local all
sudo make prefix=/usr/local install

 

如何設定Git

現在您已經git安裝了,您需要做一些事情,以便為您生成的提交訊息將包含您正確的資訊。

最簡單的方法是通過git config命令。具體來說,我們需要提供我們的姓名和電子郵件地址,因為git我們會在每次提交中嵌入此資訊。我們可以通過鍵入以下內容來新增此資訊:

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

我們可以通過鍵入來檢視已設定的所有配置項:

git config --list

git配置

user.name=Your Name
[email protected]

如您所見,這種格式略有不同。資訊儲存在配置檔案中,您可以選擇使用文字編輯器手動編輯,如下所示:

nano ~/.gitconfig

〜/ .gitconfig內容

[user]
    name=Your Name
    [email protected]

您可以設定許多其他選項,但這些是需要的兩個必要選項。如果您跳過此步驟,則在提交時可能會看到git與此類似的警告:

git使用者名稱和電子郵件未設定時輸出

[master 0d9d21d] initial project version
 Committer: root 
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

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

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

這樣可以為您提供更多功能,因為您必須修改已使用更正資訊所做的提交。

您現在應該已經git安裝並準備好在您的系統上使用。

 

如何高效地使用Git

 

本文假設您已安裝git並且您的全域性配置設定(即使用者名稱和電子郵件)已正確設定。如果不是這種情況,請參閱 git介紹教程

Git是一個非常有用的軟體,可以幫助簡化程式設計專案的開發。它沒有語言要求也沒有檔案結構要求,讓開發人員可以決定如何構建工作流程。

在使用git進行開發之前,最好規劃好工作流程。工作流程決策通常基於專案的規模和規模。為了現在對git有一個基本的瞭解,一個簡單的單分支工作流就足夠了。預設情況下,任何git專案上的第一個分支稱為“master”。在本系列的後續教程中,您將學習如何建立其他分支。

讓我們建立我們的第一個專案並稱之為“測試”。(如果您已經有一個要匯入到git的專案,可以跳到該部分。)

 

建立工作區

就像您希望擁有一個良好,乾淨的工作環境一樣,同樣的想法適用於編碼的位置,特別是如果您要同時為多個專案做出貢獻。一個很好的建議可能是在您的主目錄中有一個名為git的資料夾,其中包含每個專案的子資料夾。

我們需要做的第一件事是建立我們的工作區環境:

[email protected] ~ $ mkdir -p ~/git/testing ; cd ~/git/testing

上面的命令將完成兩件事:1)它在我們的主目錄中建立一個名為“git”的目錄,然後建立一個名為“testing”的子目錄(這是我們的專案實際儲存的地方)。2)它將我們帶到我們專案的基本目錄。

進入該目錄後,我們需要建立一些將在我們的專案中的檔案。在此步驟中,您可以跟隨並建立一些虛擬檔案以進行測試,也可以建立您希望將成為專案一部分的檔案/目錄。

我們將建立一個在我們的儲存庫中使用的測試檔案:

[email protected]~ /git/testing $ touch file

一旦所有專案檔案都在您的工作區中,您需要開始使用git跟蹤檔案。下一步解釋了這個過程。

將現有專案轉換為工作空間環境

一旦所有檔案都在你的git工作區中,你需要告訴git你想將當前目錄用作git環境。

[email protected] ~/git/testing $ git init
Initialized empty Git repository in /home/user/git/testing/.git/

初始化新的空儲存庫後,您可以新增檔案。

以下內容將所有檔案和目錄新增到新建立的儲存庫中:

[email protected]~/git/testing $ git add .

在這種情況下,沒有輸出是良好的輸出。不幸的是,如果有效的話,git並不會總是告訴你。

每次新增或更改檔案時,都需要編寫提交訊息。下一節將介紹提交訊息的內容以及如何編寫提交訊息。

 

建立提交訊息

提交訊息是一條簡短的訊息,解釋您所做的更改。在傳送編碼更改之前需要它(稱為推送),這是與您的共同開發人員進行通訊的好方法。本節將介紹如何建立它們。

提交訊息通常相當短,在一到兩個句子之間解釋您所做的更改。在推送之前提交每個單獨的更改是一種好習慣。您可以根據需要推送儘可能多的提交。任何提交的唯一要求是它涉及至少一個檔案並且它有一條訊息。推送必須至少有一次提交。

繼續我們的示例,我們將為初始提交建立訊息:

[email protected] ~/git/testing $ git commit -m "Initial Commit" -a
[master (root-commit) 1b830f8] initial commit
 0 files changed
 create mode 100644 file

上述命令有兩個重要引數。第一個是-m,表示我們的提交訊息(在本例中為“Initial Commit”)將會跟隨。其次,-a表示我們希望將提交訊息應用於所有新增或修改的檔案。這對於第一次提交是可以的,但通常您應該指定我們要提交的單個檔案或目錄。

我們本可以做到:

[email protected]~/git/testing $ git commit -m“Initial Commit” file

指定要提交的特定檔案。要新增其他檔案或目錄,只需在該命令的末尾新增一個以空格分隔的列表。

 

將更改推送到遠端伺服器

到目前為止,我們已經完成了本地伺服器上的所有操作。如果您希望有任何簡單的方法來對檔案進行版本控制,那當然可以選擇在本地使用git。但是,如果您想與開發人員團隊合作,則需要將更改推送到遠端伺服器。本節將解釋如何執行此操作。

能夠將程式碼推送到遠端伺服器的第一步是提供儲存庫所在的URL併為其命名。要配置要使用的遠端儲存庫並檢視所有遠端控制器的列表(可以有多個遠端儲存庫),請鍵入以下內容:

$ git remote add origin ssh://[email protected]/repository.git 
$ git remote -v
origin ssh://[email protected]/repository.git(fetch)
origin ssh://[email protected]/repository.git(push)

第一個命令新增一個名為“origin”的遠端,並將URL設定為ssh://[email protected]/repository.git。

您可以根據需要為遠端命名,但URL需要指向實際的遠端儲存庫。例如,如果您想將程式碼推送到GitHub,則需要使用它們提供的儲存庫URL。

配置完遠端後,您現在可以推送程式碼了。

您可以通過鍵入以下內容將程式碼推送到遠端伺服器:

$ git push origin master
計數物件:4,完成。
Delta壓縮最多使用2個執行緒。
壓縮物件:100%(2/2),完成。
寫入物件:100%(3/3),266位元組,完成。
總計3(delta 1),重用1(delta 0)
至ssh://[email protected]/repository.git
   0e78fdf..e6a8ddc master  - > master

“git push”告訴git我們要推送我們的更改,“origin”是我們新配置的遠端伺服器的名稱,“master”是第一個分支的名稱。

將來,當您提交要提交到伺服器的提交時,只需鍵入“git push”即可。

我希望本文能夠讓您基本瞭解git如何有效地用於開發人員團隊。本系列的下一篇文章將對git分支及其如此有效的原因進行更深入的分析。

 

如何有效使用git分支

 

在版本控制系統領域,GIT可以說是靈活性方面最好的之一。學習語法並瞭解git如何最好地為您的工作流程和環境提供服務非常容易。本教程將教您如何建立兩個分支(主和開發)以及如何將程式碼從開發階段合併到生產中。分支的核心是一系列獨特的程式碼更改,具有唯一的名稱。每個儲存庫可以有一個或多個分支。

預設情況下,第一個分支稱為“master ”。

 

檢視分支

在建立新分支之前,我們希望檢視所有存在的分支。我們可以通過鍵入以下內容來檢視所有現有分支:

git branch -a

在命令的末尾新增“-a”告訴GIT我們想要檢視所有存在的分支,包括我們在本地工作空間中沒有的分支。

輸出看起來類似於以下內容:

* master
  remotes/origin/master

輸出第一行中“master”旁邊的星號表示我們當前在該分支上。第二行簡單地表明,在我們的遠端命名原點上,有一個分支,也稱為master。

現在我們知道如何檢視分支,現在是時候建立第一個分支了。

 

建立分支

如本文開頭所述,我們希望為編碼環境提供開發和生產設定。

我們將預設的“主”分支視為我們的生產,因此需要為開發或預生產建立一個分支。

要建立名為develop的新分支,請鍵入以下內容:

git checkout -b develop

假設我們還沒有名為“develop”的分支,輸出結果如下:

Switched to a new branch 'develop'

如果已經存在該名稱的分支,GIT會告訴我們:

fatal: A branch named 'develop' already exists.

您可以使用git checkout命令在兩個分支之間來回切換:

git checkout master

要麼

git checkout develop

假設您嘗試切換到的分支存在,您將看到類似於以下內容的輸出:

切換到分支'主'

如果您嘗試切換到不存在的分支,例如

git checkout nosuchbranch

Git會告訴你:

error: pathspec 'nosuchbranch' did not match any file(s) known to git.

既然我們有多個分支機構,我們需要充分利用它們。在我們的場景中,我們將使用我們的“開發”分支來測試我們的更改,並使用主分支將它們釋出給公眾。

為了說明這個過程,我們需要切換回我們的開發分支:

git checkout develop

 

改變我們的開發分支

在這個分支上,我們將建立一個名為“develop”的新空白檔案。在我們將它合併到主分支之前(在下一步中),它將不存在。

touch develop 

就像在上一個教程中一樣,我們需要告訴git我們要跟蹤這個新檔案。

我們可以通過輸入以下命令新增“develop”檔案:

git add develop 

上面的命令集將建立一個名為“develop”的空白檔案,並將其新增到GIT。

我們還需要提交此檔案,該檔案將此檔案附加到我們當前所在的分支,即“develop”。

git commit -m "develop file" develop 

此檔案現在存在於develop分支上; 正如我們要發現的那樣,它在主分支上不存在。

首先,我們將確認我們目前正處於開發分支。我們可以通過輸入以下內容來完成此操作

git branch 

輸出應類似於以下內容:

* develop
  master

我們之前瞭解到,分支名稱旁邊的星號表示我們當前在該分支上。

執行“ls”命令將向我們顯示存在兩個檔案:

ls

輸出將告訴我們,我們的兩個檔案分別命名為“file”和“develop”:

develop file

合併分支之間的程式碼

有趣的部分是在我們切換回我們的主分支之後,我們可以使用git checkout命令:

git checkout master

為了確保我們在主分支上,我們可以執行以下型別:

git branch 

輸出將告訴我們哪個分支是一個,由星號表示。

  develop
* master

再次執行“ls”,似乎我們的新檔案丟失了。

file

它不會丟失 - 它在我們的開發分支上,我們在我們的主分支上。

在我們的場景中,此檔案表示對已通過我們的開發分支上的所有測試的任何檔案(或整個新檔案)的任何更改,並且已準備好投入生產。在分支之間移動程式碼的過程(通常從開發到生產)稱為合併

重要的是要記住合併時,我們想要在我們想要合併的分支上。

在這種情況下,我們希望從我們的開發分支(存在“develop”檔案)合併到我們的主分支。

牢記這一點,考慮到我們已經在主分支上,我們所要做的就是執行merge命令。

我們可以傳遞給merge命令的一個選項,即“--no-ff”,意味著我們希望git在合併之前保留所有提交訊息。這將使跟蹤更改在將來更容易。

要將更改從開發分支合併到主分支,請鍵入以下內容:

git merge develop --no-ff

該命令的輸出將類似於以下內容:

Merge made by the 'recursive' strategy.
 0 files changed
 create mode 100644 develop

再次執行ls命令將確認我們的“develop”檔案現在位於我們的主分支上。

develop file

我們現在需要做的最後一件事就是在我們的遠端伺服器上進行此更改是為了推動我們的更改,我們可以藉助git push命令來完成這些更改。

git push

您將看到類似於以下的輸出,確認您從開發分支到遠端伺服器上的主分支的合併:

Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 332 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To ssh://[email protected]/repository
   9af2dcb..53649cf  master -> master

結論

按照上面的教程,您應該有一個有效的雙分支工作流程設定,並希望能夠了解分支在GIT中的工作原理。請在留言中讓我們知道你的想法!

 

    英文原作者:傑森科茨  

 

 

如果您對上述的教程仍然感覺還有些不足,可以檢視視訊教程:

Git入門:https://www.imooc.com/learn/1052

版本控制工具Git:https://www.imooc.com/learn/208

Git&Github的使用 https://classroom.udacity.com/courses/ud775

 

其他說明:

安裝 Git

現在,你將有機會親自使用 Git,並在 Asteroids 版本庫上練習使用這些命令。為此,必須安裝 Git。如果已安裝 Git,請使用命令 git --version 檢視其版本。如果版本為 1.8 或更高,則可以繼續觀看下一個視訊。否則,強烈建議你進行升級,因為 Git 在版本 1.8 中添加了許多新功能,而且我們假定你裝有該版本。

克隆版本庫,要克隆版本庫,請執行 git clone(後跟空格和版本庫 URL)。

Asteroids URL,使用以下 URL 克隆 Asteroids 版本庫:

$ git clone https://github.com/udacity/asteroids.git

退出 git log

要停止檢視 git log 的輸出,請按 q(表示退出)。

獲得彩色輸出

要獲得彩色的 diff 輸出,請執行 git config --global color.ui auto

從命令行復制並貼上

為了完成本測試題,需要複製並貼上一些提交的 ID。

Windows

要在 Git Bash 中複製並貼上,請按照此頁面中的說明執行操作。

Mac

要在 Mac 上的終端中複製並貼上,請使用 Cmd+C 和 Cmd+V。

Ubuntu

要在 Ubuntu 上的終端中複製並貼上,請使用 Ctrl+Shift+C 和 Ctrl+Shift+V。

使用 git log 和 git diff

請注意,執行 git log 會列出最近的提交及其相關資訊(包括提交 ID)。執行 git diff(後跟兩個提交 ID)會比較這兩個提交的程式碼版本。如果需要複習,可以重新觀看此視訊.

輸入提交 ID

如果輸入提交 ID 的前四個或更多個字元更為輕鬆,則你可以這樣做,而不必貼上整個 ID。

思考:使用 Git 瀏覽歷史

既然你已具有親自使用 Git 的經驗,現在請將以下問題和你對它的想法新增到你的反思檔案中:

如何使用命令 git log 和 git diff 來檢視檔案的歷史記錄?

在你更新了文件後,單擊“下一項”,與 Sarah 一起將更多概念新增到圖中。然後,你將學習如何使用 Git 恢復到檔案的以前版本。

快速編輯模式

要開啟快速編輯模式以便在 GitBash 中更輕鬆地進行復制和貼上,請按照此處的說明操作。

最新的提交

最新的提交的提交 ID 為 3884eab839af1e82c44267484cf2945a766081f3。在檢出較舊的提交後,可使用此提交 ID 返回到最新的提交。

git checkout 的格式

Caroline 為檢出“Revert controls”提交而鍵入的命令是 git checkout b0678b161fcf74467ed3a63110557e3d6229cfa6

輸入Commit ID

如果輸入提交 ID 的前四個或更多個字元更為輕鬆,則你可以這樣做,而不必貼上整個 ID。

 

參考資料:https://classroom.udacity.com/courses/ud775/lessons/2980038599/concepts/29607789520923