七月 20, 2016 | 後端和Drupal

學Drupal必備的技能:Git 指令介紹

Git是一套很好用也很熱門的版本控制系統,很多大型專案都是用Git來做版本的控制,各位經過上次那篇Git 介紹之後是不是對版本控制和git是什麼東西有點概念了呢,這次我們就來談談Git的工作方式以及指令吧!

前言

Git是一套很好用也很熱門的版本控制系統,很多大型專案都是用Git來做版本的控制,各位經過上次那篇Git 介紹之後是不是對版本控制和git是什麼東西有點概念了呢,這次我們就來談談Git的工作方式以及指令吧!

git的三種狀態

在我們了解git的工作方式之前,我們必須先知道在git中,有三種重要的狀態,首先git會在你要進行版本控制的儲存庫內新增一個屬於git的引索檔案,作為紀錄你現在的儲存庫內所有檔案的狀態,分別為新增但尚未被git追蹤的Untracked、已經修改但尚未登記到目錄下的modified以及已修改並且準備提交的committed,講完了Git的各種狀態之後,接下來我們來說說git的工作流程吧。

git的工作流程

在一個常見的Git工作流程中,首先開發者將在一個專案底下建立一個儲存庫(裡面包含git的引索目錄),建立儲存庫的方式有兩種,第一種是直接在本機建立(init),或是直接完整複製遠端的儲存庫到本機(clone),接下來開始進行專案開發的新增或修改,當開發的過程告一個段落,就要提交檔案(commit),不過提交的動作是依照git的引索目錄進行的,所以這時開發者必須要先把新增或修該的檔案登記到引索目錄中(add),才能進行提交檔案的動作。

而如果今天是在遠端儲存庫內與他人共同開發一個專案時,開發者必須要進一步的使用(push),把現在本機上已提交的資料推到遠端的儲存庫內進行整併,而下一次要在進行開發時,則要把遠端的儲存庫以(pull)的方式,把遠端儲存庫內最新的資料拉到本機,再繼續接下來的開發。

各位讀者是不是對括號裡面的指令看得霧撒撒咧,沒關係,下面我們將詳細的介紹每個指令的含義以及用法!!

git的基本指令

git內有幾個常用的基本指令,分別如下:

init - 本地端建立一個完整的儲存庫

建立一個空的Git儲存庫或重新初始化現有儲存庫。

指令:git init

clone - 將遠端完整的儲存庫下載到本機

看到別人的程式碼想抓下來自行修改,或是團隊中別人的程式碼,通常會有一個 Git 的檔案位置,像是在 Github 的話你就會看到像下面的地方可以讓你複製專案的URL。

指令:git clone URL

add - 將尚未被追蹤或是修改過的檔案新增到git索引目錄內

當你新增或修改了一個檔案,不代表這個Git Repository知道這個動作是你做的。你必須使用add讓你的Git把檔案加入追蹤,讓Git知道現在你新增或修改了這個檔案。

指令:git add 檔案名稱

如果你一次修改了太多的檔案,沒辦法一個一個輸入的話,可以使用"git add .",這樣就會幫你把剛剛新增或修改過的所有檔案全部加進引索目錄內。但為了避免加進一些不必要的檔案,讀者還是得養成良好的手動輸入需要add的檔案比較好

commit - 提交目前修改的內容,並紀錄這次提交的內容為何

請把commit想成一種存檔的概念,每一次提交,都算是建立一次版本,提交完成時,git會給這次的提交一串數字,這串數字代表的是次提交的版本號碼,所以在每一次的提交時,要清楚表達這次提交的內容為何,這會讓你未來要回頭找某個版本時,能讓你快速的找到你想要找的版本,也能讓團隊中的其他成員清楚你這次的提交做什麼。

指令:git commit

在commit 後面加上 -m"",並在""裡面輸入這次提交的內容可以快速提交。
git commit -m "這次提交的內容"

status - 查看目前儲存庫的狀態

使用status可以讓你知道目前儲存庫的狀態,你可以知道你有沒有還未追蹤的檔案、已修改的檔案或是已經add過但卻還沒提交的檔案。

指令:git status

下了指令之後,對照最開所講的,你可以看到 1.新增但尚未被git追蹤的Untracked(git status 檔案會以紅色顯示)
2.已經修改但尚未登記到目錄下的modified(git status 檔案會以紅色顯示)
3.已修改並且準備提交的committed (git status 檔案會以綠色顯示)

在講push以及pull前,我們需要先來好好的認識一下branch!

branch - 分支

在上一篇文章有稍微提到git有著強大的分支功能,不過卻沒有詳細的解釋它的功用,趁著這個機會,讓讀者們瞭解一下,git的分支功能。
如果今天與他人協同開發一個專案時,可能會遇到需要為專案開發新功能,或是解決專案中某個bug,但此時又不希望影響專案的進行、或是不想讓專案發生異常,這時候使用branch製造一條分支會是一個好的解決方式。
當新增一條branch時,會將當前主線的最新狀態,複製一份到新增的branch上,並且獨立作業,所有的變動都不影響到主線。等到問題被解決後,可以使用Merge的方式合併到主線上,讓主線享有修正過後或新增功能的檔案。

在git中,儲存庫內的第一條分支(也就是預設)名稱就叫做master ( 主線 ) !

使用branch可以查看當前的專案有幾條分支。
需要新增分支時,在branch的參數後面加上branch的名稱即可新增一條分支出來。

指令:

git branch:查看專案有幾條分支。
git branch newbranch:新增一條叫newbranch的分支。
git checkout newbranch:從當前的分支切換到newbranch這條分支上。
git merge newbranch:把newbranch合併到當前分支上。

講解完branch是什麼東西之後,讓我們回到push以及pull這兩個協同開發時常用到的指令上。

push - 上傳到遠端儲存庫

使用push可以把本機的資料上傳到遠端儲存庫上。 指令:git push URL master

上方指令內的URL所代表的是你要push到的儲存庫位置,而master則是你要push的分支名稱。

pull - 同步本地端與遠端資料

將將遠端儲存庫內的最新資料拉到本機做同步。 指令:git pull URL master

上方指令內的URL所代表的是你要pull的儲存庫位置,而master則是你要pull的分支名稱。

git幾個好用的小指令

  • git config core.fileMode false:不追蹤檔案權限
  • git clean -df:強制刪除未儲存的檔案
  • git checkout .:將code回覆到存檔點

看到這邊,讀者們會不會覺得,每一次push和pull的時候,都要複製一次URL,不只麻煩,看起來又很長,這時後有個很好用的指令就出現啦,那就是remote,簡單來說,這個指令就是幫你的URL取名字,之後每一次push以及pull時,都可以把URL換成你取好的remote就可以了,當你是clone一個資料夾時,git就會幫你把遠端儲存庫的URL預設為origin了,所以你的指令就會變成git push origin master

當然如果你要自己新增remote可以:git remote add “你要新增的名稱” "遠端儲存庫的URL"

啊!對了,如果你的電腦沒有安裝git的話,請參考這裡

結論

了解了git的工作流程以及知道了幾個常用指令的涵義之後,就可以進行基本的操作了,不過git還有另一項精華的部分在於多人協同開發這件事的運用上,這篇文章也常常提到協同開發這件事情,而git是如何處理協同開發這件事情的呢?這讓我先賣個關子,關於這點就讓我們在下一篇文章中介紹給各位吧!!

hashtags: