unity3d 和 git 子模块可能吗?

2024-01-04

太长了;这将是一篇冗长的文章,但我相信许多 unity3d 开发人员也遇到了和我一样的问题。这个问题需要一个明确、一劳永逸的答案来拯救我们的集体理智。

所以在过去的两年多里我一直在使用 git,但我并没有深入研究它。我可以从 bitbucket/github 等分支/合并推拉,这对于常规的 win 表单/传统应用程序来说效果很好。

问题就在这里。我早已从 xna/silverlight 转移到 unity3d 并在 unity 中添加对库的引用,您实际上必须将该库中的源文件复制到 Unity 项目文件夹中。虽然 Unity 确实允许您将 *.dll 文件放入 Plugin 文件夹中,但存在明显的跨平台兼容性问题,因此我永远不想去那里。

我有十多个库项目,提供从人工智能到内容管理、日志记录、抽象用户输入系统等各种功能,并且我一直在为我将要制作的未来游戏开发一个新的关卡编辑器。

每个单独的库项目本身都是一个统一项目,每个项目的代码文件都是统一组织的

Assets\<company name>\<project name>\
Assets\<company name>\<library name>\
Assets\<company name>\<another library name>\

与统一资产商店中的许多其他资产不同,我这样做是为了使事情保持高度组织性。 :(

因此,我的关卡编辑器项目正在使用多个库项目,其代码已通过复制粘贴导入。每个库本身都托管在自己的本地 git 存储库中。因此,当我将代码文件从库项目复制粘贴到我的主 Unity 项目时,我会自动失去提交对该库 git 存储库所做的更改的任何能力。

去年我一直在做的事情如下

  1. 启动一个主要项目Assets\<company name>\<main project name>\
  2. 导入任何库项目(复制/粘贴代码文件)Assets\<company name>\<library name>\
  3. 如果我需要对其中一个库进行更改,我通常只需编辑我正在处理的主项目中的库代码文件。 (否则会出现更复杂的情况)
  4. 因为主项目也是一个 git 存储库,所以我对任何库文件所做的更改也会提交到主项目的存储库。
  5. 一段时间后,我使用 CodeCompare(一个 diff 实用程序)来进行文件夹比较Assets\<company name>\<library name>\与我之前复制库文件的库的原始位置。
  6. 我煞费苦心地逐个比较每个更改的代码文件 diff,并将主项目中所做的更改迁移到库的原始位置。
  7. 现在已经完成了,该库是一个 git 存储库,所以我再次(第二次)必须提交对代码文件所做的各种更改。

除了这种疯狂之外,还有另一个问题。主要项目并不是我现在正在进行的唯一主要项目。我有一些项目都引用(通过复制/粘贴)这些其他库。现在,我已经更新了库的代码并提交了它,现在我必须返回使用该库的每个主项目,并将更改从库 git repo 复制/粘贴到这些主项目。

工作流程总结

MainProjectA->从 LibraryA->LibraryA 复制的代码文件在 MainProjectA->LibraryA 文件中修改,通过差异比较合并回原始 LibraryA 文件夹位置->LibraryA 代码文件,然后复制回使用 LibraryA 的其他项目 IE:MainProjectB、MainProjectC、MainProjectD 。

好主啊!随着我的各种项目变得越来越大,这个问题变得越来越复杂。这个系统可以工作,但是非常非常乏味。

中场休息

所以有点简短的咆哮。 /TakesDeepBreath /sigh 我拒绝使用 git 命令行。它是 1980 年代 MS-DOS 的产物。一共20个人,14个人。 2014 年,美国的开发者仍然在用命令行苦苦钻研。在这个时代,我期望更多。我基本上不是在学习一种全新的命令行语言,更不用说必须在窗口和应用程序之间来回切换,只是为了做一些基本简单的事情,比如提交代码更改。只需快速点击 2-3 次鼠标并输入简短的消息即可完成。 git = 新的 hawtness + 不必要的命令行复杂性

话虽如此,我最常使用内置的 vs2013 git 功能来进行提交和分支/合并等。但据我所知,它似乎不支持子模块。为此我使用 SourceTree。

中场休息结束。

进入 git 子模块地狱

就像我说的,除了基本的核心功能之外,我还没有使用过 git,而且我只通过测试项目进行了初步测试,但我无法让 git 按照我需要的方式可靠地工作,而且在使用子模块时经常会出现这样的情况:有点混乱,而且很多时候会因为各种错误而不会提交。

我想做的是这个

  1. 创建名为 MainProjectA 的新统一项目并将其设为本地存储库
  2. 将 git 子模块从库(本地存储库)、库(本地存储库)等添加到 MainProjectA
  3. 如果我对 MainProjectA 内与 LibraryA 相关的代码文件进行更改,我希望能够将这些特定更改从 MainProjectA 内提交回 LibraryA 的存储库。

我什至开始编写一个实用程序,一旦检测到更改,它就会自动同步两个不同文件夹之间的文件。但我放弃了它,因为虽然它可以解决同步问题,但不能解决 git 提交问题。

另一个问题是我现有的所有具有本地存储库的统一项目都设置为休闲项目

<Unity Main Project Folder>
  |- .git
  |- Assets
    |-Company Name
      |- MainProjectA
  |- Library
  |- ProjectSettings
  |- .gitignore

<Unity LibraryA Folder>
  |- .git
  |- Assets
    |-Company Name
      |- LibraryA
  |- Library
  |- ProjectSettings
  |- .gitignore

我想要做的是在我的主项目中有一个 Library 文件夹,它是我的 Library 项目的子模块,更具体地说,我只想要以下内容<Unity LibraryA Folder>\Assets\Company Name\LibraryA\作为子模块包含在我的主项目文件夹中<Unity Main Project Folder>\Assets\Company Name\LibraryA\

<Unity Main Project Folder>
  |- .git
  |- Assets
    |-Company Name
      |- MainProjectA
      |- LibraryA (submodule)
  |- Library
  |- ProjectSettings
  |- .gitignore

但 SourceTree/git 抱怨我无法将子模块添加到现有的存储库文件夹中。<Unity Main Project Folder>\Assets\Company Name\

我本来打算继续写,但是……是的,我认为写得足够多了,现在我的目标应该已经描述得足够好了。

结论

我想我还可以问 git 作为一个产品是否已经足够成熟,它甚至可以让我做我想做的事情?或者考虑到 git 的架构根本不可能支持我想做的事情?

每次搜索都是空的,YouTube 没有任何帮助,而且浪费时间,更不用说我能找到的每个示例都是命令行示例,并且不涉及子模块。

在普通的 Windows 应用程序中,子模块不会成为问题。问题具体在于 Unity 如何将所有代码文件都包含在其项目中。那以及我如何努力保持我组织的文件夹结构完整。

请帮忙。请。普迪请。我求求你!我求求你!我跪在地上乞求! :P


Prime31 网站上有一个非常好的解释和流程:http://prime31.github.io/A-Method-for-Working-with-Shared-Code-with-Unity-and-Git/ http://prime31.github.io/A-Method-for-Working-with-Shared-Code-with-Unity-and-Git/我认为这是处理这种情况的最佳工作流程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity3d 和 git 子模块可能吗? 的相关文章

  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • 远程测试时如何搭建git开发环境

    这似乎是一个愚蠢的问题 但我觉得我对 GIT 相当了解 但我似乎无法按照我的意愿设置我的开发环境 我要么错过了一些非常简单的东西 要么我做错了 我在我的服务器上初始化了一个裸 git 存储库 将其克隆到我的本地计算机 提交我的文件并推送到原
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • 如何 git grep 仅一组文件扩展名

    如何执行 git grep 并将检查的文件限制为一组文件 我希望能够 grep cpp 和 h 文件的内容来查找 MyFunc 例如 git grep MyFunc hc 但是 这也匹配 c 文件和 cs 文件 Use git grep M
  • `git ls-files -s` 输出中不同字段的含义是什么?

    在 Git 中 命令返回的典型结果行git ls files s好像 100755 be2c2e9b0966253096472d4b482c458bc892e493 0 gitignore 这些字段是什么意思 不用再犹豫了git ls fi
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 哪个是更智能的 git 协议,ssh 或 git(通过 ssh)或 https 协议?

    哪个高效 SSH 或 Git 文件压缩 我对 Git 的理解是 git 协议很智能 因为通信两端都有一个协议代理来压缩文件传输 从而通过有效地使用网络带宽来实现更快的克隆 From 我发现了以下说法 For secure authentic
  • 如何合并两个连续的 git 存储库

    我有一个相当独特的情况 我有一个名为 Project1 的存储库 我在其中工作了一些时间 几个月 一年后 我创建了存储库 Project1 Again 从 Project1 停止的地方开始 现在 我希望修订历史记录是连续的 因此我希望它们合
  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • 使用终端时 Git 推送在总计后卡住了?

    我尝试将一些文件推送到Github 总大小只有22 2M 我不知道为什么它在总行之后卡住了 我读过推送到 Github 时 Git 推送挂起 https stackoverflow com questions 16906161 git pu
  • `git Reset HEAD file` 是否也检查该文件?

    我错误地向 git 添加了一个目录 当我按照提示操作时here https stackoverflow com questions 348170 undo git add通过执行以下操作来撤消添加git reset HEAD
  • Git 到 TFS 源代码管理迁移

    我想看看 TFS 如何为我的命令工作 所以我想将我们当前的 GIT 存储库移动到 TFS 数据库 我们使用 GIT 来获得普遍的分支支持 因此我想使用 TFS 2010 来解决该问题 现在的问题是 如何将 GIT 存储库导出到 TFS 显然
  • 如何让 Aptana Studio 记住 git ssh 密码

    我找不到任何有关如何获得 Aptana Studio 的内置 git 支持来记住执行推 拉操作的 ssh 密码的指南 信息 有人有什么想法吗 Aptana Studio 实际上是内置的 GIT 程序 它将在 Windows 上的 C Use
  • Pycharm 从 Git 子模块导入

    我在 Pycharm 中有一个 python 项目 其中有一个嵌套的 Git 子模块 这是文件夹结构 my git repo git submodule repo package1 foo py bar py package2 baz py
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • 使用 gitignore 嵌套存储库。

    我想嵌套 2 个 git 存储库 我一直在阅读子模块 有一段时间我认为它很棒 我想我可能想要其他东西 这是我的情况 首先 我想我应该提到我的所有服务器都托管网站 并以 staging domain com 和 domain com 实时 模
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • git 是否有任何静态接口?

    我一直在寻找一个宁静的 git api 但似乎没有找到 我得到的最接近的是 Github 的 api 来访问一些存储库信息 还有其他的实施吗 Orion Git API http wiki eclipse org Orion Server
  • Git 的企业采用率?

    最近一些同事之间进行了一场讨论 在当今的软件行业中 如何存在两个不同的世界 面向自由软件 公司的 Question Git 在企业环境中的使用情况如何 您在企业环境中使用 Git 的体验如何 无论如何 我们在工作场所使用 git 每个人都对

随机推荐