svn初学者在这里:
假设我从一个 svn repo 中提取并编写了相当多的代码。但是,我只想提交我修改过的一半文件。但是,我不小心svn add
在所有这些上都使用了。我如何回到之前的 svn 状态(在我添加所有这些文件之前)而不实际接触我修改过的代码。
我知道我可以手动使用 svn delete 一半,但我想知道是否有更快的方法来恢复。
svn初学者在这里:
假设我从一个 svn repo 中提取并编写了相当多的代码。但是,我只想提交我修改过的一半文件。但是,我不小心svn add
在所有这些上都使用了。我如何回到之前的 svn 状态(在我添加所有这些文件之前)而不实际接触我修改过的代码。
我知道我可以手动使用 svn delete 一半,但我想知道是否有更快的方法来恢复。
如果您还没有提交并使用 TortoiseSVN 之类的工具,您可以对不需要的文件(标记多个)进行简单的还原或“撤消添加”。
我希望你还没有提交你的更改。
您可以使用以下命令取消添加文件:
$ 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 .
如果您的更改不包含 svn copy 或 svn move,撤消所有 svn add 并保留更改的最简单方法之一是: