如何在SVN结帐中放弃本地更改?

我想提交一个开放源代码项目的差异审查。

我得到了代码使用SVN(从terminal,Ubuntu)。 我在几个文件中做了小的编辑。 现在只有一个我想提交的更改。 其余的我所做的更改基本上是debugging,不再需要。

我使用svn di > ~/os/firstdiff.diff生成了diff
除此之外,我还没有使用任何其他的SVN命令,除了svn update之外。

所以我的问题,如何放弃我的本地更改?

有没有SVN的方式来做到这一点? 如果没有,我将不得不去每个文件,并删除我所有的编辑。 然后我会产生一个新的差异,并提交它。

只需使用svn revert命令,例如:

 svn revert some_file.php 

这是(和其他svn命令一样)在svnbook资源或手册页,甚至是svn help命令中都有详细logging。

您需要使用svn revert命令恢复所有更改

  • 将更改还原为文件: svn revert foo.c
  • 恢复文件的整个目录: svn revert --recursive .

要放弃一个特定文件中的本地更改:

 $ svn revert example_directory/example_file.txt 

放弃一个特定文件夹中的本地更改:

 $ svn revert -R example_directory/ 

简单的svn revert就足够了原始的海报。 然而,简单的svn revert不会在更一般的情况下,你在哪里

  1. 有两个要共享和编辑,你不想同一个文件中共享的编辑
  2. 本地变化,你仍然有兴趣保持自己的私人利益

@ ErichBSchulz使用git add -p的build议是非常合理的,在这种情况下更普遍适用。 答案只是缺乏一些细节。 假设你的当前目录是你要制作可共享补丁的目录,你可以这样做:

  1. 检出原始版本从颠覆到不同的目录(select一个不存在的目录名称,在这里使用子目录TMP/ )。

     $ url=$(svn info . | awk '/^URL/ {print $2}') $ svn checkout "$url" TMP 
  2. 使用这个原始的svn checkout作为基础,初始化一个git仓库,忽略.svn目录; 将svn中的所有东西都交给临时的git仓库

     $ cd TMP $ git init && echo ".svn/" > .gitignore $ git add -A && git commit $ cd .. 
  3. 将新准备的git存储库元数据复制到您的原始工作目录; 因为不需要原始的颠覆检查目录,你可以摆脱它。 你的工作目录现在是git和subversion版本库:

     $ mv TMP/.git . $ rm -rf TMP/ 
  4. 您现在可以使用function强大且方便的git add -p交互式地select您想要共享的内容,并将它们提交到您的git存储库。 如果你需要添加文件到提交,也可以在git commit之前git add <file-to-add>

     $ git add -p <interactively select (and edit) the chunks you want to share> $ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add} $ git commit 
  5. 使用提交,准备一个你想分享的补丁。 为此,您还可以使用git diff HEAD^..HEADgit format-patch (后者可用于直接准备包含修补程序或多个修补程序的电子邮件):

     $ git show -p HEAD > my-mighty-patch.patch 

要摆脱git元数据,只需要执行rm -rf .git/ 。 如果您打算继续使用原始工作目录进行攻击,则可以继续使用git来pipe理本地更改。 在这种情况下,你可能会从学习如何使用git svn的投资中受益。

注意:如果你熟悉git这是一个相当简单的事情来凑合。 否则这看起来可能有点混乱。 你可以通过编写一个脚本来完成这个方法,以实现svn的“交互式提交”或者“交互式补丁创build”,这可以在不了解git的情况下使用。

你可以使用

  svn diff important/file1.c important/file2.c > $HOME/os/firstdiff.diff 

在发布你的差异时,不要忘记告诉你的差异。

正如其他人回答,你也可以使用svn revert仔细svn revert 。 这取决于你是否想保留你的未来工作的本地变化或不…

转到该存储库的根目录并运行以下命令

 svn revert --depth=infinity . 

您可以在要放置的文件上使用commit命令,并使用svn revert命令放弃剩余的本地更改

使用git!

 git add -p 

为您提供交互式机会来select要提交的更改。