我們把在Git里常用的一些名詞做了解釋列在這里。這些名詞(terms)全部來自[Git Glossary](http://www.kernel.org/pub/software/scm/git/docs/gitglossary.html)。
_alternate object database_
> Via the alternates mechanism, a repository
>
> ~~~
> can inherit part of its object database
> from another object database, which is called "alternate".
>
> ~~~
_bare repository_
> A bare repository is normally an appropriately
>
> ~~~
> named directory with a `.git` suffix that does not
> have a locally checked-out copy of any of the files under
> revision control. That is, all of the `git`
> administrative and control files that would normally be present in the
> hidden `.git` sub-directory are directly present in the
> `repository.git` directory instead,
> and no other files are present and checked out. Usually publishers of
> public repositories make bare repositories available.
>
> ~~~
_祼倉庫_
> ~~~
> A bare repository is normally an appropriately
> named directory with a `.git` suffix that does not
> have a locally checked-out copy of any of the files under
> revision control. That is, all of the `git`
> administrative and control files that would normally be present in the
> hidden `.git` sub-directory are directly present in the
> `repository.git` directory instead,
> and no other files are present and checked out. Usually publishers of
> public repositories make bare repositories available.
>
> ~~~
_blob object(二進制對象)_
> 沒有類型的數據對象。例如:一個文件的內容。
_branch_
> A "branch" is an active line of development. The most recent
>
> ~~~
> commit on a branch is referred to as the tip of
> that branch. The tip of the branch is referenced by a branch
> head, which moves forward as additional development
> is done on the branch. A single git
> repository can track an arbitrary number of
> branches, but your working tree is
> associated with just one of them (the "current" or "checked out"
> branch), and HEAD points to that branch.
>
> ~~~
_分支_
> ~~~
> 一個“分支”是開發過程中的(active line)。。。。
>
> ~~~
_cache(緩存)_
> 索引(index)的舊稱(obsolete).
_chain(鏈表)_
> 一串對象,其中每個對象都有指向其后繼對象的引用(reference to its successor)。例如:一個提交(commit)的后繼對象就是它的父對象。
_changeset(修改集)_
> BitKeeper/cvsps 里對于提交(commit)的說法。但是 git 只存儲快照(states),不存儲修改;所以這個詞用在 git 里有點不大合適。
_checkout(簽出)_
> ~~~
> 用對象倉庫(object database)里的一個樹對象(tree object)更新當前整個工作樹(worktree),或者一個二進制對象(blob object)更新工作樹的一部分;如果工作樹指向了一個新的分支,那么就會更新索引(index)和HEAD。
>
> ~~~
_cherry-picking_
> In SCM jargon, "cherry pick" means to choose a subset of
>
> ~~~
> changes out of a series of changes (typically commits) and record them
> as a new series of changes on top of a different codebase. In GIT, this is
> performed by the "git cherry-pick" command to extract the change introduced
> by an existing commit and to record it based on the tip
> of the current branch as a new commit.
>
> ~~~
_cherry-picking_
> 在SCM的行話里,“cherry pick“ 意味著從一系列的修改中選出一部分修改(通常是提交),應用到當前代碼中。()
_clean(干凈)_
> 如果一個工作樹(working tree)中所有的修改都已提交到了當前分支里(current head),那么就說它是干凈的(clean),反之它就是臟的(dirty)。
_commit_
> As a verb: The action of storing a new snapshot of the project's
>
> ~~~
> state in the git history, by creating a new commit representing the current
> state of the index and advancing HEAD
> to point at the new commit.
>
> ~~~
_commit(提交)_
> 作為名詞:指向git歷史的某一點的指針;整個項目的歷史就由一組相互關聯的提交組成的。提交(commit)在其它版本控制系統中也做"revision"或"version"。同時做為提交對象(commit object)的縮寫。
>
> 作為動詞:創建一新的提交(commit)來表示當前索引(index)的狀態的行為,把 HEAD 指向新創建的提交,這一系列把項目在某一時間上的快照(snapshot)保存在git歷史中的操作。
_提交對象_
> 一個關于特定版本信息(particular revision)的對象。包括父對象名,提交者,作者,日期和存儲了此版本內容的樹對象名(tree object)。
_core git_
> Git的基本數據結構和工具,它只對外提供簡單的代碼管理工具。
_DAG_
> 有向無環圖。眾多提交對象(commit objects)組成了一個有向無環圖;因為它們都有直接父對象(direct parent),且沒有一條提交線路(chain)的起點和終點都是同一個對象。
_dangling object(懸空對象)_
> 一個甚至從其它不可達對象也不可達的對象(unreachable object);倉庫里的一個懸空對象沒有任何引用(reference)或是對象(object)引用它。
_detached HEAD(分離的HEAD)_
> 通常情況下HEAD里是存放當前分支的名字。然而 git 有時也允許你簽出任意的一個提交(commit),而不一定是某分支的最近的提交(the tip of any particular branch);在這種情況下,HEAD就是處于分離的狀態(detached)。 譯者注:這時`.git/HEAD`中存儲的就是簽出的提交的SHA串值。
_dircache_
> 請參見索引(index)。
_directory(目錄)_
> 執行"ls"命令所顯示的結果 :-)
_dirty(臟)_
> 一個工作樹里有沒有提交到當前分支里修改,那么我就說它是臟的(dirty)。
_ent_
> 某些人給樹名(tree-ish)起的另外一個別名,這里`http://en.wikipedia.org/wiki/Ent_(Middle-earth)`有更詳細的解釋。最好不要使用這個名詞,以免讓大家糊涂。
_evil merge(壞的合并)_
> 如果一次合并引入一些不存在于任何父對象(parent)中的修改,那么就稱它是一個壞的合并(evil merge)。
_fast forward_
> A fast-forward is a special type of merge where you have a
>
> ~~~
> revision and you are "merging" another
> branch's changes that happen to be a descendant of what
> you have. In such these cases, you do not make a new merge
> commit but instead just update to his
> revision. This will happen frequently on a
> tracking branch of a remote
> repository.
>
> ~~~
_快速向前_
> “fast-forward”是一種特殊的合并,()。 在這種情況下,并沒有創建一個合并提交(merge commit),只是更新了版本信息。 當本地分支是遠端倉庫(remote repository)的跟蹤分支時,這種情況經常出現。
_fetch(抓取)_
> 抓取一個分支意味著:得到遠端倉庫(remote repository)分支的head ref,找出本地對象數據庫所缺少的對象,并把它們下載下來。你可以參考一下?[git fetch](http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html)。
_file system(文件系統)_
> Linus Torvalds 最初設計 git 時,是把它設計成一個在用戶空間(user space)運行的文件系統;也就是一個用來保存文件和目錄的 infrastructure,這樣就保證了git的速度和效率。
_git archive_
> 對玩架構的人來說,這就是倉庫的同義詞。
_grafts_
> Grafts enables two otherwise different lines of development to be joined
>
> ~~~
> together by recording fake ancestry information for commits. This way
> you can make git pretend the set of parents a commit has
> is different from what was recorded when the commit was
> created. Configured via the `.git/info/grafts` file.
>
> ~~~
_hash(哈希)_
> 在git里,這就是對象名(object name)的同義詞。
_head_
> 指向一個分支最新提交的命名引用(named reference)。除非使用了打包引用(packed refs),heads 一般存儲在`$GIT_DIR/refs/heads/`。 參見:?[git pack-refs](http://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html)
_HEAD_
> 當前分支。詳細的講是:你的工作樹(working tree)通是從HEAD所指向的tree所派生的來的。 HEAD 必須是指向一個你倉庫里的head,除非你使用分離的HEAD(detached HEAD)。
_head ref_
> head的同義詞。
_hook_
> During the normal execution of several git commands, call-outs are made
>
> ~~~
> to optional scripts that allow a developer to add functionality or
> checking. Typically, the hooks allow for a command to be pre-verified
> and potentially aborted, and allow for a post-notification after the
> operation is done. The hook scripts are found in the
> `$GIT_DIR/hooks/` directory, and are enabled by simply
> removing the `.sample` suffix from the filename. In earlier versions
> of git you had to make them executable.
>
> ~~~
_鉤子_
> 在一些git命令的執行過程中, () 允許開發人員調用特別的腳本來添加功能或檢查。
>
> ~~~
> ()
>
> ~~~
~~~
Typically,鉤子允許對一個命令做pre-verified并且可以中止此命令的運行;同時也可在這個命令執行完后做后繼的通知工作。這些鉤子腳本放在`$GIT_DIR/hooks/`目錄下,你只要把這它們文件名的`.sample`后綴刪掉就可以了。不過在git的早期版本,你需要為這些鉤子腳本加上可執行屬性。
~~~
_index_
> A collection of files with stat information, whose contents are stored
>
> ~~~
> as objects. The index is a stored version of your
> working tree. Truth be told, it can also contain a second, and even
> a third version of a working tree, which are used
> when merging.
>
> ~~~
_索引_
> 描述項目狀態信息的文件,。索引里保存的是你的工作樹的版本記錄。()
_index entry_
> The information regarding a particular file, stored in the
>
> ~~~
> index. An index entry can be unmerged, if a
> merge was started, but not yet finished (i.e. if
> the index contains multiple versions of that file).
>
> ~~~
_索引條目_
_主分支 (master)_
> 默認的開發分支。當你創建了一個git倉庫,一個叫"master"的分支就被創建并且成為當前活動分支(active branch)。在多數情況下,這個分支里就包含有本地的開發內容。
_merge_
> As a verb: To bring the contents of another
>
> ~~~
> branch (possibly from an external
> repository) into the current branch. In the
> case where the merged-in branch is from a different repository,
> this is done by first fetching the remote branch
> and then merging the result into the current branch. This
> combination of fetch and merge operations is called a
> pull. Merging is performed by an automatic process
> that identifies changes made since the branches diverged, and
> then applies all those changes together. In cases where changes
> conflict, manual intervention may be required to complete the
> merge.
>
> ~~~
_merge(合并)_
> 作為動詞:把另外一個分支(也許來自另外一個倉庫)的內容合并進當前的分支。()
>
> 作為名詞:除非合并的結果是 fast forward;那么一次成功的合并會創建一個新的提交(commit)來表示這次合并,并且把合并了的分支做為此提交(commit)的父對象。這個提交(commit)也可以表述為“合并提交”(merge commit),或者就是"合并"(merge 名詞)。
_object(對象)_
> Git的存儲單位,它以對象內容的SHA1值做為唯一對象名;因此對象內容是不能被修改的。
_object database(對象倉庫)_
> 用來存儲一組對象(objects),每個對象通過對象名來區別。對象(objects)通常保存在?`$GIT_DIR/objects/`。
_object identifier(對象標識符)_
> 對象名(object name)的同義詞。
_object name(對象名)_
> 一個對象的唯一標識符(unique identifier)。它是使用SHA1算法(Secure Hash Algorithm 1)給對象內容進行哈希(hash)計算,產生的一個40個字節長的16進制編碼的串。
_object type(對象類型)_
> Git有4種對象類型:提交(commit),樹(tree),標簽(tag)和二進制塊(blob)。
_octopus(章魚)_
> 一次多于兩個分支的合并(merge)。也用來表示聰明的肉食動物。
_origin_
> 默認的上游倉庫(upstream repository)。每個項目至少有一個它追蹤(track)的上游(upstream)倉庫,通常情況 origin 就是用來表示它。你可以用 ”`git branch -r`“ 命令查看上游倉庫(upstream repository)里所有的分支,再用 origin/name-of-upstream-branch 的名字來抓取(fetch)遠程追蹤分支里的內容。
_pack(包)_
> 一個文件,里面有一些壓縮了的對象。(用以節約空間或是提高傳輸效率)。
_pack index(包索引)_
> 包(pack)里的一些標識符和其它相關信息,用于幫助git快速的訪問包(pack)里面的對象。
_parent_
> A commit object contains a (possibly empty) list
>
> ~~~
> of the logical predecessor(s) in the line of development, i.e. its
> parents.
>
> ~~~
_父對象_
> 一個提交對象(commit object),()。
_pickaxe_
> The term pickaxe refers to an option to the diffcore
>
> ~~~
> routines that help select changes that add or delete a given text
> string. With the `--pickaxe-all` option, it can be used to view the full
> changeset that introduced or removed, say, a
> particular line of text. See git diff.
>
> ~~~
_plumbing_
> core git的別名(cute name)。
_porcelain_
> Cute name for programs and program suites depending on
>
> ~~~
> core git, presenting a high level access to
> core git. Porcelains expose more of a SCM
> interface than the plumbing.
>
> ~~~
_pull(拉)_
> 拉(pull)一個分支意味著,把它抓取(fetch)下來并合并(merge)進當前的分支。可以參考?[git pull](http://www.kernel.org/pub/software/scm/git/docs/git-pull.html).
_push_
> Pushing a branch means to get the branch's
>
> ~~~
> head ref from a remote repository,
> find out if it is a direct ancestor to the branch's local
> head ref, and in that case, putting all
> objects, which are reachable from the local
> head ref, and which are missing from the remote
> repository, into the remote
> object database, and updating the remote
> head ref. If the remote head is not an
> ancestor to the local head, the push fails.
>
> ~~~
_推_
> ()
_reachable_
> All of the ancestors of a given commit are said to be
>
> ~~~
> "reachable" from that commit. More
> generally, one object is reachable from
> another if we can reach the one from the other by a chain
> that follows tags to whatever they tag,
> commits to their parents or trees, and
> trees to the trees or blobs
> that they contain.
>
> ~~~
>
> _可達的_
_rebase_
> 重新應用(reapply)當前點(branch)和另一個點(base)間的修改;并且根據rebase的結果重置當前分支的 head。 譯者注:這個功能可以修改歷史提交。
_ref(引用)_
> 一個40字節長的SHA1串或是表示某個對象的名字。它們可能存儲在?`$GIT_DIR/refs/`。
_reflog_
> reflog用以表示本地的ref的歷史記錄。從另外一角度也可以說,它能行告訴你這個倉庫最近的第3個版本(revision)是什么,還可以告訴你昨天晚上9點14分時你是在這個倉庫的哪個分支下工作。可以參見:[git reflog](http://www.kernel.org/pub/software/scm/git/docs/git-reflog.html)。
_refspec_
> "refspec"用于描述在抓取和推的過程中,遠程ref和本地ref之間的映射關系。它用冒號連接::,前面也可以加一個加號:“+“。 例如:`git fetch $URL refs/heads/master:refs/heads/origin`?意味著:從$URL抓取主分支的 head 并把它保存到本地的origin分支的head中。`git push $URL refs/heads/master:refs/heads/to-upstream`?意味著:把我本地主分支 head 推到$URL上的 to-upstream分支里。具體可以參見:?[git push](http://www.kernel.org/pub/software/scm/git/docs/git-push.html)。
_repository_
> A collection of refs together with an
>
> ~~~
> object database containing all objects
> which are reachable from the refs, possibly
> accompanied by meta data from one or more porcelains. A
> repository can share an object database with other repositories
> via alternates mechanism.
>
> ~~~
_resolve_
> 在自動合并失敗后,手工修復合并沖突的行為。
_revision(版本)_
> 對象倉庫(object database)保存的文件和目錄在某一特定時間點的狀態;它會被一個提交對象(commit object)所引用。
_rewind_
> 丟棄某一部分開發成果。例如:把head 指向早期的版本。
_SCM_
> 源代碼管理工作。
_SHA1_
> 對象名(object name)的同義詞。
_shallow repository_
> A shallow repository has an incomplete
>
> ~~~
> history some of whose commits have parents cauterized away (in other
> words, git is told to pretend that these commits do not have the
> parents, even though they are recorded in the commit
> object). This is sometimes useful when you are interested only in the
> recent history of a project even though the real history recorded in the
> upstream is much larger. A shallow repository
> is created by giving the `--depth` option to git clone, and
> its history can be later deepened with git fetch.
>
> ~~~
_symref_
> Symbolic reference: instead of containing the SHA1
>
> ~~~
> id itself, it is of the format 'ref: refs/some/thing' and when
> referenced, it recursively dereferences to this reference.
> 'HEAD' is a prime example of a symref. Symbolic
> references are manipulated with the git symbolic-ref
> command.
>
> ~~~
_tag(標簽)_
> 一個ref指向一個標簽或提交對象。與 head 相反,標簽并不會在一次提交操作后改變。標簽(不是標簽對象)存儲在`$GIT_DIR/refs/tags/`。 一個標簽通常是用來標識提交家族鏈(commit ancerstry chain)里的某一點。
_tag object(標簽對象)_
> 一個含有指向其它對象的引用(ref)的對象,對象里包括注釋消息。如果它里面可以含有一個PGP簽名,那么就稱為一個“簽名標簽對象”(signed tag object)。
_topic branch_
> A regular git branch that is used by a developer to
>
> ~~~
> identify a conceptual line of development. Since branches are very easy
> and inexpensive, it is often desirable to have several small branches
> that each contain very well defined concepts or small incremental yet
> related changes.
>
> ~~~
_tracking branch_
> A regular git branch that is used to follow changes from
>
> ~~~
> another repository. A tracking
> branch should not contain direct modifications or have local commits
> made to it. A tracking branch can usually be
> identified as the right-hand-side ref in a Pull:
>
> ~~~
~~~
refspec.
~~~
_追蹤分支_
> 一個用以追蹤(follow)另外一個倉庫的修改的git分支。()
_tree(樹)_
> 可以是一個工作樹(working tree),也可以是一個樹對象(tree object)。
_tree object(樹對象)_
> 包含有一串(list)文件名和模式(mode),并且指向與之相關的二進制對象(blob object)和樹對象(tree object)。一個樹(tree)等價于一個目錄。
_tree-ish(樹名)_
> 一個指向的提交對象(commit object),樹對象(tree object)或是標簽對象(tag object)的引用(ref)。
_unmerged index(未合并索引)_
> 一個索引中包含有未合并的索引條目(index entries)。
_unreachable object(不可達對象)_
> 從任何一個分支、標簽或是其它引用(reference)做為起點都無法到達的一個對象。
_working tree(工作樹)_
> 簽出(checkout)用于編輯的文件目錄樹。 工作樹一般等價于 HEAD 加本地沒有提交的修改。
- 1. 介紹
- 歡迎使用Git
- GIT對象模型
- Git目錄 與 工作目錄
- Git索引
- 2. 第一步
- 安裝Git
- 安裝與初始化
- 3. 基本用法
- 獲得一個Git倉庫
- 正常的工作流程
- 分支與合并@基礎
- 查看歷史 -Git日志
- 比較提交 - Git Diff
- 分布式的工作流程
- Git標簽
- 4. 中級技能
- 忽略某些文件
- rebase
- 交互式rebase
- 交互式添加
- 儲藏
- Git樹名
- 追蹤分支
- 使用Git Grep進行搜索
- Git的撤消操作 - 重置, 簽出 和 撤消
- 維護Git
- 建立一個公共倉庫
- 建立一個私有倉庫
- 5. 高級技能
- 創建新的空分支
- 修改你的歷史
- 高級分支與合并
- 查找問題的利器 - Git Bisect
- 查找問題的利器 - Git Blame
- Git和Email
- 定制Git
- Git Hooks
- 找回丟失的對象
- 子模塊
- 6. Git生態體系
- Git 與之 Windows
- 使用Git進行系統部署
- 與 Subversion 集成
- 從其他代碼管理工具遷移到Git
- 圖形化的Git
- Git倉庫托管
- Git的其它用法
- Git的腳本支持
- Git 與編輯器
- 7. 原理解析
- Git是如何存儲對象的
- 查看Git對象
- Git引用
- Git索引
- 打包文件
- 更底層的Git
- 傳輸協議
- 術語表