2014-02-24 46 views
0

第一:我知道SVN不存储实际的文件时间戳,但只存储最后一次提交时间。在SVN仓库中存储文件时间戳

第二:通常检出文件时,文件的时间戳被设置为实际检出的时间。这可以通过使用像在颠覆配置文件use-commit-times = yesSet file dates to the 'last commit time'选项乌龟SVN或使用命令svn checkout --config-option config:miscellany:use-commit-times=yes

的影响,但我想实际存储在被检查的文件的时间戳,并能够运用它的该文件正在检查出来!

对于源文件,这不是什么大不了的事,但我们也提交了二进制第三方库,为此我们确实想保留实际的文件时间戳。

用户'oefe'张贴在这个线程,这是可能的,但从未表现如何:https://stackoverflow.com/a/2171973/2339326

回答

1

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

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

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

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

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

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

1

oefe的答案是正确的。唯一可以做到这一点的方法是将时间戳存储为每个版本化项目的属性。为了获得所需的完整行为,您需要编写自己的客户端来处理设置/更新属性和摆弄本地文件系统时间戳。或者在SVN客户端写一个包装来做同样的事情。

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

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