1

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

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

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

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

用户“oefe”在此线程中发布,这是可能的,但从未展示过如何:https ://stackoverflow.com/a/2171973/2339326

4

2 回答 2

2

使用 Subversion,您可以通过调整 svn:data 修订属性来修改提交的时间戳。这现在可以在提交本身期间完成。

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

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

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

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

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

于 2014-02-24T14:53:42.237 回答
1

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

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

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

于 2014-02-24T14:34:27.197 回答