场景:我有一个Unity(游戏引擎)项目,该项目可构建到Windows,Android和iOS。一些文件夹仅与Windows相关,对于Android和iOS版本,该文件夹应不在项目之列。 Unity并没有提供执行此操作的好方法,因此我拥有该项目的三个副本(在不同的计算机上),并删除了这些文件夹。
这种方法的问题:有时,我会在其中一个克隆中进行更改,但是大约有16K个“更改”(实际上已删除)文件,这使得很难找到真正的文件。更改了GitHub for Desktop中的文件(我也使用了TortoiseGit,但是存在相同的问题)。
使用.gitignore吗?不,:起初我尝试使用.gitignore-但这是为了实际上忽略文件而设计的,即,不是版本控制文件。对我的用例无济于事,因为我希望控制那些文件的版本,并且一定不要在存储库中删除这些文件。
使用分支:如果我在分支中提交了删除操作,可能会起作用,但这意味着我必须将主分支中的所有更改合并到删除所有文件夹的分支中时间,所以对于我需要的东西似乎很麻烦(除非我错过了什么)。
使用.git \ info \ exclude::也许我只是做错了什么,但是它也没有隐藏已删除的文件。我假设这实际上也是从版本控制中排除文件的原因(因此删除的文件仍然显示)。但是我想要的是将文件保留在版本控制中,只是将它们隐藏在视图之外。
我看过subscriptions,它推荐Ignore deleted files in git?。这似乎很接近我的需要,但仍然感觉像是用大锤砸开螺母。
所以... 如何在一个克隆中隐藏(不忽略)已删除的文件?
答案 0 :(得分:1)
在GIT领域中,您可以拥有一个核心(所有通用文件)项目作为子存储库,该项目嵌入在构建目标特定的存储库中。这样,每次对核心的推送更改都将作为子模块对分支的更改而被提取
答案 1 :(得分:1)
显然,这样做的方法是使用sparse-checkout,另请参见Sparse Checkout。
在检查所有内容之前进行设置是一个好主意,不要在不知道自己在做什么时,尤其是在使用游戏时,疯狂尝试使用git命令来修复未通过这种方式完成的操作就像我刚才所做的那样,使用资产GB的项目(git read-tree --empty
不是我的好朋友)。 GitHub Desktop也开始向我抛出错误,直到我执行git reset
/ git checkout
为止,这也许应该是我应该首先要做的。
现在,一切似乎都是应该的方式……一路上我有点害怕(可能在很紧的期限内浪费了一个小时或两个小时,这真的很伤人。)
答案 2 :(得分:0)
使用Unity CMake 的另一种方法,但不方便Unity3d。
它允许您制定自动规则,以仅在一个存储库中生成具有相同或不同源文件的不同可执行文件:
add_executable(binary_name1 source1 source2 source3 ...)
add_executable(binary_name2 source1 source2 source4 ...)
add_executable(binary_name3 source3 source4 ...)
...
因此,您可以选择在编译Android和iOS版本时不使用Windows源文件。
CMake的官方网站:https://cmake.org/
编辑:也许是Unity的Cmake集成?