我有svn repo并且我在过去的某个地方删除了一个文件,如何从svn历史记录中获取该文件?假设我现在正在使用rev 2000,该文件已于1950年删除。
答案 0 :(得分:2)
如果您只想“获取”该文件,可以执行以下操作:
svn cat -r 1950 file > file
但正如已经指出的那样,这将不会检索任何文件历史记录,并且SVN会将其视为一个全新的文件。
答案 1 :(得分:2)
svnbook有topic关于如何处理这个问题。
它基本归结为:
svn merge -c -revnum
恢复文件。svn copy file@revnum file
答案 2 :(得分:1)
svn log -v
,看看是否可以找到删除该文件的修订版。svn merge
或svn cp
来恢复该文件。我们假设您需要在foo.txt
中恢复trunk/proj/mydir
:
$ svn log -v $REPO/trunk/proj/mydir | less
然后您可以使用/D .*foo.txt
搜索文件的较少输出。您发现该文件已在修订版1235中删除:
如果这是修订1235的唯一内容,或者您决定撤消该修订版中的其他内容,则可以使用svn merge -c
:
$ svn co --depth=immediates $REPO/trunk/proj/mydir # No need to checkout sub directories too
$ cd mydir
$ svn merge -c -1235 . # Undoes the delete
$ svn commit -m "Restored file 'foo.txt' deleted in revision 1235"
有时您只想恢复该文件,而不是该修订版中的所有其他更改。在这种情况下,请使用svn cp
命令。如果您愿意,可以在不办理结账的情况下执行此操作:
$ svn cp -r1234 -m"Restored $foo.txt removed in rev 1235" \
$REPO/trunk/proj/mydir/foo.txt@1234 $REPO/trunk/myproj
或者你可以通过结账来做到这一点:
$ svn co --depth=immediates $REPO/trunk/proj/mydir # No need to checkout sub directories too
$ cd mydir
$ svn cp -r1234 foo.txt@1234 . # Undoes the delete
$ svn commit -m "Restored file 'foo.txt' deleted in revision 1235"
请注意,我使用的是修订版1234而不是1235,因为该文件已在修订版1235中删除,并且在该修订版中不存在。我使用-r
指定我需要1234
的修订版foo.txt
,并在网址末尾指定@1234
以指定文件存在于修订版1234
中存储库目录布局。