SVN 文件删除和重新创建行为

问题描述 投票:0回答:1

当您在批处理脚本中删除文件并使用 Java 程序重新创建它时,SVN 会将其视为新的、未版本化的文件。因此,当您访问文件的日志时,您只能看到重新创建时的历史记录,而不是原始创建时的历史记录。

但是,父文件夹的日志会跟踪所有更改,包括删除和重新创建其中的文件。这就是为什么您仍然可以在父文件夹的日志中看到文件的原始历史记录。这是预期的行为吗?
我正在使用 svn 1.14

svn tortoisesvn
1个回答
0
投票

是的,这是预期的行为。当文件在 Subversion 中删除并再次添加时,它会被“替换”。它将丢失所有历史记录(毕竟这是一个新文件),但包含的文件夹仍然会知道同名的旧文件。它将被标记为R,用于替换。

另一方面,如果文件从文件系统

删除并在未通知 Subversion 的情况下恢复(即不调用

svn rmsvn 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

的日志看起来像上面的日志。

底线,“删除文件”和“删除文件”是有区别的。替换文件时,它们将丢失所有历史记录。当您打算这样做时使用它。对于大多数用途,只需修改文件即可。

© www.soinside.com 2019 - 2024. All rights reserved.