Answers:
设置svn:ignore
父目录的属性:
svn propset svn:ignore dirname .
如果您有许多事情要忽略,请在属性值中用换行符分隔。在这种情况下,使用外部编辑器更容易编辑属性值:
svn propedit svn:ignore .
svn rm --keep-local dirname
第一。(我的svn统计数据输出很大,我一阵子撞了一下。)
svn propset svn:ignore -F file.txt .
svn:ignore
,不要svn::ignore
像我一样。您可以设置任意属性,因此后一个属性将被设置为OK,您可以查看和编辑该属性,但这不会使SVN忽略您列出的文件。
这是示例目录结构:
\project
\source
\cache
\other
当project
您看到没有添加您的缓存目录并显示为这样。
> svn st
M source
? cache
要设置ignore属性,请执行
svn propset svn:ignore cache。
其中svn:ignore
,您要设置的属性的名称,该属性cache
的值,以及.
您要设置此属性的目录。它应该是cache
需要该属性的目录的父目录。
要检查设置了哪些属性:
> svn proplist
Properties on '.':
svn:ignore
要查看的值svn:ignore
:
> svn propget svn:ignore
cache
要删除先前设置的属性:
svn propdel svn:ignore
dirname
。例如,在键入时svn propset svn:ignore dirname
,如果允许(bash)shell为您填写目录名,它将添加该斜杠,并留下命令svn propset svn:ignore dirname/
,这不会导致该文件夹被忽略。至少,这是我的经验。
重要提示:
在命令行上您不能使用
svn add *
这还将添加忽略的文件,因为命令行会扩展*
,因此svn add
认为您希望添加所有文件。因此,请改用此方法:
svn add --force .
svn add --force *
不会工作。使用圆点而不是星星。
由于我花了一段时间尝试使其正常工作,因此应注意,如果文件已存在于SVN中,则需要svn delete
它们,然后编辑该svn:ignore
属性。
我知道这似乎很明显,但是当我认为它只会在本地忽略它们时,它们会一直出现?
在我的svn status
列表中。
要稍微扩展一下,如果您使用svn命令行工具执行此操作,则需要输入:
svn propedit svn:ignore path/to/dir
这将打开您选择的文本编辑器,然后键入“ *”以忽略其中的所有内容,然后保存并退出-这将在svn中包括目录本身,但忽略其中的所有文件,以忽略目录,请使用父目录的路径,然后在文件中键入目录的名称。保存后,运行更新(“ svn up”),然后检查适当的路径。
svn:ignore
在父目录上设置属性:
$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
这将覆盖的任何当前值svn:ignore
。您使用以下命令编辑值:
$ svn pe svn:ignore .
这将打开您的编辑器。您可以添加多个模式,每行一个。
您可以使用以下方法查看当前值:
$ svn pg svn:ignore .
如果您使用的是GUI,则应该有一个菜单选项来执行此操作。
svn ps svn:ignore . 'cachedir'
结果 cachedir is not under version control
。改变svn ps svn:ignore 'cachedir' .
为我工作
感谢您所做的所有贡献。我只想分享我的经验中的一些其他信息,而忽略文件。
当文件夹已经受到版本控制时
在svn import和svn co文件之后,我们通常第一次进行此操作。
所有运行时缓存附件文件夹都将受版本控制。因此,在svn ps svn:ignore之前,我们需要从存储库中将其删除。
在SVN 1.5以上版本中,我们可以使用svn del --keep-local your_folder
,但是对于较早的版本,我的解决方案是:
.svn
隐藏文件夹)当我们需要多个文件夹被忽略时
svn:ignore
svn pe
将需要编辑文本文件,如果需要使用vi设置文本编辑器,则可以使用此命令:
export SVN_EDITOR=vi
该文件看起来像这样:
runtime
cache
attachments
assets
svn propset svn:ignore -F .ignorethesefiles .
,它将使用文件的内容。我喜欢保留它,以便您知道忽略了什么。编辑需要后续属性。
如果使用特定的SVN客户端TortoiseSVN,则在提交时,可以选择右键单击项目,然后选择“添加到忽略列表”。
忽略多个条目的命令有些棘手,需要反斜杠。
svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
此命令会忽略任何名字cache
,tmp
,null
,和and_so_on
在当前目录。
svn propset svn:ignore -F .ignorethesefiles .
将允许您使用文件。如前所述,您总是有权。
“谢谢” 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
另外,要忽略文件/路径名的特定列表,我们可以使用此变体svn-ignore。我猜svn-ignore-all应该真的像xargs svn-ignore。
#!/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忽略“旧”。
如果您使用的是诸如TortoiseSVN之类的SVN前端,或者某种IDE集成,则在与提交/添加操作相同的菜单中也应该有一个ignore选项。