【发布时间】:2016-10-07 07:24:52
【问题描述】:
我正在通过 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 存储库进行了一些统计,原则上提交时间对我来说似乎还可以;但这对我来说还不够。
【问题讨论】:
-
我看到有人投票决定关闭它,因为它“太宽泛”(这可能是真的)。我不知道 cvs2(git/svn) 的内部细节,也无法真正回答,但值得一提的是,CVS 是一个面向文件的集中式服务器系统,而 SVN 和 Git 是面向提交的(并且是集中式的)并分别分发)。文件方向意味着做好转换工作需要将单个文件修订(“cvs ci”实例)关联到一个提交中,这需要一些时间戳灵活性。
-
感谢您的评论。我添加了一个例子来说明我的意思。顺便说一句:我知道 CVS 和 Git 之间的主要区别,尤其是关于每个文件和每个提交的原则。这就是我想切换到 Git 的原因。不过,我不知道这些功能是如何在 CVS 或 Git 或 cvs2git 中实现的。对我来说,这是功能理解和技术理解之间的区别。也许它看起来有点像我不明白 CVS 和 Git 是如何工作的,因为英语不是我的第一语言。
-
我 认为 CVS 以 UTC 格式存储时间戳。当您说 git 时间戳关闭 1-2 小时时,那也是 UTC,所以错误是绝对的,还是 git 在时区显示时间? (你的问题似乎措辞和研究得很好,所以我不想在这里侮辱/惹恼你,但我只是想检查一下。)当一个 git 提交是由多个 cvs 提交组成时,选择了 3 个时间戳中的哪一个:有关系吗?我知道,我知道,我也是一名精确的工程师,我想知道它是如何工作的,但如果它真的不会影响任何事情,那么最简单的方法就是知道它在做什么是合理的
-
感谢您的评论,莫特:我不觉得受到任何侮辱。 :-) 在您的评论和 mhaggers 回答之后,我检查了时区;他们似乎是原因。 (请参阅我对 mhaggers 回答的评论。)关于细微差别:我只是想确保转换正常工作;特别是因为我正在转换 CVSNT 存储库。
标签: python git timestamp cvs2svn cvs2git