2010-03-19 50 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