"unadd"在提交之前将文件提交给svn

Low*_*ain 190 svn

我正在做一个递归的svn add/commit,并且包含了一个没有正确的ignore属性的文件夹.我现在有大约100个已上传的二进制文件版本,但我尚未提交.

在不删除所有文档的情况下,"撤消"此操作的最简单方法是什么?

Jul*_*ain 237

使用 svn revert --recursive folder_name


警告

svn revert本质上是危险的,因为它的全部目的是丢弃数据 - 即你未提交的更改.一旦你恢复,Subversion提供没有办法找回那些未提交的更改.

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html

  • 这个答案是危险的错误 - 它会通过删除您的本地文件副本来取消您的更改.Brian Lacy在下面的回答要好得多. (23认同)
  • 为了扩展这一点 - 没有指定修订版的`revert`撤消了自上次检出以来发生的任何更改,包括为指定文件添加/删除调度更改. (12认同)
  • 大家好,这回答了原来的问题:添加了一个文件或文件夹,然后还原,只返回非版本,不被删除.这正是问题所在.如果你在修改过的文件上使用它,当然它会恢复它们:但这不是问题.这甚至是链接页面上显示的非常具体的用例! (6认同)
  • @JulienLebosquain好的,我猜你和我对这句话的理解不同:*不删除所有文件*.不幸的是,`svn revert`还通过恢复最新的`HEAD`版本来删除工作副本中新添加的*更改*.我删除了我的downvote,但我仍然觉得警告很重要. (2认同)

Bri*_*acy 141

svn rm --keep-local folder_name

注意:在svn 1.5.4中,即使指定了--keep-local,svn rm也会删除未版本控制的文件.有关更多信息,请参见http://svn.haxx.se/users/archive-2009-11/0058.shtml.

  • 这很好知道,因为它允许您简单地撤消"svn add"而不会丢失更改! (9认同)
  • 如果您想要"取消添加"文件,但仍然保留它们,这是更好的答案.在这个命令之后,文件仍然会在那里?状态. (4认同)

bob*_*bah 30

尝试svn revert filename您不需要但尚未提交的每个文件.或者svn revert -R folder对有问题的文件夹执行操作,然后使用正确的忽略配置重新执行操作.

从文档:

 you can undo any scheduling operations:

$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops
Run Code Online (Sandbox Code Playgroud)

  • 没有!恢复是不安全的,因为它会丢失所有本地更改 (4认同)
  • OP 要求的(也是我所期望的)是撤消添加*而不*丢失本地更改的命令。`svn 恢复`。这里的答案都没有提到本地更改将因恢复而丢失的事实。 (4认同)

mud*_*d1e 5

完整流程(Unix svn包):

检查文件不在 SVN 中:

> svn st -u folder 
? folder
Run Code Online (Sandbox Code Playgroud)

添加全部(包括忽略的文件):

> svn add folder
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt
A   folder/folderToIgnore
A   folder/folderToIgnore/fileToIgnore1.txt
A   fileToIgnore2.txt
Run Code Online (Sandbox Code Playgroud)

删除所有 * 忽略 * 文件的“添加”标志:

> cd folder

> svn revert --recursive folderToIgnore
Reverted 'folderToIgnore'
Reverted 'folderToIgnore/fileToIgnore1.txt'


> svn revert fileToIgnore2.txt
Reverted 'fileToIgnore2.txt'
Run Code Online (Sandbox Code Playgroud)

编辑 svn 忽略文件夹

svn propedit svn:ignore .
Run Code Online (Sandbox Code Playgroud)

添加两条单行,内容如下:

folderToIgnore
fileToIgnore2.txt
Run Code Online (Sandbox Code Playgroud)

检查哪些文件将被上传并提交:

> cd ..

> svn st -u
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt


> svn ci -m "Commit message here"
Run Code Online (Sandbox Code Playgroud)