-2

我正在查看 git 资源,发现 Check 正在做一个克隆而不是更轻量级的ls-remote. 我认为有两个原因:

  1. 可以根据元数据和 repo 中更改的文件过滤提交
  2. 因为文档说它应该返回一系列版本,而不仅仅是最新的

第一个很明显,但我不明白第二个的原因。

它在标准输入上给出了配置的源和当前版本,并且必须按时间顺序将新版本的数组打印到标准输出,包括请求的版本(如果它仍然有效)。

但后来它说:

如果您的资源无法确定哪些版本比给定版本更新(例如,如果它是一个被推送的 git 提交),那么应该返回您的资源的当前版本(即新的 HEAD)。

所以我的问题是,为什么资源不能总是只返回一个版本——最新的。即如果源已经移动,甚至没有请求的版本? 哪些功能会丢失?

请注意,此问题与实施资源类型有关:Concourse 如何使用检查、输入和输出脚本的输出?

4

1 回答 1

0

如果您这样做,您的资源将出现一组版本,并且您的get步骤不会返回明确请求的文件版本(返回的版本check被传递给in),这将违反资源类型设计,坦率地说,这是一个不好的做法(为什么你会返回一些因为它更新而没有被请求的东西?如果你需要将资源固定到特定版本怎么办?)

git为什么资源不这样做clone的答案ls-remote是因为您可以将资源配置为仅在某些文件更改时才识别新版本(或者相反,如果有新提交但更改的文件在ignore_paths源的节中配置,check不返回新资源。

所以最大的问题是,你为什么要这么做?易于编程?性能问题?

于 2020-08-09T17:32:32.893 回答