Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 推送到特定Git存储库时排除特定文件_Ruby On Rails_Git_Github_Heroku - Fatal编程技术网

Ruby on rails 推送到特定Git存储库时排除特定文件

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推送到特定存储库时,是否可以排除特定文件(*.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中的文件


没有简单的方法可以做到这一点。也许这个答案会有帮助:谢谢你的评论。我想我只需要找一份工作(黑客)就行了。我可以为不同的分支单独排除文件吗?我需要在本地计算机上创建两个项目吗?谢谢。两个分支不需要两个存储库——这是使用git的核心好处之一。分支和合并非常容易。是的,您可以为不同的分支使用不同的.gitIgnors(毕竟,它只是存储库中的一个跟踪文件!),但请记住,gitIgnors不适用于已跟踪的文件-它们帮助您避免提交尚未提交的内容(如构建对象)。啊,好的,我将不得不对GIT做更多的阅读(我是一个试图切换的SVN用户)。谢谢你的建议。是的,我总体上喜欢托管解决方案,除了这个功能。我会试着给创作者发个便条,看看他们是否有任何功能。根据约翰·托普利的回答,这似乎已经是可能的了。谢谢!这正是我需要的!