我明白如何使用git标记标记blob,树或甚至另一个带注释的标记。我了解使这成为可能的体系结构和概念设计。为什么git标签blob或树(或标签)?
但是,我在思考这个(或“真实工作流程”应用程序)的实际应用时遇到了困难。
在这里搜索堆栈溢出我只找到一个答案,提到标记非提交对象,与advice not to do so。
在什么可能情况下可以将它永远适当标记非承诺对象?
我明白如何使用git标记标记blob,树或甚至另一个带注释的标记。我了解使这成为可能的体系结构和概念设计。为什么git标签blob或树(或标签)?
但是,我在思考这个(或“真实工作流程”应用程序)的实际应用时遇到了困难。
在这里搜索堆栈溢出我只找到一个答案,提到标记非提交对象,与advice not to do so。
在什么可能情况下可以将它永远适当标记非承诺对象?
标记树木或斑点可能适用于长时间运行的直接操作对象的实用程序。标记将确保git gc
可以安全地并行运行。然后,实用程序将在完成时创建提交时删除标记。
这应该是没有必要的。 git gc查看对象上的时间戳以确保它不会删除新的对象。如果没有,你可以看到这里还有一场比赛:gc可以在创建对象之后但在标记之前的一段时间内运行。 –
@EdwardThomson我写过“长期运行”。您可以将其解释为“如果你愿意,等待一个离开了一个月的假期的用户的输入”。 – hvd
是否有任何哪些情况下适合标记非提交对象?
如你所想。我简而言之应该是避免non-commit
标记。
比方说,例如,你有固定的代码(烫),且通过其一部分更大提交
为什么?
因为它是这样的承诺,只有后来你发现你只需要一个文件。
现在您要标记此更改的文件(内容),而不标记所有其他内容。
示例2:
你会在代码试图找出哪个文件导致的错误,以纪念为单一提交,你可以使用一个标签或git note
但以纪念您将使用tag
单个文件。
还有一些其他的例子。
Linux内核库还具有非指向commit对象的tag - 第一个标记创建指向源代码的进口的初始树
Linux内核的例子很好,因为它是一个真实的例子,但我不明白他们为什么不能做一个初始提交和标记。效果不一样吗?最终,提交只是一个指向树的指针,无论如何,(通常)也是其他提交。 – Wildcard
我同意,这就是为什么你应该尽量避免它,仍然有**选项**来做到这一点。你也可以选择在红灯下开车(而且据我们所知,有些人会这样做),但这是一种滥用此功能的情况。 – CodeWizard
可以说,你已经在一些导致错误的代码上工作了,然后你也提交了一些修补以及其他一些文件。现在你只需要从提交树中获取修复(单个文件)。您可以通过自行标记所需的内容来完成。 – CodeWizard
从技术上讲,带注释的标记*是标记非提交对象的示例,但我想这不是您的意思。 – hvd
@ hvd,我其实并没有意识到;感谢您指出!在任何情况下,最终还是要做出承诺,所以我的问题依然存在。 – Wildcard
这不是标准的做法,但似乎足够合理的以这种方式分享一些小资产(如果您愿意的话,可以是带外的),这些资产不一定属于工作树本身。对于官方的git repo,维护者的公共ssh密钥以这种方式被标记;标签是访问它的唯一方式,因为它不在任何提交的树中。 – jpaugh