#!/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
23 回答
...如果你想忽略多个目录(例如
build/
temp/
和*.tmp
文件),你可以分两步完成(忽略第一个和编辑忽略属性(参见其他答案)或者可以写一些像在命令行上 .
如果您使用的是特定的SVN客户端TortoiseSVN,则在提交时,您可以选择右键单击项目并选择"Add to ignore list" .
忽略多个条目的命令有点棘手,需要反斜杠 .
此命令将忽略当前目录中名为
cache
,tmp
,null
和and_so_on
的任何内容 .设置父目录的
svn:ignore
属性:如果您有多个要忽略的内容,请按属性值中的换行符分隔 . 在这种情况下,使用外部编辑器编辑属性值更容易:
这是一个示例目录结构:
在
project
中,您会看到未添加缓存目录并显示为此目录 .要设置ignore属性,请执行
其中
svn:ignore
是您正在设置的属性的名称,cache
是属性的值,.
是您要设置此属性的目录 . 它应该是cache
目录的父目录,需要该属性 .要检查设置了哪些属性:
要查看
svn:ignore
的值:要删除先前设置的属性:
重要提一下:
在命令行上你不能使用
这也将添加被忽略的文件,因为命令行扩展
*
因此svn add
认为您希望添加所有文件 . 因此请改用:由于我花了一些时间试图让它工作,应该注意的是,如果文件已经存在于SVN中,则需要
svn delete
,然后编辑svn:ignore
属性 .我知道这似乎很明显,但是当我认为它会在本地忽略它们时,它们在我的
svn status
列表中一直显示为?
.要稍微扩展,如果您使用svn命令行工具执行此操作,则需要键入:
这将打开您选择的文本编辑器,然后键入'*'忽略其中的所有内容,并保存退出 - 这将包括svn中的目录本身,但忽略其中的所有文件,忽略该目录,使用路径的父级,然后键入该文件中的目录的名称 . 保存后,运行更新('svn up'),然后检查相应的路径 .
在父目录上设置
svn:ignore
属性:这将覆盖
svn:ignore
的任何当前值 . 您可以使用以下命令编辑值:哪个会打开你的编辑器 . 您可以添加多个模式,每行一个 .
您可以使用以下方式查看当前值:
如果您使用的是GUI,则应该有一个菜单选项来执行此操作 .
感谢上面的所有贡献 . 我只是想忽略文件,从我的经验中分享一些额外的信息 .
When the folders are already under revision control
在svn import和svn co文件之后,我们通常第一次做什么 .
所有运行时缓存,附件文件夹都将受版本控制 . 所以,在svn ps svn:ignore之前,我们需要从存储库中删除它 .
使用上面的SVN 1.5版,我们可以使用
svn del --keep-local your_folder
,但对于早期版本,我的解决方案是:svn导出文件夹的干净副本(不带
.svn
隐藏文件夹)svn del本地和存储库,
svn ci
复制文件夹
执行svn st并确认文件夹被标记为'?'
现在我们可以根据解决方案做svn ps
When we need more than one folder to be ignored
在一个目录中,我有两个文件夹需要设置为
svn:ignore
如果我们设置一个,则另一个将被删除 .
然后我们想知道我们需要svn pe
svn pe
将需要编辑文本文件,如果需要,您可以使用此命令使用vi设置文本编辑器:使用"o",您可以打开一个新行
输入要忽略的所有文件夹名称
按'esc'键退出编辑模式
键入":wq"然后按Enter键保存并退出
该文件看起来像这样:
首先删除它...
如果您的目录
foo
已经受版本控制,请先将其删除:...然后忽略:
我有问题让嵌套目录被忽略;我想忽略的顶级目录不会显示'svn status'但所有子目录都显示 . 这可能是对其他人不言而喻,但我想我会分享它:
例:
Bash oneliner多次忽略:
如果项目目录名为/ Project,并且缓存目录名为/ Project / Cache,则需要在/ Project上设置subversion属性 . 属性名称应为“svn:ignore”,属性值应为“Cache” .
有关属性的更多信息,请参阅Subversion手册中的this页面 .
杰森的回答将成功 . 但是,如果缓存目录并不总是存在,则可能需要在父目录的svn:ignore属性中包含"cache",而不是在缓存目录中设置svn:ignore到"." . 我在许多"throwaway"文件夹上执行此操作 .
"Thank-you" svn用于忽略文件的这种可怕的,虚假的和困难的方式 .
所以我写了一个脚本svn-ignore-all:
另外,要忽略特定的文件/路径名列表,我们可以使用此变体svn-ignore . 我想svn-ignore-all应该真的像xargs svn-ignore .
还有一件事:我倾向于用许多随机文件污染我的svn签出 . 在提交时,我将这些文件移动到“旧”子目录中,并告诉svn忽略'old' .
TO KEEP DIRECTORIES THAT SVN WILL IGNORE:
如果您使用像TortoiseSVN这样的SVN的前端,或者某种IDE集成,那么在同一菜单中也应该有一个忽略选项,如提交/添加操作 .
设置svn:ignore property . 大多数UI svn工具都有一种方法可以执行此操作以及链接中的命令行讨论 .
由于您使用的是版本,实际上非常简单:
浏览签出的副本
单击要忽略的目录
在右侧的“忽略”框中单击“编辑”
键入* . 忽略所有文件(或 .jpg仅用于jpg文件等)
观看你的尾随斜杠 . 我发现在我的忽略设置文件中包含
images/*
并没有忽略./images/
. 当我运行svn status -u
时,它仍显示? images
. 所以,我只是将忽略设置更改为images
,没有斜线 . 进行状态检查并将其清除 .用下一个方法解决Eclipse:
首先,将文件夹同步到项目:
在下一个视图团队视图中,您可以看到可以提交给SVN服务器的所有资源 .
因此,选择要忽略的资源的资源文件夹,然后可以使用它忽略它
之后,在确认窗口中,选择第一个选项:“按名称忽略” .
例如,如果我想忽略目标文件夹及其.class资源,我将进行同步,并在同步视图中,我将选择目标文件夹 . 在那之后,我会选择
到
svn:ignore
然后我将确认确认窗口中的第一个选项 .在失去了很多时间寻找如何做这个简单的活动后,我决定发布它并不难找到一个体面的解释 .
首先让样本结构
$ svn st?项目/主干/目标?项目/主干/ myfile.x
1 - 首先配置编辑器,在mycase vim export SVN_EDITOR = vim中
2 - “svn propedit svn:ignore project / trunk /”将打开一个新文件,您可以在我们的案例类型“target”中添加您的文件和子目录保存并关闭文件并正常工作
$ svn st?项目/主干/ myfile.x
谢谢 .