我有一個Git媒體資源庫,在那裏我保留了我將用於各種項目的所有JavaScript和CSS主文件和腳本。如何在另一個存儲庫中使用git存儲庫?
如果我在其自己的Git存儲庫中創建了一個新項目,如何在我的新項目中使用來自我的媒體庫的JavaScript文件,這樣我就不必更新這兩個腳本副本當我做出改變?
我有一個Git媒體資源庫,在那裏我保留了我將用於各種項目的所有JavaScript和CSS主文件和腳本。如何在另一個存儲庫中使用git存儲庫?
如果我在其自己的Git存儲庫中創建了一個新項目,如何在我的新項目中使用來自我的媒體庫的JavaScript文件,這樣我就不必更新這兩個腳本副本當我做出改變?
好問題。關鍵是git submodules。
開始閱讀的Git Community Book或的Users Manual
說你有倉庫PROJECT1,PROJECT2和媒體子模塊章...
cd /path/to/PROJECT1
git submodule add ssh://path.to.repo/MEDIA
git commit -m "Added Media submodule"
重複在其他回購...
現在,很酷的是,任何時候您對MEDIA進行更改時,都可以這樣做:
cd /path/to/PROJECT2/MEDIA
git pull
cd ..
git add MEDIA
git commit -m "Upgraded media to version XYZ"
這隻記錄了MEDIA子模塊WITHIN PROJECT2現在版本爲XYZ的事實。
它可以讓您100%控制每個項目使用的MEDIA版本。 git submodules非常棒,但你需要試驗並瞭解它們。
隨着巨大的力量來到被咬傷的大好機會。
如果我理解你的問題以及您希望以下的事情:
不幸的是,沒有最終的解決方案你想要什麼,但是有些事情可以讓你的生活更輕鬆。
首先,您應該決定一件重要的事情:是否要爲項目存儲庫中的每個版本存儲對媒體文件版本的引用?例如,如果您有一個名爲example.com的項目,您是否需要知道2周前使用過哪種style.css,或者最新版本始終(或大部分)最好?
如果你不需要知道,解決方法很簡單:
但是,在大多數情況下,您想知道此版本信息。在這種情況下,你有兩個選擇:
儲存在一個大倉庫每一個項目。此解決方案的優點是您將只擁有媒體存儲庫的一個副本。最大的缺點是在項目版本之間切換要困難得多(如果您簽出不同的版本,您將始終修改所有項目)
使用子模塊(如答案1中所述)。通過這種方式,您可以將媒體文件存儲在一個存儲庫中,並且這些項目只包含對特定媒體回購版本的引用。但是這樣你通常會擁有許多媒體庫的本地拷貝,並且你不能在所有項目中輕鬆修改媒體文件。
如果我是你,我可能會選擇第一個或第三個解決方案(符號鏈接或子模塊)。如果您選擇使用子模塊你仍然可以做很多事情,使您的生活更輕鬆:
提交您可以重命名的子模塊目錄,把一個符號鏈接到一個公共媒體目錄之前。當你準備提交時,你可以刪除符號鏈接,然後移除子模塊,然後提交。
您可以將媒體存儲庫的一個副本作爲遠程存儲庫添加到所有項目中。
您可以添加本地目錄,遠程這種方式:
cd /my/project2/media
git remote add project1 /my/project1/media
如果修改/我/ PROJECT1 /媒體文件,你可以提交併從/我/項目2拉/媒體沒有它推到遠程服務器:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
你是自由的,因爲你還沒有與其他用戶共享他們以後刪除這些提交(與git的復位)。
對於在Apache的'www'文件夾中工作的Web相關項目,您應該在'www'文件夾或項目的根目錄中放置'.htaccess'文件,其中包含'Options + FollowSymLinks',或者更好然後在新行上使用
考慮使用subtree而不是子模塊,它會讓你的回購用戶的生活變得更容易。您可能會在Pro Git book中找到更詳細的指南。
這裏是另一篇有關子樹vs 。submodule:http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/ – 2014-11-30 22:23:42
根據那篇文章,其中一個缺點是: >不混合super和sub的責任提交中的項目代碼和你在一起。沒有人爲此付出時間(海事組織) – 2016-11-22 14:59:57
我有問題與其他答案建議的子樹和子模塊...主要是因爲我使用SourceTree,它似乎相當錯誤。
取而代之,我結束了使用SymLinks,這似乎工作得很好,所以我在這裏發佈它作爲一種可能的選擇。
有一個完整的指南在這裏:http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/
但基本上你只需要在mklink提升的命令提示符的兩條路徑。確保使用/ J硬鏈接前綴。沿着這些方向的東西:mklink/JC:\ projects \ MainProject \ plugins C:\ projects \ SomePlugin
你也可以使用相對文件夾的路徑,並將它放在一個蝙蝠中,以供每個人在第一次檢查時執行項目。
例如: mklink/J。\ Assets \ TaqtileTools .. \ TaqtileHoloTools
文件夾鏈接後,您可能需要忽略引用它的主存儲庫中的文件夾。否則,你很好走。
注意我從另一篇文章中刪除了我的重複答案,因爲該帖子被標記爲此問題的重複問題。
該工作流讓我想起使用私人NPM模塊 http://stackoverflow.com/questions/7575627/can-you-host-a-private-repository-for-your-organization-to-use-with- npm#answer-7807279 – cyrf 2016-05-12 21:49:54
如果您更喜歡默認是最新版本,您可以添加一個腳本來將MEDIA提交傳播到所有依賴項目。 – jiggunjer 2016-08-11 07:39:09
這是如何與github集成的? – theonlygusti 2017-01-12 10:41:08