如何删除文件夹的Subversion控件?


259

我有一个文件夹,c:\websites\test它包含从不存在的存储库中检出的文件夹和文件。如何使Subversion停止跟踪该文件夹以及任何子文件夹和文件?

我知道我可以简单地删除.svn文件夹,但是在许多层中都有很多子文件夹。


1
如果您使用的是TortioseSVN,我写了一篇博客文章,展示了最快的方法。我的帖子有带图片的分步说明。该帖子位于http://www.ecofic.com/about/blog/disconnecting-folder-from-svn
乍得·坎贝尔

请参阅我的回答,这对很多人有帮助。stackoverflow.com/questions/4889619/...
阿吉特Vaze

Answers:


258

另外,如果您使用的是TortoiseSVN,只需将其导出到当前工作副本位置,它将删除.svn文件夹和文件。

http://tortoisesvn.net/docs/release/TortoiseSVN_zh/tsvn-dug-export.html#tsvn-dug-export-unversion

更新了Subversion 1.7的答案:
在Subversion 1.7中,对工作副本进行了广泛的修订。在工作副本的底部只有一个.svn文件夹。如果使用1.7,则只需删除.svn文件夹及其内容是一个简单的解决方案(无论使用TortoiseSVN还是命令行工具)。


8
链接现在是404。新链接:tortoisesvn.net/docs/release/TortoiseSVN_en/……current-over-current似乎只是一种特殊情况,如果您说还保留未版本控制的文件,则仅删除.svn文件。
lilbyrdie 2011年

成功删除以正常恢复文件夹图标后,重新启动svn服务器,仅此
而已

该服务器与Tortoise文件夹图标无关。但是,如果他们不更新,则可以尝试终止TSVNCache进程。它应该自动重启。
crashmstr 2012年

1
就我而言,我还删除了git文件夹以及.svn文件夹
Aftab Ahmed Kalhoro 18'7 /


119

尝试svn export

您应该能够执行以下操作:

svn export /path/to/old/working/copy /path/to/plain/code

然后只需删除旧的工作副本。

TortoiseSVN还具有导出功能,其行为方式相同。


4
感谢您提供适用于命令行的答案。:)非常适合使用终端的我们这些人。
epochwolf,2009年

16
如果我理解正确,此命令将仅导出当前处于Subversion控制之下的文件。因此,如果尚未将某些文件或文件夹添加到Subversion或从Subversion控件中删除,则您将在导出中丢失这些文件...
Chris

@克里斯,是的,你是对的。这只会导出版本化文件。这对于导出代码,保留派生的工件等非常有用,但是它可能不是适合每个工作的工具。
2011年

4
值得一提的是,如果SVN服务器已不复存在,那么此操作仍然有效;如果您尝试使用VisualSVN或Tortoise SVN导出,则似乎试图与服务器联系,但是上面的命令行版本对我有用,而SVN服务器仍未运行。
戴夫

我收到一个错误:svn: E000002: Can't stat '/.classpath': No such file or directory
IgorGanapolsky '16

32

如果您正在运行Windows,则可以在该文件夹中进行搜索,然后.svn列出所有内容。按Ctrl+ A将选择所有这些,按Delete将删除所有“讨厌的” Subversion内容。


确实令人讨厌;-)我只需要清理它,然后将其放回到新的存储库中。
Brian Boatright

2
这也是删除最讨厌的首页扩展文件夹的绝佳方法!
Brian Boatright

下载并使用Everything Search实用程序以极快的速度查找和删除.svn文件夹:)voidtools.com仅Windows!
end64 2013年


21

我发现您甚至不需要复制到临时位置。你可以做一个

svn export --force .

.svn文件将被原位删除其他文件保持原样。非常方便,不容易混乱。


4
我不知道它是什么,但是由于某种原因它对我不起作用。
白羊七世

1
此命令仅适用于工作副本,而不适用于其中的文件夹。也许是相同的变体...?

2
如果Subversion的安装版本为1.7,并且存储库为1.6,则此方法将不起作用。但是,可以在导出之前运行“ svn升级”,它将起作用。
彼得·莫滕森

11

在Linux中没有子外壳删除.svn文件夹:

find . -name .svn -exec rm -r -f {} +

rm = remove
-r = recursive (folders)
-f = force, avoids a lot of "a your sure you want to delete file XY".

8

这些回答都不能令人满意。我使用的是Subversion 1.8,我有一个工作副本,.svn在第一个文件夹root下只有一个文件夹。但是,我想从工作副本中删除一些分支。

无论我做什么,只要我运行“更新”,它都会还原这些文件并将它们全部恢复。我不想从存储库中删除它们,而只是从我的计算机中删除它们-但我需要保持其余的工作副本不变(因此不能仅删除.svn文件夹)。

解? svn update --set-depth exclude <dir>

这是排除特定目录的客户端“更新”。可以在svnbook.com的手册中找到它。简而言之,它描述为:

从Subversion 1.6开始,您可以采用其他方法。首先,完整检查目录。然后在您不关心的一个子目录上运行svn update --set-depth exclude。

对于TortoiseSVN,还可以通过右键单击不需要的文件夹,单击Update to revision...,然后将“ Update Depth”设置为来执行相同的操作Exclude,如以下屏幕快照所示:

在此处输入图片说明


但是,您无法删除工作副本根文件夹。
JaBe

8

对我来说效果很好:

find directory_to_delete/ -type d -name '*.svn' | xargs rm -rf

这是一个简单的解决方案,但是却很有吸引力。
IgorGanapolsky '16

@IgorGanapolsky我很高兴。我的解决方案对您有帮助。
Manikandan S 2016年

只要没有人运行过mkdir -p ';echo Hi Johnny;/.svn'–在这种情况下,对find的{}调用仍然应该有效
永不再睡觉

7

使用svn export命令:

cd c:\websites\test
svn export c:\websites\test_copy

所有版本控制下的文件将被导出。请仔细检查以确保您没有错过任何内容。


4

只需删除所需文件夹内的.svn文件夹,即可自动删除该控件。


3

在Windows上,您可以为此添加一个快速链接到浏览器的右键菜单。只需启动以下注册表脚本:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\DeleteSVN]
@="Delete SVN Folders"

[HKEY_CLASSES_ROOT\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

这将在您的右键单击菜单上添加一个名为“删除SVN文件夹”的项目。这将删除此文件夹及其所有子文件夹中的所有.svn文件夹。

来源(德文):http : //www.sjmp.de/software/alle-svn-ordner-und-dateien-loeschen/


2

您可以使用“ svn导出”来创建没有svn数据的该文件夹的副本,也可以添加该文件夹以忽略列表


2

对于将NetBeans与SVN结合使用的用户,有一个选项'Subversion> Export'。


2

还有一个很好的开源工具SVN Cleaner,它在Windows资源管理器上下文菜单中添加了三个选项:

  • 删除所有.svn
  • 删除所有但根.svn
  • 删除本地仓库文件



1

答案非常简单- 将文件夹导出到其自身!TortoiseSVN检测到这种特殊情况,并询问您是否要使工作副本不受版本控制。如果回答“是”,则将删除控制目录,并且您将拥有普通的,未版本控制的目录树。


1
这不只是重新引用5年前给出的答案吗?
Ben Thurley

1

另一个(更简单的)Linux解决方案:

rm -r `find /path/to/foo -name .svn`

1

最好,最简便的方法

如果您认为可以通过简单的魔术命令获胜,那就失败了!SVN确实很棘手,总是以某种方式在Xcode中返回新的错误消息。迟早要保证...所以您必须精打细算!

如您所知,Xcode的常规和最佳做法是在左侧的项目窗格中删除文件。如果您错过了它并以某种方式在Finder中将其删除,则很麻烦。大麻烦!但是如果做得好,您可以解决它并节省时间。

首先,您需要先删除对该文件或文件夹的SVN引用,然后才能实际删除它

  1. 如果您可以将文件/文件夹从回收站放回去,或者在删除文件时撤消最后一步,则...

  2. 前往终端-是的,好的旧终端-并前往该位置。最好的方法是键入cd,然后将文件夹/文件拉到终端。你会得到类似的东西

cd /用户/用户名/文档/ Apps_Developing / ...

你可以检查你在哪里

ls

命令列出您的文件。

  1. 然后,您需要使用SVN命令删除svn参考:

    svn delete --keep-local fileName_toDelete

这将从SVN储存库中删除文件,但是您必须在Finder中手动将其删除。


0

我使用rsync:

# copy folder src to srcStripped excluding subfolders named '.svn'. retain dates, verbose output
rsync -av --exclude .svn src srcStripped

0

NetBeans IDE用户可以按以下方式进行操作:

  1. 在您的IDE中打开SVN项目
  2. 选择项目

    右键单击Subversion导出

  3. 在对话框中

    导出到/ var / tmp / projectname文件夹,按export wait将显示完成,将询问您是否要打开它吗

  4. 您现在可以切换到Git了:)


0

我的想法是删除.svn文件夹,然后将所有其他文件移动到新文件夹。它是如此简单。


0

使用Windows操作系统时,转到文件夹位置并检查隐藏文件是否已打开,然后您可以在其中看到SVN文件夹。只需删除该文件夹。



0

重要的一点是,当您使用外壳程序删除.svn文件夹时,需要使用-depth参数来防止find命令进入刚刚删除的目录并显示错误消息,例如

“找到:./。svn:没有这样的文件或目录”

结果,您可以使用如下find命令:

cd [dir_to_delete_svn_folders]
find . -depth -name .svn -exec rm -fr {} \;


0

使用以下内容:

svn rm --keep-local <folder name> 删除文件夹及其中的所有内容。

svn rm --keep-local <folder name>/* 保留文件夹,但删除文件夹中的所有内容。

这是发生的情况的示例:

~/code/web/sites/testapp $ svn rm --keep-local includes/data/*
D         includes/data/json
D         includes/data/json/index.html
D         includes/data/json/oembed
D         includes/data/json/oembed/1.0
D         includes/data/json/oembed/1.0/embed1.json
D         includes/data/json/oembed/1.0/embed2.json
D         includes/data/json/oembed/1.0/embed3.json

-1

在Windows 10上,我们需要转到Windows Explorer,然后转到View并选中的复选框View hidden files

然后导航到Windows Explorer上具有SVN链接的文件夹,然后删除该.svn文件夹/文件。


尽管我编辑了格式,但此答案实际上并未回答问题。用户已经知道如何删除基本.svn文件夹,但是他正在询问所有子文件夹。请仔细阅读问题。
CodeMouse92 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.