TLDR;這將是一個冗長的帖子,但我相信很多unity3d開發者也遇到了同樣的問題。一個問題需要一個明確的,一勞永逸的答案來保存我們的集體理智。unity3d和git子模塊有可能嗎?
所以我在過去的2年中一直使用git,但我還沒有深入到這個過程中。我可以分支/合併來自bitbucket/github等的push pull,並且對於常規的獲勝表單/傳統應用程序來說工作得很好。
這是問題所在。我很久以前從xna/silverlight移到unity3d並統一爲了添加一個對庫的引用,你實際上必須將源庫中的源文件複製到你的unity項目文件夾中。雖然unity允許你將* .dll文件放入Plugin文件夾,但是有明顯的跨平臺兼容性問題,因此我從不想去那裏。
我有十幾個圖書館項目,提供從AI到內容管理,日誌記錄,抽象用戶輸入系統等各種功能,我一直在爲將來的遊戲製作新的關卡編輯器。
每個單獨庫項目它的自我是一個整體項目,每個項目的代碼文件團結這樣
Assets\<company name>\<project name>\
Assets\<company name>\<library name>\
Assets\<company name>\<another library name>\
我這樣做是爲了讓事情不像許多是其他資產的高度組織化的組織在統一資產商店。 :(
所以我的關卡編輯器項目使用了多個庫項目,其代碼已經通過複製粘貼導入,每個庫本身都託管在自己的本地git存儲庫中,所以當我從庫中複製粘貼代碼文件項目我的主要單位的項目,我會自動丟失任何提交更改的能力我做出了圖書館混帳回購協議。
我一直在這個去年做什麼一直休耕
- 開始主體工程
Assets\<company name>\<main project name>\
- 導入任何庫項目(複製/粘貼代碼文件)
Assets\<company name>\<library name>\
- 如果我需要對其中一個庫進行更改,通常只需編輯我正在處理的主項目中的庫代碼文件。 (否則更復雜)
- 因爲主項目也是一個git倉庫,所以我對任何庫文件所做的更改也會被承諾到主項目的倉庫。
- 經過一段時間,我使用CodeCompare(diff實用工具)對
Assets\<company name>\<library name>\
進行文件夾比較,以及之前從中複製庫文件的庫的原始位置。 - 我刻意比較每個更改的代碼文件差異,並將我在主項目中所做的更改遷移到庫的原始位置。
- 既然這樣做了,庫就是一個git repo(第二次)我必須對代碼文件進行的各種更改進行提交。
隨着這種瘋狂,這裏還有另一個問題。主要項目不是我現在正在進行的唯一主要項目。我有幾個項目都參考(通過複製/粘貼)這些其他庫。所以,現在我已經更新了庫的代碼並提交了它,現在我必須回顧使用庫的每個主項目,並將庫git repo中的更改複製/粘貼到這些主項目。
工作流量從summerized複製LibraryA-
MainProjectA->代碼文件>改性內部MainProjectA->通過DIFF比較合併LibraryA的文件返回到原來的文件夾LibraryA的位置 - > LibraryA的代碼文件,然後複製回LibraryA的文件其他使用LibraryA IE的項目:MainProjectB,MainProjectC,MainProjectD。
好主!隨着我的各種項目越來越大,這個問題越來越複雜。這個系統可以工作,但是非常非常繁瑣。
中止
所以有點咆哮。/TakesDeepBreath/sigh我拒絕使用git命令行。它發生在1980年代的MS-DOS ala。這是20人驚嚇了14人。 2014年和我們的開發人員仍然在用命令行開玩笑。在這個時代,我期待更多。我不是基本上學習一種全新的命令行語言,更不用說必須在Windows和應用程序之間切換回來和第四步,只是爲了做一些基本上簡單的事情,比如提交代碼更改。只需要2-3次快速點擊鼠標和一個簡短的輸入信息就可以完成所有需要的操作。 git = new hawtness +不必要的命令行復雜度
話雖如此,我經常使用內置的vs2013 git功能進行提交和分支/合併等。但它似乎並不支持子模塊,據我所知。因此,我使用SourceTree。
End End。
輸入git的子模塊地獄
就像我說的,我還沒有使用Git的很多超越它的基本核心功能,我還只能通過測試的項目進行初步測試,但我不能讓git的可靠的工作方式我需要它並且經常在使用子模塊時會出現一些混淆,並且由於各種錯誤而經常不會提交。
我想要做的就是這個
- 創建一個名爲MainProjectA新的團結項目,使之成爲當地的回購
- git的子模塊(縣)MainProjectA從LibraryA的(本地回購),LibraryB添加(本地回購)等
- 如果我在MainProjectA內部更改與LibraryA相關的代碼文件,我希望能夠在MainProjectA內將這些特定更改提交回LibraryA的回購。
我甚至已經開始編寫一個實用程序,該程序會在檢測到更改後立即自動同步2個不同文件夾之間的文件。但我放棄了它,因爲雖然它可以解決同步問題,但它不會解決git commit問題。
另一個問題是,有一個本地回購所有現有統一項目設置爲休耕
<Unity Main Project Folder>
|- .git
|- Assets
|-Company Name
|- MainProjectA
|- Library
|- ProjectSettings
|- .gitignore
<Unity LibraryA Folder>
|- .git
|- Assets
|-Company Name
|- LibraryA
|- Library
|- ProjectSettings
|- .gitignore
我想要做的就是在我的主要項目LibraryA的文件夾,那是我LibraryA的一個子模塊項目,更具體地說我想只有<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的抱怨,我不能一個子模塊添加到現有的回購FOL DER。 <Unity Main Project Folder>\Assets\Company Name\
我打算繼續寫作,但是......我認爲這已經足夠寫作了,現在我的目標應該足夠好地描述了。
結論
我想我也可以問天氣Git有足夠成熟的產品,它甚至可以讓我做什麼,我試圖做的?或者,考慮到git的架構來支持我想要做的事情,這是不是可能?
每個搜索都已經空了,YouTube沒有任何幫助和浪費時間,更不用說我能找到的每個例子都是一個命令行示例,並且不會觸及子模塊。
在正常的Windows應用程序中,子模塊不會成爲問題。問題的具體表現在團結如何讓它的項目中包含所有代碼文件。這和我如何試圖保持我的有組織的文件夾結構完好無損。
請幫忙。請。珀迪請。我求求你!我求求你!在我的FRIEAKIN KENES BEGGING上! :P
子模塊是邪惡的。只是谷歌它。你爲什麼不爲你的庫創建dll並使用類似NuGet來管理版本和下載dll?你甚至可以獲得編譯時間,因爲Unity不需要編譯每次保存文件時所做的每件事(順便說一句,你不需要dll來避免更長的編譯時間,你可以通過將代碼放入Plugins文件夾:\ Assets \ Plugins \ ...) –
Roberto
對於大多數Unity項目,我使用PureMVC的C#端口。這是一個DLL,並且適用於iOs,Android,Mac和Window的項目。 否則爲什麼不使用unitypackage導入/導出機制?資產商店的所有插件都使用它來分發其內容。我用它來將資產從一個項目轉移到下一個項目,並且它似乎正常工作。 –
這就像我最喜歡的stackoverflow問題!很好地表達和說明,以及我正在處理的內容。自從兩年前發佈這個問題以來,您是否找到任何新的解決方案或獲得了有關此問題的其他見解? – Junuxx