簡體   English   中英

在git中,commit(s)和revision(s)之間有什么區別

[英]In git, what is the difference between a commit(s) and a revision(s)

有許多git命令,例如git clone --depth 10 <repo> ,它們需要給出修訂數[ git help revisions ]。

提交和修訂之間有什么區別(在git中, 而不是說svn )?

或者在嘗試計算修訂/提交時它是否只顯示復數形式,例如,必須通過走向提交及其父母的DAG(有向無環圖)或其他一些仔細區分來計算修訂?

請參閱git rev-parse的指定修訂 ”:

修訂參數<rev>通常(但不一定)命名提交對象。
它使用所謂的擴展SHA1語法,[並包括]各種方法來拼寫對象名稱。

所以“修訂版”是指你可以用作參數來引用 git中的對象(通常是提交)。

HEAD@{5 minutes ago}是一個修訂版,引用了5分鍾前提交的提交。

gitrevision提到:

[...]某些Git命令(例如git show )也會使用修訂參數來表示除提交之外的其他對象 ,例如blob (“文件”)或 (“文件目錄”)。

例如,以下rev參數不引用提交:

<rev>:<path>, e.g. HEAD:README, :README, master:./README

后綴:后跟路徑命名由冒號前部分命名的樹形對象中給定路徑上的blob或樹。


Git中的“提交”通常指定一個“提交對象 ”(例如,如git commit-tree中所述):

提交封裝:

  • 所有父對象id
  • 作者姓名,電子郵件和日期
  • 提交者姓名和電子郵件以及提交時間。

所以:

  • 一個提交指定一個 git對象(其他是blob,樹,標簽,注釋),
  • 修訂是一種引用git對象的方法。

在你的情況下( git clone )-- --depth <n>

創建一個淺層克隆,其歷史記錄被截斷為指定的修訂數

它適用於在該深度可訪問的所有提交,在DAG中每個路徑最多n修訂。
由於結果可能超過n提交,因此術語修訂版更適用於此處,以強調您不僅僅需要n提交,而是可以訪問最多n修訂引用的任何提交。

但是,在這種情況下,修訂清楚地引用了只有提交(如下圖所示)可達(如你在“ git clone --depth 1 (淺克隆)中提到的更有用嗎? ”)。

問題是“可以從什么地方到達”?

你引用了這個帖子 ,其中包括:

IIRC, - --depth=<n>不是“加深<n> ”,而是“ 確保我從更新的提示中至少<n> ”。
如果你在過去使用淺層克隆方式並且在另一方添加了比<n>更多的提交之后使用--depth獲取淺層克隆hack,那么你很無用(即使它可能是內部一致的)語義,因為你不能如果沒有--depth猜測<n>的正確值應該是沒有實際獲取的。

有趣。 我之前沒有遇到過這種區別,但是從瀏覽文檔和我自己的經驗來看,git中的提交是指向項目歷史中特定時間點的對象(以及它如何到達那里的信息) 。 修訂版是這個的超集,它討論了引用提交或提交范圍的不同方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM