如何从SVN存储库中删除文件/文件夹并添加到忽略列表

时间:2009-01-05 23:17:12

标签: svn

对我来说,这听起来像是一个查找手册的问题,但我找不到它。假设我们有一个包含文件和目录的存储库,它不应该受版本控制,而应该在忽略列表上(例如Eclipse文件.settings.project,生成的文档文件 - 绝不应该首先添加和承诺)。从存储库中删除这些文件并将它们直接移到忽略列表上的最佳方法是什么?

更新 下面接受的答案详细说明了设置本地subversion存储库以避免上述问题的好方法。但是,如果您仍然需要解决这个问题,那么您似乎必须进行一些手动调整以将文件/文件夹从存储库中取出并放到忽略列表中。

例如,对于.settings文件夹,首先将其添加到全局忽略列表,然后运行以下命令:

$REMOVE=".settings"
cp -r "$REMOVE" /tmp/ && \
svn rm "$REMOVE" && \
svn commit -m "Moving to ignore list" "$REMOVE" && \ 
mv "/tmp/$REMOVE" .

这会将文件/文件夹复制到临时位置,然后将其从SVN中删除并提交删除 - 最后将文件/文件夹复制回来,但由于它现在位于忽略列表中,因此SVN将忽略它。 / p>

5 个答案:

答案 0 :(得分:30)

颠覆有两种方式,一种是针对用户的,另一种是实际在存储库中维护的,因此会影响每个人。

对于全局忽略文件的列表(每个用户/机器独有),您需要编辑subversion配置文件并更改 miscellany global-ignores 指令>部分。配置文件已记录在案,语法非常简单。例如:

global-ignores = *.o

在UNIX系统上,配置文件位于~/.subversion/config。在Windows系统上,配置文件位于%APPDATA%\Subversion\configHKCU\Software\Tigris.org\Subversion\Config下的注册表中。

设置完毕后,您永远不会意外地将这些文件添加到您的存储库中,文件也不会在svn stat命令中显示为。如果您的存储库已经包含这些文件,那么将它们保留在那里可能不会有什么坏处,但将来会忽略对文件的更改和修改。

要在每个项目的基础上进行设置(这会影响任何签出项目的人),您可以将svn:ignore属性添加到可能存储文件的项目目录中。例如,要从项目的顶层排除名为build的目录,您可以执行以下操作:

svn propset svn:ignore 'build' .
svn commit -m 'project ignores build directory' .

从现在开始,subversion将忽略项目中的构建目录。有关详细信息,请参阅http://subversion.tigris.org/上的文档或发出svn help命令以获取更多信息。

编辑:根据评论添加更多... dunno我是如何错过原始问题的那一部分!!对不起:)

不幸的是,从存储库中删除您现在要忽略的文件是一个手动过程,但是,如果您确切地知道它们是哪些文件,您可以编写一个可以运行此问题的人的小脚本(将来, svn:ignore属性可以防止它们重复它,并且它具有在需要时能够轻松修改的优点。)

要从存储库中删除不需要的文件,但保留本地文件,请按照下列步骤操作:

  1. 创建global-ignores条目或将svn:ignore属性添加到存储库并提交。
  2. 对于要从存储库中删除的每个文件,请发出以下命令:svn rm --keep-local filename
  3. 为每个文件发出svn rm命令后,请提交工作副本。
  4. 因为如果他们没有更新配置文件,这可能会产生从人们当前工作副本中删除文件的副作用,我强烈建议在存储库目录中使用svn:ignore属性。这样,当人们更新时,他们不会意外删除文件,因为他们尚未修改其global-ignores参数。

答案 1 :(得分:6)

我可以使用TortoiseSVN工具完成此操作。它们提供了一个名为“删除并添加到忽略列表”的GUI右键单击选项。

答案 2 :(得分:4)

svn remove filename

忽略:

svn propset svn:ignore filename|pattern

另请参阅 How to … Make Subversion ignore files and folders

答案 3 :(得分:0)

感谢您的回答,正是我所需要的。有人想到上面列出的最终脚本,在脚本中执行svn导出而不是cp -R会不会更好?这样你就可以获得没有任何.svn文件夹的干净文件夹。

e.g。

$REMOVE=".settings"
svn export "$REMOVE" /tmp/ && \
svn rm "$REMOVE" && \
svn commit -m "Moving to ignore list" "$REMOVE" && \ 
mv "/tmp/$REMOVE" .

无论如何只是一个想法...

答案 4 :(得分:-2)

如果你希望它们永远消失(或者直到你自己添加它们),你svn rm它们,并将它们加到.svnignore