【问题标题】:Store file timestamp in SVN repository将文件时间戳存储在 SVN 存储库中
【发布时间】:2014-02-24 14:30:08
【问题描述】:

首先:我知道 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

【问题讨论】:

    标签: svn tortoisesvn subversion-edge


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-15
        • 2015-09-25
        • 2010-10-16
        • 1970-01-01
        相关资源
        最近更新 更多