繁体   English   中英

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

[英]How are the commit timestamps generated in cvs2git/cvs2svn?

我正在通过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发现1个变更集有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. 如何为涉及多个文件的提交生成时间戳?

    对于修改文件的提交,cvs2svn / cvs2git从构成提交的文件级提交中获取最新的时间戳。 但是,如果该时间戳记早于上一次提交的时间戳记,或者比转换时间晚了一天以上,那么它将选择一个比上一次提交的时间戳记晚一秒的时间戳记。

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

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

    CVS在UTC中记录时间戳而不记录时区,而cvs2svn / cvs2git照原样使用这些时间戳,而无需尝试猜测时区。 因此,时间戳记应该正确,但以UTC表示。

    git log具有--date选项,可用于要求在本地时区中显示日期。

cvs2svn项目文件doc/design-notes.txt详细介绍了cvs2svn / cvs2git使用的算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM