Ruby on rails 推送到特定Git存储库时排除特定文件
使用Git推送到特定存储库时,是否可以排除特定文件(*.ai,*.psd)Ruby on rails 推送到特定Git存储库时排除特定文件,ruby-on-rails,git,github,heroku,Ruby On Rails,Git,Github,Heroku,使用Git推送到特定存储库时,是否可以排除特定文件(*.ai,*.psd) 我的需求来自于尝试使用Git进行版本控制和部署。如果在部署中包括图形资源,则slug大小将大于所需大小。但是,我确实需要在我的主存储库中包含所有项目文件。您可以维护第二个分支以部署到Heroku,该分支不包含任何这些文件,但仍然从主存储库合并。(当然,当您修改master中的.ai和.psd文件时,您必须制定一个解决合并冲突的系统) 您所要求的具体内容是不可能的,原因很简单,当您推送时,您将确切的提交从一个存储库转移到另
我的需求来自于尝试使用Git进行版本控制和部署。如果在部署中包括图形资源,则slug大小将大于所需大小。但是,我确实需要在我的主存储库中包含所有项目文件。您可以维护第二个分支以部署到Heroku,该分支不包含任何这些文件,但仍然从主存储库合并。(当然,当您修改master中的.ai和.psd文件时,您必须制定一个解决合并冲突的系统) 您所要求的具体内容是不可能的,原因很简单,当您推送时,您将确切的提交从一个存储库转移到另一个存储库,并且两个没有相同树的提交根据定义是不同的提交 提示:最新版本的git有一个用于git状态的
--Cellar
选项,可以方便地解析诸如“M file1”和“DU file2”之类的信息(分别由我们修改和取消合并/删除)。您可以为部署分支编写一个git合并包装器,尝试合并,并自动清除预期的冲突:
git checkout deploy
if ! git merge master; then
git rm $(git status --porcelain | awk '/^DU/ {print $NF}')
fi
(我打印$NF
而不是$2
的原因是,如果重命名文件,它将看起来像“DU original\u name->new\u name”,并且放置在工作树中的副本将是new\u name,而不是original\u name。)
当然,如果您的情况是这样的,脚本可能会变得更复杂-您可以只查找某些扩展(将它们添加到限制性的awk模式中),甚至可以在perl脚本中捕获整个输出,这样您就可以轻松地执行一些更奇特的逻辑 要做到这一点,没有简单直接的方法。这当然是可以管理的,但是非常痛苦(git不是设计来做这件事的)
如果您要求Heroku提供一种从部署中排除某些文件的方法,可能会更容易。解决实际问题的简单方法是在存储库的根目录中创建一个
.slugignore
文件,列出不应打包在slug中的文件