我對使用git非常陌生,以前並沒有真正試圖「組織」我所從事的任何項目。然而,我最近剛購買了個人使用的開發服務器,並且我想開始組織我所有的項目並使用版本控制。git中的子模塊庫,以最大限度地減少冗餘
我已經花了近8個小時的項目組織文件研究不同的推薦方法,我意識到,這是一個非常主觀的問題。然而,我已經開發了一個系統,我認爲它可以用於任何原因,而且我有一個關於如何使用目錄結構完成特定任務的非常客觀的問題。
目前我正在尋找到一個結構類似以下內容:
src/ - All deliverables in an uncompiled form (PHP files, c source files, etc)
data/ - Crucial but unrelated data (SQL databases, etc.)
lib/ - Dependencies -- THIS IS WHERE MY QUESTION LIES
docs/ - Documentation
build/ - Scripts to aide in the build process
test/ - Unit tests
res/ - Not version controlled. Contains PSD files and non-diff-able stuff
.gitignore
README
output.zip - Ready-to-install finished product (just unzip and go)
正如我提到的 - 這lib/
目錄在我的真正的問題旋轉。這需要包含我的項目運行所需的所有文件和程序,但這些文件和程序超出了我的項目範圍,因此我不會進行編輯。我需要這個文件夾的一些功能有:
- 由於這些都需要我的最終產品來運行,它們必須包含在output.zip
- 我想這個文件夾進行版本控制,使任何人誰下載我的git存儲庫將有權訪問所有依賴項
- 如果幾個項目具有相同的依賴關係,我不想在我的服務器上有相同文件的18個冗餘副本
- 我希望能夠拉這些來自我的其他項目的依賴關係(一個項目應該能夠作爲單獨項目的庫)
我可以通過使用虛擬目錄(符號鏈接)來避免擁有18個相同文件的冗餘副本,但是根據我的理解,git會將此符號鏈接原樣複製到存儲庫中而不復制文件。因此,如果其他人抓取我的倉庫,他們將有一個懸掛指針,沒有庫。
起初,它看起來像我能做什麼,我想用git-submodule。但從我的理解,這採取了另一個存儲庫的全部內容,並將其視爲一個子目錄。因此,如果我包括「依賴一個」我的庫文件夾會看起來像:
/lib/A/src/
/lib/A/data/
...
/lib/A/test/
.gitignore
README
output.zip
在腳本(PHP,Perl等),我大概可以加載使用require('lib/A/src/dependency.php')
依賴的情況下,但在案件DLL或二進制文件的文件我沒有簡單的方法來從output.zip讀取輸出文件。我可以將完成的項目直接存儲在根目錄下,而不是包裝在一個漂亮的zip文件中,但是如果項目是一個網站 - 這可能意味着數百個文件混亂了我的存儲庫根目錄。
如何將另一個存儲庫作爲我自己的庫引入,在我自己的項目中輕鬆引用庫文件,將庫有意地複製到提取我的存儲庫的任何人,並防止我的開發中的相同文件的多餘副本服務器?
編輯:在谷歌搜索一段時間後,我發現this similar issue,但它只能解決PHP項目。儘管自動加載器可能允許您在PHP環境中掩蓋底層文件系統,但您如何將類似的方法應用於C++項目?還是一個Python項目?還是一個Java項目?
當我今天想到更多關於這個項目的時候,我想到了一些其他的想法,這可能需要一個新的思維方向。首先是非常深的圖書館巢穴問題。如果項目A依賴於依賴於項目C++項目B,其取決於項目d,那麼你將有一個目錄結構如下所示:
A/lib/
A/lib/B/
A/lib/B/lib/
A/lib/B/lib/C/
A/lib/B/lib/C/lib/
A/lib/B/lib/C/lib/D/
顯然,這不僅會招人煩,但以自己的方式是多餘的。
正常人在做git存儲庫時如何處理依賴關係?
我可以理解使用特定於語言的工具來管理冗餘的好處(比如使用'npm'作爲node.js),但是當您的某個項目依賴於另一個項目時,您會做什麼?例如,我在PHP中使用了一個身份驗證腳本,這是我在**幾個**項目中使用的。這個身份驗證腳本本身可能是一個項目,但它也是許多其他項目的依賴項。 – stevendesu 2013-03-09 16:22:34
我不太熟悉php來評論,但由於它是像ruby這樣的解釋性語言,所以我可以畫出相似之處。這個問題在php http://stackoverflow.com/a/12244957/326543中討論Rubygems像功能。這可以成爲你的解決方案嗎? – 2013-03-09 16:27:54
我從來沒有聽說過作曲家,並通過它聽起來像(與薩蒂斯安裝)的介紹閱讀它可以做我所需要的。聽起來像我在我之前有一個很大的學習曲線=)我會留下這個開放一段時間,看看是否有人使用目錄結構和git的一個輝煌的解決方案,但如果沒有什麼出現,那麼你一定會得到綠色的檢查。 – stevendesu 2013-03-11 03:13:57