如何从svn存储库中获取删除的文件



我有svn的repo,我已经删除了一个文件在过去的某个地方,我怎么能从svn的历史获取该文件?假设我现在的版本是2000,文件是在1950年删除的

svnbook有一个关于如何处理这个问题的主题。

基本上可以归结为:

  • 如果在提交中只删除了文件,可以使用svn merge -c -revnum来恢复文件。
  • 如果在提交中有其他更改,您可以从删除之前的版本复制文件——svn copy file@revnum file

如果你只想"获取"文件,你可以这样做:

svn cat -r 1950 file > file

,但是正如已经指出的,这不会检索任何文件历史记录,并且会被SVN视为一个全新的文件。

  1. 首先,运行svn log -v,看看是否可以找到删除文件的版本。
  2. 一旦你找到了文件被删除的地方,你可以使用svn mergesvn cp来恢复文件。

假设您需要在trunk/proj/mydir中恢复foo.txt:

$ 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命令。如果您愿意,您可以在不执行checkout的情况下执行此操作:

$ svn cp -r1234 -m"Restored $foo.txt removed in rev 1235" 
       $REPO/trunk/proj/mydir/foo.txt@1234 $REPO/trunk/myproj

或者你可以通过checkout来完成:

$ 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来指定我想要foo.txt1234版本,并在URL的末尾指定@1234,以指定该文件存在于存储库目录布局的1234版本中。

相关内容

  • 没有找到相关文章

最新更新