2

svn初学者在这里:

假设我从一个 svn repo 中提取并编写了相当多的代码。但是,我只想提交我修改过的一半文件。但是,我不小心svn add在所有这些上都使用了。我如何回到之前的 svn 状态(在我添加所有这些文件之前)而不实际接触我修改过的代码。

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

4

3 回答 3

2

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

在此处输入图像描述

于 2013-05-24T05:40:55.060 回答
1

我希望你还没有提交你的更改。

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

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

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

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

$ svn revert -R .

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

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

$ 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 .

这将恢复所有文件,但只恢复 changelist 中的FOO文件。所有其他文件均未触及。因此,您可以创建要取消添加的所有文件的更改列表,然后使用该更改列表上的svn revert命令。这将保留您的文件,但同时取消添加它们。

因此,为您要取消添加的所有文件创建一个更改列表,然后svn revert在该更改列表上执行一个。

你可以这样做:

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

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

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

$ 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 .
于 2013-05-24T02:49:11.507 回答
1

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

  1. 将整个工作副本复制到另一个地方,不包括.svn 目录(我们称之为 wc.new)
  2. 在您的原始工作副本上执行 svn revert
  3. 将 wc.new 复制回原始工作副本并替换所有文件
于 2013-05-24T06:15:27.923 回答