这对我来说听起来像是一个查找手册的问题,但我找不到它.假设我们有一个在它的文件和目录不应该是版本控制之下,而是应该忽略列表上的存储库(如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将忽略它.
subversion有两种方式,一种是特定于用户,另一种实际上是在存储库中维护的,因此会影响每个人.
对于全局忽略文件的列表(每个用户/机器独有),您需要编辑subversion配置文件并更改miscellany部分中的global-ignores指令.配置文件已记录在案,语法非常简单.例如:
global-ignores = *.o
在UNIX系统上,配置文件位于~/.subversion/config
.在Windows系统上,配置文件%APPDATA%\Subversion\config
位于注册表下或注册表中HKCU\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
命令以获取更多信息.
编辑:添加更多基于评论...不知道我如何错过原始问题的那一部分!抱歉:)
不幸的是,从存储库中删除您现在要忽略的文件是一个手动过程,但是,如果您确切地知道它们是哪些文件,您可以编写一个可以运行此问题的人的小脚本(将来,svn:忽略属性会使它们不必重复它,并且它具有能够在需要时轻松修改的优点).
要从存储库中删除不需要的文件,但保留本地文件,请按照下列步骤操作:
创建global-ignores条目或将svn:ignore属性添加到存储库并提交.
对于要从存储库中删除的每个文件,请发出以下命令: svn rm --keep-local filename
svn rm
为每个文件发出命令后,提交工作副本.
因为如果他们没有更新配置文件,这可能会产生从人们当前工作副本中删除文件的副作用,我强烈建议在存储库目录中使用svn:ignore属性.这样,当人们更新时,他们不会意外地删除文件,因为他们还没有修改他们的global-ignores
参数.
我能够通过使用TortoiseSVN工具来做到这一点.它们提供了一个名为"删除并添加到忽略列表"的GUI右键单击选项.