恢复原始SVN状态

时间:2013-05-24 01:09:47

标签: svn

svn初学者:

让我们说我从一个svn仓库中撤出并编写了相当多的代码。但是,我只想提交我修改过的一半文件。但是,我不小心在所有这些上使用了svn add。如何在不实际触及修改后的代码的情况下返回上一个svn状态(在添加所有这些文件之前)。

我知道我可以在一半上手动使用svn delete,但我想知道是否有更快的方式来回复。

3 个答案:

答案 0 :(得分:2)

如果你没有提交和使用像TortoiseSVN这样的工具,你可以对你不需要的文件(标记多个)进行简单的还原或“撤消添加”。

enter image description here

答案 1 :(得分:1)

我希望你还没有做出改变。

您可以使用以下命令取消添加文件:

$ svn delete --delete --keep-local $file_name

这将取消添加文件,同时将文件保留在驱动器上。

您还可以使用以下方法撤消所有更改(包括所有添加):

$ svn revert -R .

这将还原所有文件,并且会在您添加的任何文件中取消添加,但不会删除任何内容。这还将还原已存储在存储库中的文件中所做的任何更改。但是,变更列表可以节省一天。

您还可以使用svn cl命令在Subversion中创建更改列表

$ svn cl FOO $file1 $file2 $file3
$ svn cl FOO $file4 $file5

这将创建一个名为FOO的更改列表,其中包含上述五个文件。请注意,您只需提供更改列表名称和新文件即可添加到更改列表。删除文件:

$ svn cl --remove $file4

这将从更改列表$file4中删除FOO

$ svn cl BAR $file1

这会从更改列表$file1中删除FOO并将其放在更改列表BAR上。

现在,这就是所有这一切......

$ svn revert --cl FOO -R .

这将还原所有文件,但 仅包含更改列表FOO 中的文件。未触及所有其他文件。因此,您可以创建要 unadd 的所有文件的更改列表,然后在该更改列表上使用svn revert命令。这将保留您的文件,但同时 unadd

因此,创建一个您想要 unadd 的所有文件的更改列表,然后在该更改列表上执行svn revert

你可以这样做:

 $ svn list | awk '$1 == A' '{print $2}' | tee files_to_unadd_list.txt

这将为您提供添加到Subversion的所有文件的列表,并将其放入列表中。然后,您可以编辑该列表以删除要保留的文件。结果是您要 unadd 的文件列表。

然后你可以像这样处理它:

$ while read file
do
    svn revert --force --keep-local $file
done < files_to_unadd_list.txt

或者,首先创建一个更改列表:

$ while read file
do
    svn cl UNADD $file
done < files_to_unadd_list.txt

然后浏览该列表,验证它,然后:

$ svn delete --cl UNADD -R .

答案 2 :(得分:1)

如果您的更改不包含svn copy或svn move,则撤消所有svn添加并保留更改的最简单方法之一是:

  1. 将您的整个工作副本复制到另一个地方,不包括 .svn目录(让我们称之为wc.new)
  2. 对原始工作副本执行svn还原
  3. 将wc.new复制回原始工作副本并替换所有文件