楠木軒

Git實戰005:如何正確的使用同步、獲取和拉取指令

由 東方崇學 釋出於 科技

為了更好的管理、跟進、掌控和維護專案開發,我們通常會借用Gitlab等程式碼託管平臺來管理專案資源。當然我們不會將專案公開在網際網路上,而是在區域網搭建屬於自己的Git遠端倉庫服務(我司搭建的是Gitlab服務)。在使用Git的使用我們經常需要對專案執行同步、獲取和拉取等操作,那麼我們在實際應用中該如何使用相關指令呢?

克隆資源clone

如果你是剛剛參與專案的開發那麼你需要先獲取當前已經開發的專案資源,這時候就需要從從遠端倉庫克隆資源。執行指令: git clone -b <分支名> <版本庫的網址>;將指定分支克隆到本地新目錄中(不指定分支則預設克隆master分支),執行git clone後會在新目錄下有個.git的隱藏資料夾,所以clone下來的專案不需要進行git init初始化操作。

檢視分支branch

在Git中分支一般有本地版本庫分支和遠端版本庫分支,在專案目錄中檢視本地版本庫分支可以執行指令:git branch,如果檢視遠端版本庫分支可以執行指令:git branch -r,如果想同時檢視本地和遠端倉庫的分支情況可以執行指令:git branch -al。通常本地分支顯示為綠色而遠端分支顯示為紅色,前面帶符合“*”表示當前所在的分支。

同步分支

這裡我們可以看到遠端版本庫中還有一個dev分支,而本地版本庫目前只有master分支。現在我想把dev分支也取回,這個我們可以透過指令:git checkout -b <本地分支名> 將遠端倉庫裡的指定分支拉取到本地,並同時在本地新建了一個和指定遠端分支關聯的dev分支。該指令在本地倉庫新建分支並自動切換到該分支,並自動建立的本地分支會和遠端分支的對映關係。將本地所有分支與遠端版本庫保持同步 git fetch --all,拉取遠端版本庫所有分支 git pull --all。

​獲取狀態fetch

當用戶向遠端倉庫提交更新之後我們需要去獲取當前專案的最新資源,這時候我們需要知道當前資源做了哪些更新。透過指令:git fetch <遠端主機名> <分支名>可以將遠端版本庫的特定分支更新取回,如果不指定分支則將遠端主機的更新全部取回本地本地版本庫。取回更新後會返回一個FETCH_HEAD 指標指向branch在伺服器上的最新狀態,我們可以在本地透過指令:git log -p FETCH_HEAD檢視當前指標所在分支取回的更新資訊。返回的資訊包括更新的檔名、更新的作者和時間以及更新的內容,我們可以透過這些資訊來判斷是否產生衝突以確定是否將更新merge到當前分支。

​合併分支merge

fetch只是將當前專案分支在遠端倉庫上的最新狀態取回,此時只是將狀態存在了本地暫存庫中並沒有與本地分支進行合併,所以在本地並沒有還看不到遠端倉庫上更新的內容。fetch可以幫助我們檢視更新的內容是否與已有資源產生衝突,這樣我們就可以選擇分支更新進行合併。合併分支可以透過指令:git merge <遠端主機名> /<分支名>將指定分支上拉取下來的最新內容合併到當前所在的分支中,如果不放心可以透過指令:git diff <分支名>來比較原生代碼與剛剛從遠端下載下來的程式碼的區別。

​拉取分支pull

如果你不需要檢查遠端倉庫的具體更新資訊時我們可以直接使用指令:git pull <遠端主機名> <遠端分支名>:<本地分支名>取回遠端倉庫指定分支的更新並與本地分支合併,如果不指定本地分支則預設拉取到本地的當前分支進行合併。git pull相當於執行git fetch後並呼叫git merge將檢索到的分支頭合併到分支中,相比起來git fetch更安全一些,雖然麻煩些(需要手動合併)但是可以在merge前檢視更新情況然後再決定是否合併。

​總結

同步顧名思義就是保持本地版本庫與遠端版本庫的資訊一致,當本地有新分支而遠端倉庫沒有、遠端倉庫有新分支而本地沒有、本地刪除了分支時遠端也需要刪除、遠端刪除了分支時本地也同時刪除時就可以用同步來解決。其他的區域性資源更新則可以根據實際情況來拉取,如果需要對更新進行查閱那麼就先進行獲取然後再手動合併分支即可。

【來源:程式設計手札】

宣告:轉載此文是出於傳遞更多資訊之目的。若有來源標註錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯絡,我們將及時更正、刪除,謝謝。 郵箱地址:newmedia@xxcb.cn