【问题标题】:Setting up Unity Smart Merge with Git and Meld for Unity 2019.3+使用 Git 和 Meld 为 Unity 2019.3+ 设置 Unity Smart Merge
【发布时间】:2020-07-21 00:13:40
【问题描述】:

我到处寻找有关此问题的文档,但几乎没有成功。当涉及到这种动态时,Unity 自己的文档非常不完整。我在这里为您提供我能够让它工作的唯一方法。当然,我会很感激有关如何做得更好的反馈,但就目前而言,几乎所有关于该主题的 Google 搜索都存在 2 年或更长时间。

Unity 文档说要将以下内容添加到.git/config

[merge]
    tool = unityyamlmerge

[mergetool "unityyamlmerge"]
    trustExitCode = false
    cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

绝大多数社区都同意这一点,并告诉您将其中任何一个添加到.gitattributes

*.unity binary
*.prefab binary
*.asset binary

* text=auto

# Unity files
*.meta -text merge=unityyamlmerge diff
*.unity -text merge=unityyamlmerge diff
*.asset -text merge=unityyamlmerge diff
*.prefab -text merge=unityyamlmerge diff

两者都不起作用。我发现上面的代码块有很多不同的替代方案。我找了好几天,甚至浪费了整个周末。什么都行不通,我找不到有关此事的任何最新信息。

【问题讨论】:

    标签: git unity3d git-merge meld


    【解决方案1】:

    在使用 Unity 2019.3+ 和当前版本的 Git 的 Windows 10 上,这是我可以让它工作的唯一方法。

    合并规范文件.txt

    首先,将以下条目添加到 mergespecfile.txt 以允许 Unity 的 Smart Merge 使用您选择的差异工具。我在这里使用 Meld。请注意,--auto-merge 是可选的。我理解它的方式是它会跳过提示您进行合并。

    文件位置 - Windows: C:\Program Files\Unity\Hub\Editor\&lt;unity version&gt;\Editor\Data\Tools

    文件位置 - Mac: /Applications/Unity/Hub/Editor/&lt;unity version&gt;/Unity.app/Contents/Tools

    unity use "%programs%\Meld\meld.exe" "%l" "%r" "%b" "%d"
    prefab use "%programs%\Meld\meld.exe" "%l" "%r" "%b" "%d"
    * use "%programs%\Meld\meld.exe" "%l" "%r" "%b" "%d"
    

    .git 属性

    接下来将其添加到您的回购的.gitattributes。您在此处指定的任何文件类型都将通过 Unity 的 Smart Merge 运行。此处列出的任何都将默认为 Git 的自动合并,您可以在其中运行 git mergetool 来调用我们选择的 diff 工具进行合并。

    # Macro for Unity YAML-based asset files.
    [attr]unityyaml -text merge=unityyamlmerge diff
    
    # Unity files
    *.meta unityyaml
    *.unity unityyaml
    *.asset unityyaml
    *.prefab unityyaml
    

    .git/config

    最后,这是最糟糕的部分,请将以下内容添加到您的 .git/config。该文件对语法的使用方式非常挑剔。与大多数文档相反,似乎使用合并驱动程序是触发它的唯一方法。

    确保更改文件路径以匹配您的版本/操作系统,并将合并/差异工具更改为您喜欢的任何一个。

    [merge "unityyamlmerge"]
        driver = 'C:/Program Files/Unity/Hub/Editor/2019.3.14f1/Editor/Data/Tools/UnityYAMLMerge.exe' merge -p \"$BASE\" \"$REMOTE\" \"$LOCAL\" \"$MERGED\"
        name = Unity SmartMerge (UnityYamlMerge)
        recursive = binary
    [diff]
        tool = meld
    [difftool "meld"]
        path = C:/Program Files (x86)/Meld/meld.exe
    [merge]
        tool = meld
    [mergetool "meld"]
        path = C:/Program Files (x86)/Meld/meld.exe
        prompt = false
    

    更新 - 2021 年 9 月 23 日

    从 Unity 2021.1.21f1 开始,这些设置将继续按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 2020-10-04
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2012-10-31
      相关资源
      最近更新 更多