如何在cvs2git / cvs2svn中生成提交时间戳?

时间:2016-10-07 07:24:53

标签: python git timestamp cvs2svn cvs2git

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

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

我想这必须对"时间戳错误纠正做些什么"我发现是一个cvs2svn功能(http://www.mcs.anl.gov/~jacob/cvs2svn/features.html)。也许它与时区有关。

我的测试结果显示,更改集中只有一个文件的所有提交都会因整个小时而异。这支持了我的时区假设"。但它也引出了一个问题,即如何确定具有多个文件的更改集的时间戳。

我尝试查看代码并发现(在Google的帮助下)有一个" COMMIT_THRESHOLD"在cvs2svn_lib的config.py中。我想,它一起用于在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存储库做了一些统计,原则上我的提交时间似乎没问题;但这对我来说还不够。

1 个答案:

答案 0 :(得分:2)

你问两个问题:

  1. 如何为提交触摸多个文件生成时间戳?

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

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

  2. 为什么时间戳有时会偏离整数小时?

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

    git log有一个--date选项,可用于询问日期是否显示在当地时区。

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