2016-03-20 34 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