首页 文章

忽略版本控制上的文件夹元文件

提问于
浏览
49

Unity为Asset文件夹中的文件夹创建和删除元文件 .

这可能会在使用版本控制时产生令人讨厌的情况(您可以跳过并转到问题):有人创建了一个文件夹,这些文件将被忽略但忘记忽略文件夹的元文件 . Unity创建元文件,此人将元添加到版本控制 . 另一个人获得变更集,由于他没有该文件夹,他的Unity删除了元文件,他从版本控制中删除了元文件 . 并非团队中的每个人都理解这一点,因此这个过程会在地狱的循环中延续下去 .

令人惊讶的是,这种情况始终存在 . 那么,有两个问题:

  • 版本文件夹元文件很重要吗?

  • 有没有办法自动忽略文件夹元文件 - 特别是在git或mercurial上?

2 回答

  • 50

    要包含元文件和资源,只需在排除后添加以下内容:

    !*.*.meta
    

    这是我的.gitignore示例:

    # Ignore the following files
    # --------------------------
    # Unity3D specific
    #
    **/Library/*
    **/Temp/*
    **/*.csproj
    **/*.unityproj
    **/*.sln
    **/*.userprefs
    **/*.pidb
    
    # include meta files
    !*.*.meta
    

    我把它放在带有git存储库结构的文件夹中,所以我的项目结构看起来类似于:

    root folder /
       - Unity Project/
            - .gitignore
            - .git/
            - ProjectFolder/
                  - {all project related data}
    

    希望有所帮助 .

  • -6

    Unity docs说:

    创建新资产时,请确保资产本身和关联的.meta文件都已添加到版本控制中 .

    对我来说,这是足以将它们置于版本控制之下的原因 . 我看到两种解决问题的方法:

    • 组织:为本地文件夹设置命名约定,例如从"_"开始 . 但我们都知道这不起作用;-)

    • 在所有计算机上安装客户端pre-commit hook . 我还没有这样做,但似乎很有希望 .

    我只是玩了不同的git命令,以下内容可能很有用:git hook脚本首先检查.gitignore是否已更改:

    git diff-index --cached --name-only HEAD | grep ".gitignore"
    

    如果它们位于Assets文件夹下,则打印出.gitignore中所有新添加的行的目录名:

    git diff --cached --word-diff=plain .gitignore | grep -o -e "{+\/.*\/Assets\/.*+}" | cut -d + -f 2
    

    Update

    我刚写了这样一个预提交钩子:-)有关代码,请参阅GitHub存储库git-pre-commit-hook-unity-assets,有关详细信息,请参阅我的blog posting .

相关问题