我正在编写一个部署 bash 脚本,该脚本会将源代码管理中的最新更改发布到另一台计算机。我是命令行 svn 的新手(已经在开发中使用它多年(,并且是 bash 脚本的新手。
我需要一种方法来仅签出最近修改过的文件。像这样:
svn checkout svn://server/repo/project/trunk -mtime -1d4h
这个想法是,这只会签出过去 28 小时内提交的文件。
- 您无法签出更改,您只能获得存储库某些部分(即"修订版"(的某些状态,其中将包括此修订版中此节点(子目录(中存在的所有文件(并在此修订版之前的任何修订版中添加|修改,包括此修订版(
- Subversion 中的日期格式规范不允许使用"相对日期时间",只允许使用绝对值
- 导出|保存外部存储库所有文件、在修订版|修订版范围内更改的脚本存在,并且可以在 Net 中找到(Subversion 命令行脚本,用于将更改的文件导出为良好的 bash-sample(
上述说明的后果
- 您必须提供正确的 Subversion 样式日期或修订号作为起点
- 具有自由格式规范的相对日期可以使用 bash date 命令 (
-d "28 hours before"
( 轻松构造并存储在变量中,变量可以用作 electrictoolbox 脚本的参数 - 将文件从导出目录部署到最终目标是最终部分(特定于环境的繁重,现在没有建议(
基于此,我找到了更简单的东西来满足我的需求:如何在 Subversion 上保留原始文件 [commit] 时间戳?
我使用--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