首页 文章

如何忽略Subversion中的文件?

提问于
浏览
572

如何忽略Subversion中的文件?

另外,如何查找不受版本控制的文件?

17 回答

  • 3

    似乎没有人提到它......

    svn propedit svn:ignore .
    

    然后编辑文件的内容以指定要忽略的模式,退出编辑器并完成所有操作 .

  • 13

    使用propedit时,请确保没有任何尾随空格,因为这会导致文件从忽略列表中排除 .

    如果你在linux上使用tab-autocomplete创建文件开头,它们会自动插入:

    svn propset svn:ignore 'file1
    file2' .
    
  • 3

    (此答案已更新,以符合SVN 1.8和1.9的行为)

    你有两个问题:

    将文件标记为已忽略:

    “忽略文件”我的意思是文件不会出现在列表中,即使是“未版本化”:您的SVN客户端会假装文件系统中根本不存在该文件 .

    忽略的文件由"file pattern"指定 . SVN的在线文档中解释了文件模式的语法和格式:http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "File Patterns in Subversion" .

    从版本1.8(2013年6月)及更高版本开始,Subversion支持3种不同的指定文件模式的方法 . 以下是一些示例摘要:

    1 - 运行时配置区 - global-ignores选项:

    • 这是 client-side only 设置,因此您的 global-ignores 列表不会被其他用户共享,并且它适用于您结帐到计算机上的所有存储库 .

    • 此设置在运行时配置区域文件中定义:

    • Windows(基于文件) - C:\Users\{you}\AppData\Roaming\Subversion\config

    • Windows(基于注册表) - HKLMHKLMHKCU .

    • Linux / Unix - ~/.subversion/config

    2 - svn:ignore属性,在目录(而不是文件)上设置:

    • 这存储在repo中,因此其他用户将具有相同的忽略文件 . 与 .gitignore 的工作原理类似 .

    • svn:ignore 应用于目录,并且是非递归或继承的 . 将排除与文件模式匹配的父目录的任何文件或直接子目录 .

    • 虽然SVN 1.8添加了"inherited properties"的概念,但 svn:ignore 属性本身在非直接后代目录中被忽略:

    cd ~/myRepoRoot                             # Open an existing repo.
    echo "foo" > "ignoreThis.txt"                # Create a file called "ignoreThis.txt".
    
    svn status                                  # Check to see if the file is ignored or not.
    > ?    ./ignoreThis.txt
    > 1 unversioned file                        # ...it is NOT currently ignored.
    
    svn propset svn:ignore "ignoreThis.txt" .   # Apply the svn:ignore property to the "myRepoRoot" directory.
    svn status
    > 0 unversioned files                       # ...but now the file is ignored!
    
    cd subdirectory                             # now open a subdirectory.
    echo "foo" > "ignoreThis.txt"                # create another file named "ignoreThis.txt".
    
    svn status
    > ?    ./subdirectory/ignoreThis.txt        # ...and is is NOT ignored!
    > 1 unversioned file
    

    (因此,即使在 . repo根目录上应用了“ ignoreThis.txt ”,也不会忽略文件 ./subdirectory/ignoreThis ) .

    • 因此,要递归应用忽略列表,必须使用 svn propset svn:ignore <filePattern> . --recursive .

    • 这将在每个子目录上创建属性的副本 .

    • 如果子目录中的 <filePattern> 值不同,则子项的值将完全覆盖父项,因此没有"additive"效果 .

    • 因此,如果更改根 . 上的 <filePattern> ,则必须使用 --recursive 更改它以覆盖子目录和子目录 .

    • 我注意到命令行语法是违反直觉的 .

    • 我开始假设您通过键入类似_1453517的内容来忽略SVN中的文件,但这不是SVN的忽略功能的工作方式 .

    3 - svn:global-ignores属性 . 需要SVN 1.8(2013年6月):

    • 这与 svn:ignore 类似,不同之处在于它使用了SVN 1.8的"inherited properties"功能 .

    • svn:ignore 比较,文件模式自动应用于每个后代目录(不仅仅是直接子项) .

    • 这意味着不需要使用 --recursive 标志设置 svn:global-ignores ,因为继承的忽略文件模式会在继承时自动应用 .

    • 运行与上一示例中相同的命令集,但使用 svn:global-ignores 代替:

    cd ~/myRepoRoot                                    # Open an existing repo
    echo "foo" > "ignoreThis.txt"                       # Create a file called "ignoreThis.txt"
    svn status                                         # Check to see if the file is ignored or not
    > ?    ./ignoreThis.txt
    > 1 unversioned file                               # ...it is NOT currently ignored
    
    svn propset svn:global-ignores "ignoreThis.txt" .
    svn status
    > 0 unversioned files                              # ...but now the file is ignored!
    
    cd subdirectory                                    # now open a subdirectory
    echo "foo" > "ignoreThis.txt"                       # create another file named "ignoreThis.txt"
    svn status
    > 0 unversioned files                              # the file is ignored here too!
    

    For TortoiseSVN用户:

    这整个安排对我来说很困惑,因为TortoiseSVN的术语(在他们的Windows资源管理器菜单系统中使用)最初误导我 - 我不确定忽略菜单的“添加递归”,“添加*”和“添加”的重要性选项 . 我希望这篇文章解释了Ignore功能如何与SVN Properties功能绑定 . 也就是说,我建议使用命令行来设置被忽略的文件,这样你就可以了解它的工作方式,而不是使用GUI,只有在熟悉命令行后才使用GUI来操作属性 .

    列出被忽略的文件:

    命令 svn status 将隐藏被忽略的文件(即匹配RGA global-ignores 模式的文件,或匹配直接父目录的 svn:ignore 模式或匹配任何ancesor目录的 svn:global-ignores 模式 .

    使用 --no-ignore 选项查看列出的文件 . 忽略的文件的状态为 I ,然后将输出管道传送到 grep ,仅显示以"I"开头的行 .

    命令是:

    svn status --no-ignore | grep "^I"
    

    例如:

    svn status
    > ? foo                             # An unversioned file
    > M modifiedFile.txt                # A versioned file that has been modified
    
    svn status --no-ignore
    > ? foo                             # An unversioned file
    > I ignoreThis.txt                  # A file matching an svn:ignore pattern
    > M modifiedFile.txt                # A versioned file that has been modified
    
    svn status --no-ignore | grep "^I"
    > I ignoreThis.txt                  # A file matching an svn:ignore pattern
    

    当当!

  • 2

    使用以下命令创建不在版本控制文件下的列表 .

    svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
    

    然后将文件编辑为 leave just the files you want actually to ignore . 然后使用这个忽略文件中列出的文件:

    svn propset svn:ignore -F ignoring.txt .
    

    注意该行末尾的点 . 它告诉SVN该属性正在当前目录中设置 .

    删除文件:

    rm ignoring.txt
    

    最后提交,

    svn ci --message "ignoring some files"
    

    然后,您可以通过以下方式检查忽略哪些文件

    svn proplist -v
    
  • 8

    如果您使用的是TortoiseSVN,请右键单击某个文件,然后选择 TortoiseSVN / Add to ignore list . 这会将文件/通配符添加到 svn:ignore 属性 .

    在检入文件时将检查 svn:ignore ,并且将忽略匹配的文件 . 我有一个Visual Studio .NET项目的以下忽略列表:

    bin obj
    *.exe
    *.dll
    _ReSharper
    *.pdb
    *.suo
    

    您可以在 TortoiseSVN / Properties 的上下文菜单中找到此列表 .

  • 35

    您可以忽略文件或目录,如 .gitignore . 只需创建一个您要忽略的目录/文件列表的文本文件,然后运行以下代码:

    svn propset svn:ignore -F ignorelist.txt .
    

    或者,如果您不想使用文本文件,可以这样做:

    svn propset svn:ignore "first
     second
     third" .
    

    Source: Karsten's Blog - Set svn:ignore for multiple files from command line

  • 75

    我找到了文章.svnignore Example for Java .

    示例:Ruby on Rails的.svnignore,

    /log
    
    /public/*.JPEG
    /public/*.jpeg
    /public/*.png
    /public/*.gif
    
    *.*~
    

    在那之后:

    svn propset svn:ignore -F .svnignore .
    

    .gitignore的例子 . 您可以使用.svnignore

    https://github.com/github/gitignore

  • 46

    另一种解决方案是

    svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt
    

    或逐行

    svn st | awk '/^?/{print $2}' > svnignore.txt 
    svn propget svn:ignore >> svnignore.txt 
    svn propset svn:ignore -F svnignore.txt . 
    rm svnignore.txt
    

    它能做什么:

    • 从svn获取状态文件

    • ? 的所有文件保存到文件"svnignore.txt"

    • 获取已经被忽略的文件并将它们附加到文件"svnignore.txt"

    • 告诉svn忽略"svnignore.txt"中的文件

    • 删除文件

  • 4

    此外,如果您使用Tortoise SVN,您可以这样做:

    • 在上下文菜单中选择"TortoiseSVN",然后"Properties"

    • 在出现的窗口中单击"New",然后单击"Advanced"

    • 在与"Property name"相反的显示窗口中选择或键入"svn:ignore",与"Property value"相反的所需文件名或文件夹名称或文件掩码(在我的情况下为"*/target"),单击"Apply property recursively"

    • 好的 . 好 .

    • 承诺

  • 678

    bkbilly's answer:的更易读的版本

    svn st | awk '/^?/{print $2}' > svnignore.txt
    svn propget svn:ignore >> svnignore.txt
    svn propset svn:ignore -F svnignore.txt .
    rm svnignore.txt
    

    它能做什么:

    • 从svn获取状态文件

    • ? 的所有文件保存到文件"svnignore.txt"

    • 获取已经被忽略的文件并将它们附加到文件"svnignore.txt"

    • 告诉svn忽略"svnignore.txt"中的文件

    • 删除文件

  • 21
    • cd~ / .subversion

    • 打开配置

    • 找到像'global-ignores'这样的行

    • 设置忽略文件类型如下:global-ignores = * .o * .lo * .la * .al .libs * .so .so . [0-9] * .pyc * .pyo 88 * .rej~ ## . #* . * . swp .DS_Store node_modules输出

  • 3

    您还可以在SVN的配置文件中设置全局忽略模式 .

  • 10

    svn status 将告诉您哪些文件不在SVN中,以及更改的内容 .

    查看SVN properties的ignore属性 .

    对于SVN的所有内容,Red Book是必读的 .

  • 6

    Adding a directory to subversion, and ignoring the directory contents

    svn propset svn:ignore '\*.*' .
    

    要么

    svn propset svn:ignore '*' .
    
  • 5

    SVN ignore 易于在TortoiseSVN中管理 . 打开TortoiseSVN并右键单击文件菜单,然后选择添加到忽略列表 .

    这将添加 svn:ignore 属性中的文件 . 当我们检入文件时,那些与 svn:ignore 匹配的文件将被忽略并且不会提交 .

    在Visual Studio项目中,我们添加了以下要忽略的文件:

    bin obj
    *.exe
    *.dll
    *.pdb
    *.suo
    

    我们正在使用此方法成功管理Comparetrap的SVN上的源代码

  • 3

    在工作副本上使用命令 svn status 来显示文件的状态,尚未受版本控制(并且未被忽略)的文件旁边会有一个问号 .

    至于忽略文件,您需要编辑svn:ignore属性,请阅读http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html中svnbook中忽略无版本项目一章 . 本书还介绍了有关使用svn状态的更多信息 .

  • 0
    • 打开你使用JetBrains产品(即Pycharm)

    • 然后单击顶部工具栏上的'commit'按钮或使用快捷方式'ctrl + k' screenshot_toolbar
      在提交界面

    • ,将您不需要的文件移动到另一个更改列表,如下所示 . screenshot_commit_change

    • 下次只能提交默认更改列表 .

相关问题