如何在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
不会在更一般的情况下,你在哪里
- 有两个要共享和编辑,你不想在同一个文件中共享的编辑 ,
- 有本地变化,你仍然有兴趣保持自己的私人利益 。
@ ErichBSchulz使用git add -p
的build议是非常合理的,在这种情况下更普遍适用。 答案只是缺乏一些细节。 假设你的当前目录是你要制作可共享补丁的目录,你可以这样做:
-
检出原始版本从颠覆到不同的目录(select一个不存在的目录名称,在这里使用子目录
TMP/
)。$ url=$(svn info . | awk '/^URL/ {print $2}') $ svn checkout "$url" TMP
-
使用这个原始的svn checkout作为基础,初始化一个git仓库,忽略.svn目录; 将svn中的所有东西都交给临时的git仓库
$ cd TMP $ git init && echo ".svn/" > .gitignore $ git add -A && git commit $ cd ..
-
将新准备的git存储库元数据复制到您的原始工作目录; 因为不需要原始的颠覆检查目录,你可以摆脱它。 你的工作目录现在是git和subversion版本库:
$ mv TMP/.git . $ rm -rf TMP/
-
您现在可以使用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
-
使用提交,准备一个你想分享的补丁。 为此,您还可以使用
git diff HEAD^..HEAD
或git 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要提交的更改。