2010-03-19 48 views
8

使用Git推送到特定的存儲庫時,是否可以排除特定文件(* .ai,* .psd)?推送到特定的Git存儲庫時排除特定文件

我的需求來自於嘗試將Git用於版本控制和部署到Heroku。如果我將我的圖形資產包含在展開中,則子彈大小比預期的要大。但是,我確實需要將所有項目文件包含在我的主要github存儲庫中。

+0

有沒有簡單的方法來做到這一點。也許這個答案將有所幫助:http://stackoverflow.com/questions/2454661/heroku-and-github-integration-how-to-structure-the-project/2454778#2454778 – mckeed 2010-03-19 17:22:26

+0

感謝您的評論。我想我只能找到一份工作(黑客)。 – 2010-03-19 17:28:41

回答

12

解決實際問題的簡單方法是在存儲庫的根目錄中創建一個.slugignore文件,該文件列出不應該打包在slug中的文件。

+0

太棒了!這對我有很大的幫助。謝謝 – stephenmurdoch 2010-03-20 11:40:25

+1

謝謝!那正是我需要的! – 2010-03-20 21:37:40

4

您可以維護第二個分支以部署到Heroku,其中不包含這些文件,但仍然從主合併。 (當然,在修改master中的.ai和.psd文件時,您必須制定一個解決合併衝突的系統。

您提出的具體問題是不可能的,原因很簡單,當您推送時,將確切的提交從一個存儲庫傳輸到另一個存儲庫,而兩個不具有相同樹的提交按定義是不同的提交。

提示:最新的Git版本有--porcelain選項git status這將給容易解析像「M文件1」,「杜文件2」的信息(修改和未合併/分別由我們刪除)。你可以寫你的部署分支的git-merge包裝它試圖合併,並自動清理的預期衝突:

git checkout deploy 
if ! git merge master; then 
    git rm $(git status --porcelain | awk '/^DU/ {print $NF}') 
fi 

(將我印$NF,而不是$2原因是,如果該文件的重命名,它看起來像是「DU original_name - > new_name」,並且放置在工作樹中的副本將是new_name,而不是original_name。)

當然,如果情況是這樣的,腳本可能會變得更復雜 - 您只能查找某些擴展(將它們添加到限制awk模式中),或者甚至在perl腳本中捕獲整個輸出,以便您可以輕鬆地做出更多花哨的邏輯...

+0

我可以爲不同分支單獨排除文件嗎?我需要在本地機器上創建兩個項目嗎?謝謝。 – 2010-03-19 17:29:54

+0

您不需要兩個分支機構的兩個分支機構 - 這是使用類似git的核心優勢之一。分支和合並非常簡單。是的,你可以爲不同的分支設置不同的.gitignores(畢竟這只是一個在存儲庫內的跟蹤文件!),但請記住,gitignores不適用於已經被跟蹤的文件 - 它們用於幫助你阻止提交事物(比如構建對象)還沒有被提交。 – Cascabel 2010-03-19 17:39:46

+0

嗯,好的,我必須在GIT上做更多的閱讀(我是SVN用戶試圖切換的)。感謝您的建議。 – 2010-03-19 18:27:40

3

有沒有一種簡單的方法來做到這一點。這當然是可以管理的,但是有很多痛苦(git並沒有設計成這樣)。

如果您要求Heroku提供從部署中排除某些文件的方法,可能會更容易。

+0

是的,我喜歡這個功能的主機解決方案。我會嘗試向創作者發送便箋,看看他們是否有任何功能。 – 2010-03-19 17:36:37

+0

按照約翰·託普利的回答,似乎這已經是可能的了。 – hasen 2010-03-20 20:44:35