在我正在工作的当前项目中,有人决定将二进制文件作为源树的一部分签入.二进制文件位于源本身下面的目录中:
project/src # Here is the location of the source code project/src/more_src # Some more source code lives here project/src/bin # Here are the binary files
可以想象,合并冲突因此而一直发生.这很烦人,因为我觉得任何开发人员的机器都不应该提交二进制文件 - 这应该留给构建服务器.
我是subversion的命令行用户.我想忽略bin
的目录,以便当我使用svn st
和svn ci
这些目录被跳过(即使有挂起的更改).
不幸的是,由于more_src
目录,我无法使用-N(非递归).
我怎么能做到这一点?
编辑:subversion 1.6已经发布.从发行说明:
在Subversion 1.6中,svn update的--set-depth参数已经增长了一个新的值 - 排除.此值告诉Subversion立即从工作副本中排除目标,直到另行通知为止.在Subversion 1.6之前,如果无法轻松地从工作副本中删除目录....
以下所有内容现在已经过时了.
您可以在正确的位置限制工作副本中文件夹的深度,以便不需要的文件不会显示为版本化文件.但是,您无法减少现有工作副本的深度.
1)签出这样一个干净的工作副本(它只包含根目录中的文件和空文件夹):
svn co --depth immediates repoURL/some/wc/path
2)现在,对于您不想忽略的每个文件夹,请输入内容
svn update --depth infinity /some/good/path
如果包含要忽略的内容的文件夹不在工作副本的根目录中,您可以逐步调用
svn update --depth immediates /some/path/to/make/deeper
这种方法确实有缺点.如果要忽略的文件通过您自己的操作(例如构建)出现在您的工作副本中,它们将以svn状态显示为未版本控制的文件.您甚至可以添加它们并导致"文件已存在"提交错误.
正常项目结账(或从现有工作副本开始)
删除不需要的文件夹(正常的文件系统删除,而不是svn rm).此时文件夹丢失,如果您进行了正常更新,则会返回所有内容.
带回来的文件夹
svn update --depth empty/path/where/deleted/folder/was
现在你可以对整个项目进行svn更新,但不会返回坏内容.