似乎在使用 svn copy 创建标签时,所有文件都获得了当前时间戳。我想要一个完全相同的副本,包括原始文件的时间戳。这可能吗?
2 回答
您需要打开use-commit-times
配置。这是来自SVN Book的配置片段
使用提交时间
通常,您的工作副本文件具有反映它们最后一次被任何进程触及的时间戳,无论是您自己的编辑器还是某些 svn 子命令。这对于开发软件的人来说通常很方便,因为构建系统通常将时间戳视为决定哪些文件需要重新编译的一种方式。
然而,在其他情况下,有时工作副本文件最好有时间戳,以反映它们在存储库中的最后一次更改。svn export 命令总是将这些“最后提交时间戳”放在它生成的树上。通过将此配置变量设置为 yes,svn checkout、svn update、svn switch 和 svn revert 命令还将在它们接触的文件上设置最后提交时间戳。
你是如何创建标签的?您svn cp
是在某处签出的工作目录上使用过,还是使用了svn copy
命令的 URL 形式?要创建标签和分支,您应该使用 URL 表单:
$ svn cp --parents -r$rev \
-m"Creating tag 4.10 for project from Revision $rev" \
http://repo/svn/trunk/proj@$rev http://repo/svn/tags/4.10/proj
注意我-m
用来设置提交消息,因为副本是在服务器上完成并立即提交的。如果我没有包括这个,SVN_EDITOR
或者EDITOR
设置了,你会被要求提供一个提交信息。
注意我也使用--parent
并且我使用-r
和修订固定(@$rev
最后)。这确保我标记了我想要的修订。--parents
如果缺少任何父目录,它将自动创建它们。拥有它永远不会伤害。
不涉及工作目录。一切都直接在服务器上完成。没有物理文件被复制。
如果这样做,标签中文件的时间戳与它们在主干或分支上的时间戳相同。这将是他们最后一次提交的时间戳。如果您svn cp
对本地文件执行此操作,则复制的文件将具有您执行复制时的时间戳。更不用说它需要更长的时间。