?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
gitglossary - Git詞匯表
備用對象數(shù)據(jù)庫
通過交替機制,存儲庫可以從另一個對象數(shù)據(jù)庫繼承其對象數(shù)據(jù)庫的一部分,這被稱為“備用”。
空倉
顯式的存儲庫通常是一個適當命名的目錄,其.git
后綴沒有在版本控制下的任何文件的本地簽出副本。也就是說,通常存在于隱藏.git
子目錄中的所有Git管理和控制文件都直接出現(xiàn)在repository.git
目錄中,而不存在和檢出其他文件。通常,公共存儲庫的發(fā)布者會使顯式的存儲庫可用。
blob 對象
非類型化的對象,例如文件的內(nèi)容。
分支
“分支”是一個積極的發(fā)展路線。分支上最近的提交被稱為分支的提示。分支的頂端由分支頭引用,隨著分支上的額外開發(fā),分支頭向前移動。一個Git倉庫可以跟蹤任意數(shù)量的分支,但您的工作樹僅與其中一個分支(“當前”或“簽出”分支)關聯(lián),并且HEAD指向該分支。
高速緩存
已棄用:索引。
鏈
對象列表,其中列表中的每個對象都包含對其后繼者的引用(例如,提交的后繼者可以是其父代之一)。
變更
BitKeeper / cvsps 代表“提交”。由于 Git 不存儲更改,但使用 Git 的術(shù)語 “changesets” 確實沒有意義。
查看
使用對象數(shù)據(jù)庫中的樹對象或 blob 更新全部或部分工作樹,以及在整個工作樹已指向新分支的情況下更新索引和 HEAD 的操作。
cherry-picking
在 SCM 專業(yè)術(shù)語中,“ cherry-picking ” 意味著從一系列更改(通常為提交)中選擇一部分更改,并將它們記錄為不同代碼庫之上的一系列新更改。在 Git 中,這由 “git cherry-pick” 命令執(zhí)行,以提取現(xiàn)有引入的提交更改,并根據(jù)當前分支的提示將其記錄為新提交。
清除
A working tree is clean, if it corresponds to the revision referenced by the current head. Also see "dirty".
commit
作為名詞:Git 歷史中的單一點; 一個項目的整個歷史被表示為一組相互關聯(lián)的提交。Git經(jīng)常在相同的地方使用 “commit” 一詞,而其他版本控制系統(tǒng)使用“revision”或“version”一詞。也用作提交對象的簡寫。
作為動詞:通過創(chuàng)建一個代表索引當前狀態(tài)的新提交并推進 HEAD 指向新的提交,將項目狀態(tài)的新快照存儲在 Git 歷史記錄中的操作。
commit 對象
對象,其中包含有關特定修訂版的信息,例如父項,提交者,作者,日期和與所存儲的修訂版頂部目錄相對應的樹對象。
commit-ish (also committish)
提交對象或可遞歸解引用到提交對象的對象。以下是所有提交:提交對象,指向提交對象的標記對象。
Git 核心
Git 的基本數(shù)據(jù)結(jié)構(gòu)和實用程序。只公開有限的源代碼管理工具。
DAG
有向無循環(huán)圖。提交對象形成一個有向無循環(huán)圖,因為它們具有父(定向),并且提交對象的圖是非循環(huán)的(不存在以相同對象開始和結(jié)束的鏈)。
dangling object
即使從其他不可達對象也無法訪問不可訪問對象; 一個懸掛對象沒有從存儲庫中的任何引用,或沒有對象引用它。
分離 HEAD
通常,HEAD 存儲分支的名稱,并且對歷史 HEAD 進行操作的命令表示對通向 HEAD 指向的分支尖端的歷史進行操作。但是,Git 還允許您檢出任意提交,但不一定是任何特定分支的提示。這種狀態(tài)下的 HEAD 被稱為“分離”。
請注意,在當前分支的歷史記錄上運行的命令(例如git commit
,在其上創(chuàng)建新的歷史記錄)在
HEAD 分離時仍然有效。他們更新 HEAD 指向更新后的歷史記錄,而不影響任何分支。更新或查詢about
當前分支信息的命令(例如git branch --set-upstream-to
,設置當前分支集成的遠程跟蹤分支)顯然不起作用,因為在此狀態(tài)下沒有(實際)當前分支要求。
目錄
你用 “l(fā)s” 得到的名單:-)
dirty
如果工作樹包含尚未提交給當前分支的修改,則稱其為“ dirty ”。
evil merge
evil merge 是一種合并,它引入了不出現(xiàn)在任何父代中的變化。
fast-forward
fast-forward 是一種特殊的合并類型,您可以在其中進行修改,并且您正在 “merging” 另一個分支的變更,這些變更恰好是您所擁有的后代。在這種情況下,您不必進行新的合并提交,而只需更新其修訂。這將經(jīng)常發(fā)生在遠程存儲庫的遠程跟蹤分支上。
fetch
獲取分支意味著從遠程存儲庫獲取分支的頭部引用,以找出本地對象數(shù)據(jù)庫中缺少哪些對象,并獲取它們。另請參閱 git-fetch [1] 。
文件系統(tǒng)
Linus Torvalds 最初將 Git 設計為用戶空間文件系統(tǒng),即保存文件和目錄的基礎架構(gòu)。這確保了 Git 的效率和速度。
Git 存檔
資源庫的同義詞(適用于 arch 人士)。
gitfile
.git
工作樹根部的純文件,指向真實存儲庫的目錄。
grafts
嫁接使兩個不同的發(fā)展路線通過記錄提交的虛假血統(tǒng)信息連接在一起。通過這種方式,你可以讓 Git 假裝一個提交的父集與創(chuàng)建提交時所記錄的不同。通過.git/info/grafts
文件進行配置。
Note that the grafts mechanism is outdated and can lead to problems transferring objects between repositories; see git-replace[1] for a more flexible and robust system to do the same thing.
hash
在 Git 的上下文中,對象名的同義詞。
head
對分支頂端提交的命名引用。頭文件存儲在$GIT_DIR/refs/heads/
目錄中的文件中,除非使用打包引用。(請參閱 git-pack-refs [1] 。)
HEAD
當前分支。更詳細地說:你的工作樹通常是由 HEAD 引用的樹的狀態(tài)派生的。除了使用分離 HEAD 時,HEAD 是對存儲庫中某個頭的引用,在這種情況下,它直接引用任意提交。
head ref
頭部的同義詞。
hook
在正常執(zhí)行幾個 Git 命令的過程中,對可選腳本進行了標注,以便開發(fā)人員添加功能或進行檢查。通常,鉤子允許預先驗證命令并可能中止,并且在完成操作之后允許后通知。hook 腳本可以在$GIT_DIR/hooks/
目錄中找到,只需.sample
從文件名中刪除后綴即可啟用。在 Git 的早期版本中,你必須讓它們可執(zhí)行。
index
包含 stat 信息的文件集合,其內(nèi)容以對象形式存儲。索引是工作樹的存儲版本。真相被告知,它也可以包含合并時使用的第二個,甚至第三個工作樹版本。
index entry
有關特定文件的信息,存儲在索引中。如果合并已啟動,但尚未完成(即索引包含該文件的多個版本),則索引條目可以取消合并。
master
默認開發(fā)分支。無論何時創(chuàng)建 Git 存儲庫,都會創(chuàng)建一個名為 “master” 的分支,并成為活動分支。在大多數(shù)情況下,這包含了當?shù)氐陌l(fā)展,盡管這純粹是按照慣例,并不是必需的。
merge
作為動詞:將另一個分支的內(nèi)容(可能來自外部存儲庫)引入當前分支。在合并分支來自不同的存儲庫的情況下,首先獲取遠程分支,然后將結(jié)果合并到當前分支中。提取和合并操作的組合稱為拉取。合并由一個自動過程執(zhí)行,該過程識別自分支發(fā)散后所做的更改,然后將所有這些更改應用到一起。如果更改有沖突,可能需要手動干預才能完成合并。
作為名詞:除非是快進,否則成功的合并會導致創(chuàng)建代表合并結(jié)果的新提交,并將合并分支的提示作為父項。這個提交被稱為“合并提交”,或者有時候只是一個“合并”。
object
Git 中的存儲單元。它由 SHA-1 的內(nèi)容唯一標識。因此,對象不能改變。
object 數(shù)據(jù)庫
存儲一組 “object”,單個對象由其對象名稱標識。物體通常存儲在$GIT_DIR/objects/
。
object 標識符
object 名稱的同義詞。
object 名稱
object 的唯一標識符。對象名稱通常由40個字符的十六進制字符串表示。俗稱 SHA-1。
object 類型
描述對象類型的標識符 “commit”,“tree”,“tag” 或 “blob” 之一。
octopus
合并兩個以上的分支。
origin
默認的上游存儲庫。大多數(shù)項目至少有一個跟蹤的上游項目。默認情況下origin
用于此目的。新的上游更新將被提取到名為 origin / name-of-upstream-branch 的遠程跟蹤分支中,您可以使用git branch -r
。
pack
一組已壓縮到一個文件中的對象(以節(jié)省空間或有效傳輸它們)。
pack index
包中對象的標識符列表和其他信息,以幫助高效地訪問包的內(nèi)容。
pathspec
用于限制 Git 命令中路徑的模式。
Pathspecs 用于 “git ls-files”,“git ls-tree”,“git add”,“git grep”,“git diff”,“git checkout” 等命令行以限制范圍對樹或工作樹的某個子集的操作。有關路徑是否與當前目錄或頂層相關的信息,請參閱每條命令的文檔。pathspec 語法如下所示:
任何路徑都與它自己匹配
直到最后一個斜杠的 pathspec 表示一個目錄前綴。pathspec 的范圍僅限于該子樹。
pathpec 的其余部分是路徑名剩余部分的模式。相對于目錄前綴的路徑將使用fnmatch(3) 與該模式進行匹配; 特別是,*
和?
can
匹配目錄 separators.For 例如,文檔/ *。JPG 將匹配在文檔子樹的所有.jpg文件,包括文檔 / chapter_1 / figure_1.jpg.A pathspec 開頭用冒號:
具有特殊的意義。簡而言之,前面的冒號:
后面是零個或多個“魔術(shù)簽名”字母(可選地由另一個冒號終止:
),剩下的就是匹配路徑的模式?!澳g(shù)簽名”由 ASCII 字母組成,既不是字母數(shù)字,glob,正則表達式特殊字符也不是冒號。如果模式以不屬于“魔術(shù)簽名”符號集且不是冒號的字符開始,則可以省略可選冒號以終止“魔術(shù)簽名”。在長形式中,前導冒號:
后面是開放圓括號(
,以逗號分隔的零個或多個“魔術(shù)字”列表和一個緊密的括號)
,其余部分是匹配路徑的模式。僅帶冒號的 pathspec 意味著“沒有 pathspec ”。此表單不應與其他 pathspec 結(jié)合使用。頂部魔術(shù)字top
(魔法簽名:/
)使模式與工作樹的根相匹配,即使在子目錄中運行命令時也是如此。模式中的文字通配符,例如*
或被?
視為文字字符。icase不區(qū)分大小寫匹配。glob Gi t將模式視為適合 fnmatch(3) 使用
FNM_PATHNAME 標志使用的 shell glob:
模式中的通配符不會與路徑名中的/匹配。例如,“Documentation / *。html” 與 “Documentation / git.html” 相匹配,但不匹配 “Documentation / ppc / ppc.html” 或 “tools / perf / Documentation / perf.html”。兩個連續(xù)的星號 (“ **
”)與全路徑匹配的模式可能有特殊的含義:
前面的“ **
”后跟斜杠意味著所有目錄匹配。例如,“ **/foo
” foo
在任何地方與文件或目錄“ ”匹配,與模式“ foo
” 相同。“ **/foo/bar
”與bar
直接在目錄“ foo
” 下的任何地方的文件或目錄“ ”匹配。
尾隨“ /**
”匹配內(nèi)部的所有內(nèi)容。例如,“ abc/**
” .gitignore
以無限深度匹配目錄“abc”內(nèi)相對于文件位置的所有文件。
斜杠后跟兩個連續(xù)的星號,則斜線匹配零個或多個目錄。例如,“ a/**/b
”匹配“ a/b
”,“ a/x/b
”,“ a/x/y/b
”等。
其他連續(xù)的星號被認為是無效的。Glob魔法與字面魔法不相容。attr在attr:
出現(xiàn)空格分隔的“屬性要求”列表之后,必須滿足所有這些才能使路徑被視為匹配; 這是除了通常的非
magicitespec 模式匹配外。請參閱
gitattributes [5] 。路徑的每個屬性需求都采用以下形式之一:
“ ATTR
”要求ATTR
設置屬性。
“ -ATTR
” 要求屬性ATTR
未設置。
“ ATTR=VALUE
” 要求將屬性ATTR
設置為字符串VALUE
。
“ !ATTR
” 要求屬性ATTR
未指定。
排除
路徑匹配任何非排除的pathspec后,它將通過所有排除路徑規(guī)范(魔術(shù)簽名:!
或其同義詞^
)運行。如果匹配,路徑將被忽略。如果不存在非排除的 pathspec,則將排除應用于結(jié)果集,就像調(diào)用沒有任何 pathspec 一樣。
parent
提交對象包含一個(可能是空的)在開發(fā)線中的邏輯前驅(qū)者列表,即它的父代。
pickaxe
術(shù)語 pickaxe 指 diffcore 例程的一個選項,它幫助選擇添加或刪除給定文本字符串的更改。有了這個--pickaxe-all
選項,它可以用來查看引入或刪除的完整變更集,比如說一行文本。參見 git-diff [1]。
plumbing
核心 Git 的名字。
porcelain
程序和程序套件的名字取決于核心 Git,提供對核心 Git 的高級訪問。Porcelains 公開了比管道更多的 SCM 界面。
per-worktree ref
參考文獻是每個工作樹,而不是全局。目前只有
HEAD 和任何以 ref 開頭的 ref refs/bisect/
,但后來可能會包含其他不尋常的 ref。
pseudoref
Pseudorefs 是一類文件,在$GIT_DIR
這類文件中,為了 rev-parse 的目的,其行為類似于 refs,但是它們被 git 特別處理。偽代碼都具有全部大寫的名稱,并且始終以包含 SHA-1 和空白的行開頭。所以,HEAD 不是一個偽造的,因為它有時是一個符號參考。他們可以選擇包含一些額外的數(shù)據(jù)。MERGE_HEAD
并且CHERRY_PICK_HEAD
是例子。不像per-worktree refs,這些文件不能是符號參考,也不會有 reflog。他們也不能通過正常的參考更新機器進行更新。相反,它們是通過直接寫入文件來更新的。然而,他們可以被看作是裁判,所以git rev-parse MERGE_HEAD
會工作。
pull
pull 分支意味著獲取并合并它。另見 git-pull [1]。
push
push 分支意味著從遠程存儲庫獲取分支的頭部引用,找出它是否是分支的本地頭引用的直接祖先,并且在這種情況下,將所有可從本地頭引用獲得的對象,以及哪些從遠程存儲庫中丟失,進入遠程對象數(shù)據(jù)庫,并更新遠程頭參考。如果遠程頭部不是本地頭部的父類,則推送失敗。
reachable
所有提交的父類都被認為是“可達”的。更一般地說,如果我們可以通過跟隨標簽跟隨標簽的鏈向另一個發(fā)送另一個對象,那么可以從另一個對象到達另一個對象,向他們的父類或 commit,向樹木或其包含的 blob commit。
rebase
要重新應用從一個分支到另一個基地的一系列更改,并將該分支的頭部重置為結(jié)果。
ref
以refs/
(例如refs/heads/master
)開頭的名稱指向一個對象名稱或另一個引用(后者稱為符號引用)。為方便起見,當用 Git 命令的參數(shù)時,ref 有時可以縮寫; 有關詳細信息,請參閱 gitrevisions [7]。參考資料存儲在存儲庫中。
參考命名空間是分層的。不同的refs/heads/
子層次結(jié)構(gòu)用于不同的目的(例如,層次結(jié)構(gòu)用于表示本地分支)。
有一些特殊用途的參考文獻不是以refs/
開頭的。最顯著的例子是HEAD
。
reflog
reflog顯示參考文獻的本地“歷史”。換句話說,this
可以告訴你存儲庫中第3次修訂版本是什么,以及當前this
存儲庫中的狀態(tài)是什么,如昨天晚上9點14分。有關詳細信息,請參閱 git-reflog [1]。
refspec
提取和推送使用“refspec”來描述遠程參考和本地參考之間的映射。
遠程存儲庫
用于跟蹤相同項目但駐留在其他位置的存儲庫。要與遙控器通信,請參閱提取或推送。
遠程跟蹤分支
用于跟蹤另一個存儲庫的更改的引用。它通??雌饋硐?code>refs/remotes/foo/bar(表示它跟蹤名為bar
遠程命名的分支foo
),并匹配配置的提取refspec的右側(cè)。遠程追蹤分支不應包含直接修改或本地提交。
知識庫
ref 集合以及對象數(shù)據(jù)庫,其中包含所有可從 ref 中獲得的對象,可能伴隨著來自一個或多個 porcelains 的元數(shù)據(jù)。存儲庫可以通過交替機制與其他存儲庫共享對象數(shù)據(jù)庫。
解決
手動修復失敗的自動合并留下的操作。
調(diào)整
提交的同義詞(名詞)。
rewind
放棄部分發(fā)展,即將頭部分配給較早的修訂。
SCM
源代碼管理(工具)。
SHA-1
“安全散列算法1”; 一個密碼散列函數(shù)。在使用 Git 作為對象名稱的同義詞的上下文中。
shallow clone
大多數(shù)情況下,它是淺層存儲庫的同義詞,但該語句使得它更加明確,它是通過運行git clone --depth=...
命令創(chuàng)建的。
shallow repository
淺倉庫有一個不完整的歷史記錄,其中一些提交被父母燒掉(換句話說,Git被告知假設這些提交沒有父母,即使它們被記錄在提交對象中)。即使在上游記錄的真實歷史要大得多,當你僅僅關注項目的最近歷史時,這有時也很有用。通過給--depth
git-clone [1] 選項創(chuàng)建一個淺倉庫,其歷史可以通過 git-fetch [1] 加深。
stash entry
用于臨時存儲臟工作目錄和索引以供將來重用的內(nèi)容的對象。
submodule
在另一個存儲庫(后者稱為超級項目)中存儲單獨項目歷史的存儲庫。
superproject
將工作樹中其他項目的存儲庫作為子模塊引用的存儲庫。超級項目知道所包含子模塊的提交對象的名稱(但不保存其副本)。
symref
符號引用:它不是包含 SHA-1 標識本身,而是它的格式ref: refs/some/thing
,當被引用時,它遞歸地解引用這個引用。HEAD
是 symref 的一個主要例子。符號引用通過 git-symbolic-ref [1] 命令進行處理。
tag
在refs/tags/
命名空間下的一個 ref ,指向任意類型的對象(通常是一個標記指向一個標記或一個提交對象)。與頭部相比,標簽不會被commit
命令更新。一個 Git 標簽與一個 Lisp 標簽(在Git的上下文中被稱為對象類型)無關。標簽通常用于標記提交血統(tǒng)鏈中的特定點。
tag object
包含ref的對象指向另一個對象,它可以像提交對象一樣包含消息。它也可以包含一個(PGP)簽名,在這種情況下,它被稱為“簽名標簽對象”。
topic branch
常規(guī)的 Git 分支,開發(fā)人員用它來識別概念上的開發(fā)線。由于分支非常簡單且便宜,通常需要有幾個小分支,每個小分支包含非常明確的概念或小的增量但相關的更改。
tree
無論是工作樹還是樹對象以及依賴的 blob 和樹對象(即工作樹的存儲表示)。
tree object
包含文件名和模式列表的對象,并引用相關的 blob 和/或樹對象。一棵樹相當于一個目錄。
tree-ish (also treeish)
樹對象或可遞歸解引用到樹對象的對象。取消引用提交對象會生成與修訂版頂部目錄對應的樹對象。以下是所有樹形結(jié)構(gòu):提交對象,樹對象,指向樹對象的標記對象。
未合并指數(shù)
包含未合并索引條目的索引。
無法訪問的對象
無法從分支,標記或任何其他參考訪問的對象。
上游分支
合并到問題分支(或分支問題的分支)的默認分支被重新分配到。它通過分支<name> .remote 和分支。<名稱> .merge 進行配置。如果上游分支A
是origin/B
有時候我們說“ A
被跟蹤origin/B
”。
working tree
實際檢出文件的樹。工作樹通常包含 HEAD 提交樹的內(nèi)容,以及您所做的但尚未提交的任何本地更改。