0

我正在通过 Cygwin 使用 cvs2git 将一个非常古老且巨大的 CVS 存储库转换为 Git。它工作正常,我开始测试新的存储库。我没有发现更大的特点。但我想知道如何确定提交/更改集的时间戳。

到目前为止,我确定某些 CVS 版本之间的时间戳相差 1 或 2 小时加上 x,其中 x 是从几秒或几分钟(大多数情况下)到两个 15 分钟的时间。许多时间戳仅相差整小时 (x=0)。

我想这与我发现是 cvs2svn 功能( http://www.mcs.anl.gov/~jacob/cvs2svn/features.html)的“时间戳纠错”有关。也许它也与时区有关。

我的测试结果表明,更改集中只有一个文件的所有提交都相差整小时。这支持了我的“时区假设”。但这也让我想到了如何确定具有多个文件的更改集的时间戳的问题。

我试图通过代码并发现(在 Google 的帮助下)在 cvs2svn_lib 的 config.py 中有一个“COMMIT_THRESHOLD”。我猜它用于在 CVS 中对基于文件的提交进行模糊测试。虽然代码看起来写得很好,但我对 CVS、SVN 和 Git 修订存储缺乏技术理解,这让我很难理解。

因此,如果有人能回答以下问题,我将不胜感激:

  • cvs2svn/cvs2git 如何确定具有多个文件的变更集的提交时间戳?
  • “时间戳纠错”cvs2svn/cvs2git 是如何工作的?(对我来说,功能背景比技术更重要。)

亲切的问候

编辑:

由于有人认为这个问题“太宽泛”,我恐怕我的观点不够清楚。所以我想举一个具体的(虽然是虚构的)例子:

cvs2git 为一个更改集找到 3 个文件更改。他们在同一天承诺(假设是 2016 年 2 月 30 日)。但他们的时代不同:

  • 文件 1:12:34:56
  • 文件 2:12:35:38
  • 文件 3:12:36:09

如果只是文件 1,我会认为 cvs2git 使用 2016-02-30T12:34:56 作为 Git 提交的时间戳。但是当所有 3 个文件的提交都属于一个更改集时,选择了哪个时间戳?

与此相关的是,当我的存储库被转换时,时间似乎也恰好调整了 1 或 2 小时。当更改集中只有一个文件时也会发生这种情况。我想这是某种时区调整。所以我想知道,为什么“时间戳错误更正”改变了我的时间戳,以检查我是否接受这些更改。我对转换后的 Git 存储库进行了一些统计,原则上提交时间对我来说似乎还可以;但这对我来说还不够。

4

1 回答 1

2

你问两个问题:

  1. 如何为涉及多个文件的提交生成时间戳?

    对于修改文件的提交,cvs2svn/cvs2git 从构成该提交的文件级提交中获取最新的时间戳。但是,如果该时间戳早于上一次提交的时间戳或转换时间后一天以上,则它会选择上一次提交后一秒的时间戳。

    对于涉及分支或标记的提交(CVS 根本不记录时间戳),时间戳设置为前一次提交的时间戳后一秒。

  2. 为什么时间戳有时会相差整数小时?

    CVS 以 UTC 记录时间戳而不记录时区,而 cvs2svn/cvs2git 按原样使用这些时间戳而不试图猜测时区。所以时间戳应该是正确的,但以 UTC 表示。

    git log有一个--date选项可用于要求日期以当地时区显示。

cvs2svn 项目文件doc/design-notes.txt非常详细地记录了 cvs2svn/cvs2git 使用的算法。

于 2016-10-13T06:32:38.733 回答