已在给定时间段内提交的SVN签出文件

时间:2014-03-29 19:26:05

标签: bash svn datetime timestamp

我正在编写一个部署bash脚本,它将源控件中的最新更改发布到另一台计算机。我是命令行中的新手(已经在开发中使用了多年)和bash脚本的新手。

我需要一种方法来检查最近修改过的文件。像这样:

svn checkout svn://server/repo/project/trunk -mtime -1d4h

这样做的想法只会检查过去28小时内提交的文件。

2 个答案:

答案 0 :(得分:1)

  1. 您无法结帐更改,您只能获得存储库某些部分的某些状态(即“修订版”),其中包含存在于此中的所有文件本修订中的node(子目录)(并在此修订版之前的任何修订版中添加|修改包括
  2. Date format specification in Subversion不允许“相对日期时间”,只允许绝对值
  3. 脚本,导出存储库外的所有文件,在修订版本范围内更改,存在并且可以在Net中找到(Subversion Command Line Script to export changed files作为良好的bash样本)
  4. 上述说明的后果

    • 您必须为起点提供正确的Subversion样式日期或修订号
    • 使用bash date command-d "28 hours before")和stored in variable可以轻松构建具有自由格式规范的相对日期,可以将其用作electrictoolbox脚本的参数
    • 从export-directory到最终目的地的文件部署是最后一部分(特定环境特定,现在没有建议)

答案 1 :(得分:0)

基于此,我找到了更简单的方法来满足我的需求: How can I keep the original file [commit] timestamp on Subversion?

我使用--config-option config:miscellany:use-commit-times=yes签出或更新项目的工作副本,该副本设置文件系统上的时间戳等于上次结帐时间。然后我使用标准的find命令。例如:

#!/bin/bash

function listfn {

   while read file; do

      if [[ !( $file =~ ^.*\.svn.*$ ) ]]; then
          echo $file
      fi

   done

}


svn checkout --config-option config:miscellany:use-commit-times=yes svn://server/repo/project/trunk project-fordeploy

find project-fordeploy -mtime -1d4h | listfn