使用Git推送到特定的存储库时,是否可以排除特定文件(* .ai,* .psd)?推送到特定的Git存储库时排除特定文件
我的需求来自于尝试将Git用于版本控制和部署到Heroku。如果我将我的图形资产包含在展开中,则子弹大小比预期的要大。但是,我确实需要将所有项目文件包含在我的主要github存储库中。
使用Git推送到特定的存储库时,是否可以排除特定文件(* .ai,* .psd)?推送到特定的Git存储库时排除特定文件
我的需求来自于尝试将Git用于版本控制和部署到Heroku。如果我将我的图形资产包含在展开中,则子弹大小比预期的要大。但是,我确实需要将所有项目文件包含在我的主要github存储库中。
解决实际问题的简单方法是在存储库的根目录中创建一个.slugignore
文件,该文件列出不应该打包在slug中的文件。
太棒了!这对我有很大的帮助。谢谢 – stephenmurdoch 2010-03-20 11:40:25
谢谢!那正是我需要的! – 2010-03-20 21:37:40
您可以维护第二个分支以部署到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脚本中捕获整个输出,以便您可以轻松地做出更多花哨的逻辑...
我可以为不同分支单独排除文件吗?我需要在本地机器上创建两个项目吗?谢谢。 – 2010-03-19 17:29:54
您不需要两个分支机构的两个分支机构 - 这是使用类似git的核心优势之一。分支和合并非常简单。是的,你可以为不同的分支设置不同的.gitignores(毕竟这只是一个在存储库内的跟踪文件!),但请记住,gitignores不适用于已经被跟踪的文件 - 它们用于帮助你阻止提交事物(比如构建对象)还没有被提交。 – Cascabel 2010-03-19 17:39:46
嗯,好的,我必须在GIT上做更多的阅读(我是SVN用户试图切换的)。感谢您的建议。 – 2010-03-19 18:27:40
有没有一种简单的方法来做到这一点。这当然是可以管理的,但是有很多痛苦(git并没有设计成这样)。
如果您要求Heroku提供从部署中排除某些文件的方法,可能会更容易。
是的,我喜欢这个功能的主机解决方案。我会尝试向创作者发送便笺,看看他们是否有任何功能。 – 2010-03-19 17:36:37
按照约翰·托普利的回答,似乎这已经是可能的了。 – hasen 2010-03-20 20:44:35
有没有简单的方法来做到这一点。也许这个答案将有所帮助:http://stackoverflow.com/questions/2454661/heroku-and-github-integration-how-to-structure-the-project/2454778#2454778 – mckeed 2010-03-19 17:22:26
感谢您的评论。我想我只能找到一份工作(黑客)。 – 2010-03-19 17:28:41