在SVN存储库中存储文件时间戳

时间:2014-02-24 14:30:08

标签: svn tortoisesvn subversion-edge

首先:我知道SVN不存储实际的文件时间戳,而只存储最后一次提交时间。

第二:当正常签出文件时,文件的时间戳设置为实际签出的时间。这可以通过在subversion配置文件中使用use-commit-times = yes和Tortoise SVN中的Set file dates to the 'last commit time'等选项来影响,也可以使用命令svn checkout --config-option config:miscellany:use-commit-times=yes

但我想实际存储正在检入的文件的时间戳,并且能够将其再次应用于正在检出的文件!

对于源文件,这不是什么大问题,但我们也提交了二进制第三方库,我们真的希望保留实际的文件时间戳。

用户'oefe'在此帖子中发布,可能,但从未说明如何:https://stackoverflow.com/a/2171973/2339326

2 个答案:

答案 0 :(得分:2)

使用Subversion,您可以通过调整sv​​n:data revision属性来修改提交的时间戳。现在可以在提交期间完成此操作。

不幸的是,可以使用的基本挂钩是在服务器而不是客户端上运行的。但是,Tortoise确实提供了client side hooks。您可以使用其中一个将提交时间戳设置为文件时间戳,或者(可能更好)设置具有该日期的特殊属性。

你必须要小心,因为这需要所有用户使用TortoiseSVN作为他们的客户端,并在他们的机器上配置这些钩子。

另一种可能性是不首先将这些第三方库存储在Subversion中。关于在Subversion中放置大型二进制文件是否是一个好主意,有一个长期存在的争论。你没有说这些第三部分库是什么。如果你是一个Java开发商店,这些是第三方罐子。在这种情况下,使用Maven或将Ivy添加到您当前的构建系统中,并使用像Nexus或Artifactory这样的jar存储库来存储这些jar。

如果这是.NET环境,请查看NuGet。如果这是一个C ++构建,您可以将库存储在发布服务器上,并且作为构建过程的一部分,让存储库将jar下载到您的工作目录。有些地方甚至使用Maven来构建这部分。

您必须小心构建过程中的时间戳。时间戳用于让构建知道是否需要更新构建的特定部分。使用时间戳可能导致构建不重建需要重建的组件。

答案 1 :(得分:1)

oefe的回答是正确的。您可以执行此操作的唯一方法是将时间戳存储为每个版本化项的属性。要获得您正在寻找的完整行为,您需要编写自己的客户端来处理设置/更新属性以及摆弄本地文件系统时间戳。或者在SVN客户端周围写一个包装器来做同样的事情。

但是必须确保使用您的存储库的每个人都使用此自定义客户端/包装器。

对于自定义的第三方二进制文件,时间戳应该不如第三方为绝大多数工作流程发布的那些库的版本号重要。