2016-03-20 31 views
2

我明白如何使用git標記標記blob,樹或甚至另一個帶註釋的標記。我瞭解使這成爲可能的體系結構和概念設計。爲什麼git標籤blob或樹(或標籤)?

但是,我在思考這個(或「真實工作流程」應用程序)的實際應用時遇到了困難。

在這裏搜索堆棧溢出我只找到一個答案,提到標記非提交對象,與advice not to do so

什麼可能情況下可以將它永遠適當標記非承諾對象?

+1

從技術上講,帶註釋的標記*是標記非提交對象的示例,但我想這不是您的意思。 – hvd

+0

@ hvd,我其實並沒有意識到;感謝您指出!在任何情況下,最終還是要做出承諾,所以我的問題依然存在。 – Wildcard

+2

這不是標準的做法,但似乎足夠合理的以這種方式分享一些小資產(如果您願意的話,可以是帶外的),這些資產不一定屬於工作樹本身。對於官方的git repo,維護者的公共ssh密鑰以這種方式被標記;標籤是訪問它的唯一方式,因爲它不在任何提交的樹中。 – jpaugh

回答

3

標記樹木或斑點可能適用於長時間運行的直接操作對象的實用程序。標記將確保git gc可以安全地並行運行。然後,實用程序將在完成時創建提交時刪除標記。

+0

這應該是沒有必要的。 git gc查看對象上的時間戳以確保它不會刪除新的對象。如果沒有,你可以看到這裏還有一場比賽:gc可以在創建對象之後但在標記之前的一段時間內運行。 –

+0

@EdwardThomson我寫過「長期運行」。您可以將其解釋爲「如果你願意,等待一個離開了一個月的假期的用戶的輸入」。 – hvd

0

是否有任何哪些情況下適合標記非提交對象?

如你所想。我簡而言之應該是避免non-commit標記。

比方說,例如,你有固定的代碼(燙),且通過其一部分更大提交

爲什麼?
因爲它是這樣的承諾,只有後來你發現你只需要一個文件。
現在您要標記此更改的文件(內容),而不標記所有其他內容。

示例2:
你會在代碼試圖找出哪個文件導致的錯誤,以紀念爲單一提交,你可以使用一個標籤或git note但以紀念您將使用tag單個文件。

還有一些其他的例子。


Linux內核庫還具有非指向commit對象的tag - 第一個標記創建指向源代碼的進口的初始樹

+0

Linux內核的例子很好,因爲它是一個真實的例子,但我不明白他們爲什麼不能做一個初始提交和標記。效果不一樣嗎?最終,提交只是一個指向樹的指針,無論如何,(通常)也是其他提交。 – Wildcard

+0

我同意,這就是爲什麼你應該儘量避免它,仍然有**選項**來做到這一點。你也可以選擇在紅燈下開車(而且據我們所知,有些人會這樣做),但這是一種濫用此功能的情況。 – CodeWizard

+0

可以說,你已經在一些導致錯誤的代碼上工作了,然後你也提交了一些修補以及其他一些文件。現在你只需要從提交樹中獲取修復(單個文件)。您可以通過自行標記所需的內容來完成。 – CodeWizard