Git學習筆記(一) 本地Git

2021-07-22 06:38:07 字數 3473 閱讀 9504

如果你是初次使用git,就要把自己的使用者名稱和郵箱告訴git,git據此區分提交**的作者。

$ git config --global user.name "wen ke"

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

檢視使用者名稱和郵箱

$

gitconfig--

global

user

.name

$git

config--

global

user

.email

$ git init foo
該命令在當前目錄建立乙個名為foo的本地倉庫。本地倉庫是乙個名為foo的「空目錄」,只包含乙個名為.git的隱藏目錄。專案變化的軌跡就存在這個隱藏目錄裡。請勿修改.git目錄下的任何東西。

如果你安裝了tortoisegit等gui工具,一般會提供右鍵選單來新建空倉庫,效果和上述命令一樣。在之後的git部落格中,就不再詳細敘述gui工具的用法,以免混淆。

git會為工作目錄維護乙個索引。沒有你的指令,git不會更改索引。要想提交新檔案,首先要把檔案新增到本地索引中。

這兩個命令可以把foo.cpp新增到索引中,並檢視目前為止索引的改動。如果要遞迴新增某個目錄及其子檔案/目錄,則使用

$ git add -a foo
這會把foo目錄下的所有內容新增到索引。

$ git commit --message 'foo.cpp added'
這個命令提交乙個新版本,提交日誌為「foo.cpp added」。

乙個git倉庫的日誌有兩種作用,一是提醒自己都幹過什麼,二是說明別人幹過什麼、為什麼這麼幹。通過git log命令可以檢視歷史記錄。

提交日誌的質量對於個人和團隊的開發效率有著至關重要的影響:試想,如果你乙個月才commit一次**,commit資訊就寫了一句「修復一些bug」,那麼你的團隊只有重讀一遍**才能理解你的工作(你自己也一樣,你根本不可能記住乙個月的**);這是很嚴重的內耗,會讓你進入裁員名單的。

抓住重點、簡明扼要:最重要的是你本次工作的目標。如果篇幅允許,還可以簡要地寫出本次implementation採用的手段。

必要的時候「修改歷史」:和大多數版本管理系統不同的是,git支援修改歷史!一種很常見的情況就是:當你所實現的功能趨於穩定,不再出現bug的時候,你是否想把你為了改bug而做的commit合併起來呢?本章就不介紹合併commit的具體方法了,只是告訴讀者git有這麼個功能,不要忘了去用。

你可以檢視任何兩次提交(commit)、任何兩個分支(branch)或任何兩個標記(tag)之間的差異(diff)。試想:當你剛pull下來的專案出現了以前沒有過的bug的時候,首先要找到專案**被改動了。這時就需要用到diff工具。

本人推薦使用tortoisegit的diff右鍵選單,直觀易懂。但考慮到類unix平台缺乏gui工具,這裡還是重點介紹git diff命令怎麼用。

$ git diff master~1 master readme.md
這個示例命令的作用是比較readme.md檔案在master分支的最新版本和上一版本之間的差異。引數master~1master叫做引用(refs)。引用的概念稍後就講。

嚴格地說,git diff使用的是「合併格式差異」(the unified format diff)的變體。推薦阮一峰的部落格讀懂diff,裡面詳盡地講述了各種diff。

diff的輸出很長,請諸位讀者務必親自試一下diff命令,才能明白我在說什麼。我在這裡一條一條地給大家剖析git diff的輸出,供大家對照。

diff --git a/readme.md b/readme.md
虛擬diff命令是git diff內部的事情,不用管。

index

0000000.

.4cc149f

這些sha-1碼不是版本id,而是git內部資料結構的id。因此這條輸出完全可以忽略。

---

a/readme.md

+++b/readme

.md

三個減號代表源版本(master~1),三個加號代表目標版本(master)。

git diff將每塊差異顯示成乙個差異小結(diff summary)。一對檔案可能有多個差異小結。每個差異小結的開頭是乙個形如

@@ -x,y +z,w @@
的標記。其中,x是原始檔的起始行號,y是從x行開始的行數;z是目標檔案的起始行號,w是從第z行開始的行數。整條命令的意思是,在原始檔的第x行開始的y行和目標檔案第z行開始的w行構成了乙個差異小結

每行前面的加號代表只出現在目標檔案裡的行,減號代表只出現在原始檔裡的行,空格代表共同的行。

git diff還可以比較好多東西,這裡不一一介紹,請大家自行摸索。

發散思考:在unix下比較兩個文字檔案,用什麼?

答:最基本的diff工具就是diff命令了。當然也可以用vimdiff(或vim -d),以diff模式開啟vim,效果和gui相仿。

引用(refs)是用來指代一次commit的符號。常見的ref有

*branch_name,指的是名為branch_name的分支的最新版本。

*head,指的是當前分支的最新版本。

*branch_name~x,指的是前x個版本(從最新版本起)。

* 用版本的sha-1碼作ref。sha-1很長,一般取前7位。

還有很多refs種類,以後會慢慢遇到的。

學習一套工具,最直接的辦法就是檢視官方文件。git的官方文件可以通過git [command] --help來獲得。比如,你想知道git commit的用法,就可以

$

gitcommit--

help

mike, m. (2015). git in practice. new york: manning.

Git 使用方法(一) 本地篇

本文參考部落格廖雪峰的官方 整理而成 git config global user.name your name git config global user.email email example.com git init 新增檔案到git倉庫,分兩步 使用命令git add,注意,可反覆多次使用...

Git學習筆記 命令列操作(一) 本地庫操作

命令 作用區分不同開發人員的身份 辨析這裡設定的簽名和登入遠端庫 託管中心 的賬號 密碼沒有任何關係。命令注意 優先順序採用 就近原則 專案級別優先於系統使用者級別。1.3.1 狀態檢視操作 git status 檢視工作區 暫存區的狀態。1.3.2 新增操作 git add file name 將...

Git 一 本地版本庫建立 簽名設定

本地版本庫可以簡單理解為乙個目錄,這個目錄裡面的所有檔案都可以被git管理起來,每個檔案的修改和刪除,git都能跟蹤,以便在任何時刻都可以追蹤歷史,或者在將來某個時刻可以 還原 版本。下面建立乙個本地庫 1.首先使用命令mkdir 目錄名稱建立乙個新的空目錄 2.進入這個目錄,使用git init命...