如何忽略SVN目录?

时间:2008-09-22 16:55:59

标签: svn version-control directory

我刚刚开始使用SVN,我有一个在源代码管理下不需要的缓存目录。如何忽略SVN的整个目录/文件夹?

我在OS X和命令行上使用VersionsTextMate

23 个答案:

答案 0 :(得分:785)

设置父目录的svn:ignore属性:

svn propset svn:ignore dirname .

如果要忽略多项内容,请按属性值中的换行符分隔。在这种情况下,使用外部编辑器编辑属性值更容易:

svn propedit svn:ignore .

答案 1 :(得分:402)

这是一个示例目录结构:

\project
    \source
    \cache
    \other

project中,您会看到未添加缓存目录并显示为此目录。

> svn st
M  source
?  cache

要设置ignore属性,请执行

  

svn propset svn:忽略缓存。

其中svn:ignore是您要设置的属性的名称,cache是属性的值,.是您要设置此属性的目录。它应该是需要该属性的cache目录的父目录。

要检查设置了哪些属性:

> svn proplist
Properties on '.':
  svn:ignore

要查看svn:ignore

的值
> svn propget svn:ignore
cache

删除先前设置的属性:

svn propdel svn:ignore

答案 2 :(得分:129)

重要提及:

在命令行上,您无法使用

svn add *

这也会添加被忽略的文件,因为命令行会扩展*,因此svn add认为您希望添加所有文件。因此请改用:

svn add --force .

答案 3 :(得分:79)

由于我花了一段时间试图让它工作,应该注意的是,如果文件已经存在于SVN中,则需要svn delete它们,然后编辑svn:ignore属性。 / p>

我知道这似乎很明显,但是当我认为它会在本地忽略它们时,它们会一直显示在?列表中svn status

答案 4 :(得分:69)

要稍微扩展,如果您使用svn命令行工具执行此操作,则需要键入:

svn propedit svn:ignore path/to/dir

将打开您选择的文本编辑器,然后键入'*'忽略其中的所有内容,并保存+退出 - 这将包括svn中的目录本身,但忽略其中的所有文件,忽略该目录,使用父路径,然后在文件中键入目录的名称。保存后,运行更新('svn up'),然后检查相应的路径。

答案 5 :(得分:28)

在父目录中设置svn:ignore属性:

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'

这将覆盖svn:ignore的任何当前值。您可以使用以下命令编辑值:

$ svn pe svn:ignore .

这会打开你的编辑器。您可以添加多个模式,每行一个。

您可以使用以下方式查看当前值:

$ svn pg svn:ignore .

如果您使用的是GUI,则应该有一个菜单选项来执行此操作。

答案 6 :(得分:20)

感谢上述所有贡献。我想在忽略文件的同时分享我的经验中的一些额外信息。


当文件夹已处于修订控制

svn import svn co <​​/ em>之后的文件,这是我们第一次做的事情。

所有运行时缓存,附件文件夹都将受版本控制。 所以,在 svn ps svn:ignore 之前,我们需要从存储库中删除它。

使用上面的SVN 1.5版,我们可以使用svn del --keep-local your_folder, 但对于早期版本,我的解决方案是:

  1. svn export 文件夹的干净副本(没有.svn隐藏文件夹)
  2. svn del 本地和存储库,
  3. svn ci
  4. 复制文件夹
  5. 执行 svn st 并确认文件夹标记为“?”
  6. 现在我们可以根据解决方案进行 svn ps

  7. 当我们需要忽略多个文件夹时

    • 在一个目录中,我有两个需要设置为svn:ignore
    • 的文件夹
    • 如果我们设置一个,则另一个将被删除。
    • 然后我们想知道我们需要 svn pe

    svn pe需要编辑文本文件,如果需要,可以使用此命令使用vi设置文本编辑器:

    export SVN_EDITOR=vi
    
    1. 使用“o”可以打开一个新行
    2. 输入您要忽略的所有文件夹名称
    3. 按'esc'键退出编辑模式
    4. 输入“:wq”然后按 Enter 保存并退出
    5. 该文件看起来像这样:

      runtime
      cache
      attachments
      assets
      

答案 7 :(得分:19)

先删除它......

如果您的目录foo已受版本控制,请先将其删除:

svn rm --keep-local foo

...然后忽略:

svn propset svn:ignore foo .

答案 8 :(得分:12)

...如果你想忽略多个目录(比如build/ temp/*.tmp文件),你可以分两步完成(忽略第一个和编辑忽略属性(请参阅此处的其他答案)或者可以编写类似

的内容
svn propset svn:ignore "build
temp
*.tmp" .

在命令行上。

答案 9 :(得分:11)

如果您使用的是特定的SVN客户端TortoiseSVN,则在提交时,您可以选择右键单击项目并选择“添加到忽略列表”。

答案 10 :(得分:6)

忽略多个条目的命令有点棘手,需要反斜杠。

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .

此命令将忽略当前目录中名为cachetmpnulland_so_on的任何内容。

答案 11 :(得分:5)

我遇到了忽略嵌套目录的问题;我想忽略的顶级目录不会显示'svn status'但所有子目录都显示。这对其他人来说可能是不言而喻的,但我想我会分享它:

实施例

  

/中继线

     

/中继/高速缓存

     

/中继/高速缓存/ subdir1

     

/中继/高速缓存/ subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci

答案 12 :(得分:4)

“谢谢你” 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忽略'old'。

答案 13 :(得分:4)

Bash one liner for multiple ignores:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"

答案 14 :(得分:3)

保留SVN将无视的目标:

  1. 这将从存储库中删除文件,但保持目录在SVN控制下:
  2.   

    svn delete --keep-local path / directory_to_keep / *

    1. 然后设置忽略目录(和所有内容):
    2.   

      svn propset svn:ignore&#34; *&#34;路径/ directory_to_keep

答案 15 :(得分:3)

杰森的回答将起到作用。但是,不要将svn:ignore设置为“。”。在缓存目录中,如果缓存目录不总是存在,您可能希望在目录的svn:ignore属性中包含“cache”。我在一些“一次性”文件夹上这样做。

答案 16 :(得分:3)

如果您的项目目录名为/ Project,并且您的缓存目录名为/ Project / Cache,那么您需要在/ Project上设置subversion属性。属性名称应为“svn:ignore”,属性值应为“Cache”。

有关属性的更多信息,请参阅Subversion手册中的this页面。

答案 17 :(得分:2)

如果您正在使用像TortoiseSVN这样的SVN前端,或者某种IDE集成,那么在同一菜单中也应该有一个忽略选项,就像提交/添加操作一样。

答案 18 :(得分:1)

由于您使用的是版本,实际上非常简单:

  • 浏览已签出的副本
  • 单击要忽略的目录
  • 在右侧的“忽略”框中单击“编辑”
  • 键入*。*以忽略所有文件(或* .jpg仅用于jpg文件等)

答案 19 :(得分:1)

也可以观察你的斜杠。我发现在我的忽略设置文件中包含images/*并未忽略./images/。当我运行svn status -u时,它仍显示? images。所以,我只是将忽略设置更改为images,没有斜线。进行状态检查并将其清除。

答案 20 :(得分:1)

以下一种方式解决Eclipse

首先,将文件夹与项目同步:

  

团队 - &gt;同步

在下一个视图团队视图中,您可以看到可以提交给SVN服务器的所有资源。

因此,选择要忽略的资源的资源文件夹,然后可以使用

忽略它
  

团队 - &gt;添加到svn:ignore

之后,在确认窗口中,选择第一个选项:“按名称忽略”。

例如,如果我想忽略目标文件夹及其.class资源,我将进行同步,并在同步视图中,我将选择目标文件夹。之后,我会选择

  

team-&gt;添加

svn:ignore,然后我将确认确认窗口中的第一个选项。

答案 21 :(得分:1)

设置svn:ignore property。大多数UI svn工具都有一种方法可以执行此操作以及链接中的命令行讨论。

答案 22 :(得分:0)

在失去了很多时间寻找如何做这个简单的活动之后,我决定发布它并不难找到合适的解释。

首先让样本结构

$ svn st ?项目/主干/目标 ?项目/中继/ myfile.x

1 - 首先在mycase vim中配置编辑器 export SVN_EDITOR = vim

2 - “svn propedit svn:ignore project / trunk /”将打开一个新文件,你可以在我们的案例类型“target”中添加你的文件和子目录保存并关闭文件并运行

$ svn st ?项目/中继/ myfile.x

感谢。