Your browser version is not supported. Some things may not display correctly.
(學習) 程式設計 - Git 版本控制
In
個人文件 (Hackpad 匯入)
20150909 [學習筆記] Git版本控制(4)
Sign in
Sign up
20150909
[學習筆記]
Git版本控制(4)
整理自
第 05 天:了解儲存庫、工作目錄、物件與索引之間的關係
[內容摘要] 基本觀念
--
儲存庫、工作目錄、Git資料結構
(一)了解儲存庫
(Repository)
(二)了解工作目錄
(working
directory)
(三)了解 Git 的資料結構
[基本概念] 使用Git版本控制
STEP 1
:
要使用 Git 版本控管,必須
先建立「工作目錄」與「版本庫」
。(mkdir, git init)
STEP 2
:
要在「工作目錄」進行開發,可能會
建立目錄、建立檔案、修改檔案、刪除檔案
、... 等操作。
STEP 3
:
然後當你
想提交一個新版本到 Git 的「儲存庫」裡,一定要先更新「索引」
狀態。(git add, git mv, ...)
STEP 4
:
然後 Git 會依據「索引」當下的狀態,決定要把那些檔案提交到 Git 的「儲存庫」裡。(git status)
STEP 5
:
最後
提交變更時
(git
commit),才會把版本資訊寫入到「物件儲存區」當中
(此時將會寫入
commit 物件)。
(一)了解儲存庫
(Repository)
如果要在任意一個資料夾建立一個 Git 儲存庫,只要輸入以下指令:
git init
執行git init 之後,Git 會自動幫我們建立一個所謂的 Git repository 在該目錄的 .git 目錄下,
這個 .git 資料夾,就是一個完整的 Git 儲存庫
,未來所有版本的變更,都會自動儲存在這個資料夾裡面
[範例]
在這裡目錄為
C:\Users\user\Documents\GitHub\git-demo
Couldn’t load preview
The file may have been moved or deleted, or is temporarily unavailable.
https://paper-hackpad-attachments.dropboxusercontent.com/hackpad.com_TJwPNygW2fV_p.427403_1441726021565_undefined?fit=max&w=882
Retry
(二)了解工作目錄
(working
directory)
上述
C:\Users\user\Documents\GitHub\git-demo
此時就會自動成為我們的
「工作目錄」
(working
directory)
。
所謂「工作目錄」,就是我們正在準備開發的專案檔案,未來都會在這個目錄下進行編輯,例如 :
新增檔案
修改檔案
刪除檔案
檔案更名
...其他
Git 相關的操作,都會在這個目錄下完成
。
操作 Git 指令參數時,通常都是在「工作目錄」下執行的。
(三)了解 Git 的資料結構
在 Git 裡有兩個重要的資料結構,分別是
「物件」與「索引」
。
「物件」用來保存版本庫中所有檔案與版本紀錄
「索引」則是用來保存當下要進版本庫之前的目錄狀態。
1. 關於物件
所謂的「物件」是一個「特別的檔案」,該檔案的產生過程是將一個檔案的內容中取出,透過內容產生一組 SHA1 雜湊值,然後依照這個 SHA1 雜湊值命名的一個檔案。
在使用 Git 進行版本控管的過程中,所有要進行控管的目錄與檔案,都會先
區分「目錄資訊」(tree) 與「檔案內容」(blob)
。
(1)blob 物件
就是把原本的「檔案內容」當成 blob 檔案的內容
(注意:
blob 物件其實就是一個實體檔案),然後再將其內容進行 SHA1 雜湊運算後產生的一個 hash id,再把這個 hash id 當成 blob 檔案的檔名。由此可知,blob 物件是一個「只有內容」的檔案,其檔名又是由內容產生的,所以,任何一的單獨存在的 blob 檔案通常對版本控管沒有任何幫助。
(2)tree 物件
用來儲存特定資料夾下包含哪些檔案,以及該檔案對應的 blob 物件的檔名為何。在 tree 物件中,除了可以包含 blob 物件的檔名與相關資訊,還可以包含其他的 tree 物件。所以 tree 物件
其實就是「資料夾」的代名詞
。
無論 blob 物件與 tree 物件,這些都算是物件,這些物件都會儲存在一個所謂的「物件儲存區」
(object
storage) 之中,而這個「物件儲存區」預設就在「儲存庫」的 objects 目錄下,如下圖示 :
Couldn’t load preview
The file may have been moved or deleted, or is temporarily unavailable.
https://paper-hackpad-attachments.dropboxusercontent.com/hackpad.com_TJwPNygW2fV_p.427403_1441727308395_undefined?fit=max&w=882
Retry
2. 關於索引
「索引」是一個
經常異動的暫存檔
,這個檔案通常
位於
.git 目錄下的一位名為 index 的檔案
。
主要用來
紀錄「有哪些檔案即將要被提交到下一個 commit 版本中」
。換句話說,如果你想要提交一個版本到 Git 儲存庫,那麼你一定要先更新索引狀態,變更才會被提交出去。
索引檔通常保存Git 儲存庫中特定版本的狀態
,這個狀態可以由任意一個 commit 物件,以及 tree 物件表示。
正常情況下不會直接去編輯 .git\index 這個二進位檔,而是
透過標準的 git 指令去操作這個索引檔
,對於索引檔的操作指令常用的有以下幾個 :
(相關說明請看
20150826
[學習筆記]
Git 版本控制(3)
)
git add
git mv
git rm
git status
git commit
git ls-files
「索引」是
介於「物件儲存區」
(object
storage) 與「工作目錄」
(working
directory) 之間
的媒介。
Couldn’t load preview
The file may have been moved or deleted, or is temporarily unavailable.
https://paper-hackpad-attachments.dropboxusercontent.com/hackpad.com_TJwPNygW2fV_p.427403_1441728099410_undefined?fit=max&w=882
Retry
20150909 [學習筆記] Git版本控制(4)
整理自第 05 天:了解儲存庫、工作目錄、物件與索引之間的關係
[內容摘要] 基本觀念 -- 儲存庫、工作目錄、Git資料結構
[基本概念] 使用Git版本控制
(一)了解儲存庫 (Repository)
(二)了解工作目錄 (working directory)
(三)了解 Git 的資料結構
1. 關於物件
2. 關於索引
Emoji
Please turn on JavaScript to use Paper in all of its awesomeness. ^_^
整理自第 05 天:了解儲存庫、工作目錄、物件與索引之間的關係
(一)了解儲存庫 (Repository)
git init
(二)了解工作目錄 (working directory)
(三)了解 Git 的資料結構