让我们看三种情况:
1. 这个语句很好。“999”是一个peg。这就是所谓的“旧格式”: ``` foo -r999 http://myrepo/foo ```
2. 或者,也可以像这样指定peg(在“新格式”中),并且也很好: ``` http://myrepo/foo@999 foo ```
3. 但是,在“新格式”中存在一个复杂性:`-r999`可以放在前面,这会完全改变它的含义,从而成为“操作版本”的标识。根据SVN Book,实际的peg变成了HEAD(即不再具有确定性): ``` -r999 http://myrepo/foo foo ``` 我认为这种格式可能是一个非常糟糕的想法的原因是:如果在rev 999之后将“bar”重命名为“foo”,那么实际上将检出什么内容呢?被重命名的版本bar@999。这真的有用吗?然后,稍后又发生了另一个重命名,将“baz”命名为“foo”。现在用户将检查baz@999。因此,随着时间的推移,用户将永远无法确定999是否指的是相同的代码。
#3是一个等待引起麻烦的漏洞吗?应该用鲜艳的红旗警告用户避免使用#3的格式吗?或者尽管它不确定性很高,但实际上是有用的吗?这几乎是太容易误解和出错了,因此似乎需要指定最佳实践。
从SVN Book中,如果您真正深入挖掘,它会巧妙地提示用户要小心:
请注意,要小心避免天真地重新定位定义中的-rNNN部分-旧格式使用该修订版本作为peg修订版本,但新格式将其用作操作修订版本(具有peg修订版本HEAD,除非另有说明;请参见“Peg and Operative Revisions”部分,以了解这里区别的完整说明)。
1. 这个语句很好。“999”是一个peg。这就是所谓的“旧格式”: ``` foo -r999 http://myrepo/foo ```
2. 或者,也可以像这样指定peg(在“新格式”中),并且也很好: ``` http://myrepo/foo@999 foo ```
3. 但是,在“新格式”中存在一个复杂性:`-r999`可以放在前面,这会完全改变它的含义,从而成为“操作版本”的标识。根据SVN Book,实际的peg变成了HEAD(即不再具有确定性): ``` -r999 http://myrepo/foo foo ``` 我认为这种格式可能是一个非常糟糕的想法的原因是:如果在rev 999之后将“bar”重命名为“foo”,那么实际上将检出什么内容呢?被重命名的版本bar@999。这真的有用吗?然后,稍后又发生了另一个重命名,将“baz”命名为“foo”。现在用户将检查baz@999。因此,随着时间的推移,用户将永远无法确定999是否指的是相同的代码。
#3是一个等待引起麻烦的漏洞吗?应该用鲜艳的红旗警告用户避免使用#3的格式吗?或者尽管它不确定性很高,但实际上是有用的吗?这几乎是太容易误解和出错了,因此似乎需要指定最佳实践。
从SVN Book中,如果您真正深入挖掘,它会巧妙地提示用户要小心:
请注意,要小心避免天真地重新定位定义中的-rNNN部分-旧格式使用该修订版本作为peg修订版本,但新格式将其用作操作修订版本(具有peg修订版本HEAD,除非另有说明;请参见“Peg and Operative Revisions”部分,以了解这里区别的完整说明)。