[英]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 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.