当您在批处理脚本中删除文件并使用 Java 程序重新创建它时,SVN 会将其视为新的、未版本化的文件。因此,当您访问文件的日志时,您只能看到重新创建时的历史记录,而不是原始创建时的历史记录。
但是,父文件夹的日志会跟踪所有更改,包括删除和重新创建其中的文件。这就是为什么您仍然可以在父文件夹的日志中看到文件的原始历史记录。这是预期的行为吗?
我正在使用 svn 1.14
是的,这是预期的行为。当文件在 Subversion 中删除并再次添加时,它会被“替换”。它将丢失所有历史记录(毕竟这是一个新文件),但包含的文件夹仍然会知道同名的旧文件。它将被标记为R
,用于替换。
svn rm
和 svn add
或相应的 TortoiseSVN 操作),则 Subversion 会认为该文件是“已修改”。 它将标有
M
。没有迹象表明它曾经失踪过。就好像有人更改了文件一样。引用红豆书关于状态
的章节:
'M' 项目已修改。 'R'
您的工作副本中的项目已被替换。这意味着计划删除该文件,然后计划在其位置添加一个同名的新文件。创建为空并已提交。
我编写了一个简单的批处理文件,并排说明了这两种情况。它假设两个文件replace.txt
和modify.txt
svn rm replace.txt
echo "this line emulates the Java program" > replace.txt
svn add replace.txt
del modify.txt
echo "this line emulates the Java program" > modify.txt
svn commit -m"Update by batch file"
注意
replace.txt
如何经历svn rm
和svn add
,而
modify.txt
刚刚被删除。最后,两个文件都
svn commit
ted。
这就是它在
svn update
中的显示方式(在
svn log -l2 -v
之后):
------------------------------------------------------------------------
r13 | me | 2024-02-02 20:59:09 +0100 (Fri, 02 Feb 2024) | 1 line
Changed paths:
M /foo/modify.txt
R /foo/replace.txt
Update by batch file
------------------------------------------------------------------------
r12 | me | 2024-02-02 20:59:03 +0100 (Fri, 02 Feb 2024) | 1 line
Changed paths:
A /foo/modify.txt
A /foo/replace.txt
Create two files for demo
------------------------------------------------------------------------
注意
R
和 M
标记。
我不会重复各个文件的日志,但
replace.txt
只会有 r13 的条目,而
modify.txt
的日志看起来像上面的日志。
底线,“删除文件”和“删除文件”是有区别的。替换文件时,它们将丢失所有历史记录。当您打算这样做时使用它。对于大多数用途,只需修改文件即可。