Nel*_*mel 5 version-control mercurial
关于Mercurial的快速提问.假设我的同事和我都有最新的主干副本.我们都做出了改变,然后我们都推动/拉动彼此之间的变化.
我猜测Mercurial根据提交日期按顺序保留更改(因为没有递增修订,只有GUID).那么,如果我的计算机的日期落后一天,并且在我的同事之后花了半天,会发生什么.我的变化会在我同事的前半天出现吗?
@Martijn有正确的答案,但它似乎没有点击.如果这让任何事情变得清晰,请选择
Mercurial和其他DVC完全基于DAG(有向无环图)进行所有历史跟踪,这意味着:
在您提交之前,您可以通过键入来查看变更集的父级是什么hg parents,一旦您提交,您可以在中查看hg log.
在您的示例中,如果您已拉出同事的变更集并更新了工作目录以反映它们(hg pull ; hg update),那么他或她的变更集将成为变更集的父级.如果你没有提取/更新以反映他或她的变更集,那么你的两个变更集将拥有相同的父级 - 他们将成为兄弟姐妹 - 当它们合并时,它们都不会以任何方式优先于另一个.
当你做一个排序hg log由该变更在到达终点的顺序确定你的本地仓库,并可以从回购取决于他们已经从第一拉向不同的回购-这就是为什么你不能使用所示的整数在交叉回购操作的变更集旁边 - 只有散列是全局的.
简而言之,日期从未在正常操作中查阅,并且纯粹是元数据,与作者或提交描述无关.
实际上,您的更改集是带时间戳的(内部存储为自UNIX-epoch以来的秒数和时区偏移量),并且在显示更改集时,它们按时间戳排序,并且您的更改集将显示在错误的位置,因为它们的时间戳是不正确.请参阅https://www.mercurial-scm.org/wiki/ChangeSet
尽管如此,这并不是一个问题.时间戳与您的更改与您的同事的更改无关.此处仅使用变更集ID,并且在使用合并共同祖先时.它将跟随您的变更集的图表,查找您的同事也拥有的变更集ID,然后将您和他的变更合并到前面.请参阅https://www.mercurial-scm.org/wiki/Merge
因此,合并不会受到影响,只会显示更改集,其中您的更改集将被排序到错误的位置.它会让你和你的同事感到困惑,但你的改变本身是安全的.