如何在项目的所有分支上更新 Unity

How to update Unity on all branches of a project

我正在处理 Unity 项目。我们正在使用 Git 并且有多个分支。在所有分支上以最少的麻烦将项目更新到新的 Unity 版本的最佳方法是什么?

注意:我不想合并所有分支,也不想单独更新每个分支。

master 分支中更新它,然后将所有其他分支变基到 master 分支的顶端。

附带说明:通常将外部库放入您自己项目的版本控制中并不是一个好习惯。他们应该在构建时被引入。

以下是在所有分支上更新 Unity 的步骤:

  • 在您的主要工作分支上,更新您的 Unity 版本。 (在这个 post 中,我假设你的主要工作分支是 master,但 dev 也是一个常见的约定。)
  • 提交所有随更新自动更改的文件。
  • 修复所有阻止项目 运行ning 的直接构建错误。
  • 测试你的项目,看看是否有任何由更新引入的回归错误,并修复它们。提交任何必要的修复。 (我建议让你的提交成为原子的,这样你就可以轻松地查看在更新过程中必须手动修复的内容。)
  • 在所有其他分支上,git rebasemaster 分支上。 (如果你不想推送新的 rebased 分支,你也可以 git mergemaster 而不是 rebase。这也取决于项目的上下文。有关此的更多信息,请参阅 post如"Merging vs Rebasing")
  • 在所有其他分支上,检查构建错误。特别是,因为您没有单独更新每个分支,所以您需要更新 Unity Automatic Obsolete API Updater
  • 处理的任何内容
  • 建议:只有在确认所有 Unity 分支在本地工作后,才推送所有分支,以便所有远程分支都可以使用更新。您希望能够在本地恢复您的操作,以防您发现更新其中一个分支时出现问题。如果你 运行 遇到问题,你可以 git reset --hard 到原始提交。

另外,这里有一些可以使更新更容易的项目:

  • 该项目未使用太过时的 Unity 版本。例如,如果您落后了几个主要版本,您可能需要处理更多过时的 API 更新。
  • 树枝不太长-运行宁。如果分支明显偏离 master,您将有更多过时的 API 更新要在每个分支上执行,并且存在合并冲突和麻烦的更大风险。 (但您可以在将 Unity 更新推送到远程分支之前验证这是否是一个问题。)
  • 您的项目设置为使用 visible meta files
  • Unity Cache Server 已设置,因此在更新过程中在具有不同 Unity 版本的分支之间切换时加载项目会更快。

请注意,我认为不单独更新每个 Unity 分支是正确的做法。但是,我建议尽可能将所有分支合并到 master 中,或者至少确保没有任何长 运行ning 分支,因为这可能会使更新过程复杂化。

没有可以同时更新所有分支的git命令。

相反,您可以通过脚本更新每个分支的解决方法来实现。

假设项目在 master 分支上发生变化,您可以按如下方式更新其他分支:

  • 将master分支的所有文件更新到其他分支:

    git checkout branchname
    git checkout master -- .
    git commit -m 'update all the files same as master branch'
    
  • 要将某些文件(例如test.cs)从主分支更新到其他分支:

    git checkout branchname
    git checkout master -- test.cs
    git commit -m 'update test.cd from master branch'