猿问
下载APP

使用git,如何忽略一个分支中的文件但是在另一个分支中提交它?

我有一个项目,我正在部署到Heroku。源代码树包含一堆mp3文件(该网站将用于我参与的录制项目)。


我想把它的源代码放在GitHub上,但是GitHub对他们的免费帐户有300 MB的限制。我不想在一堆mp3文件上使用50 MB的限制。显然,我可以将它们添加到.gitignore文件中,以防止它们退出我的仓库。


但是,我使用了部署到Heroku git push heroku。mp3文件必须存在于我推送到Heroku的分支中,以便它们得到部署。


理想情况下,我想.gitignore在我的本地主分支中的mp3文件,以便当我将其推送到GitHub时,不包括mp3。然后我会保留一个本地生产分支,其中提交了mp3而不是忽略。要部署,我会将master合并到生产中,然后将生产分支推送到Heroku。


我不能让这个工作正常。


这是我正在尝试做的一个例子......


$ git init git-ignore-test

$ cd git-ignore-test

$ echo "*.ignored" >> .gitignore

$ git add .gitignore && git commit -m "Ignore .ignored files"

$ touch Foo.ignored

此时,我的主分支中忽略了Foo.ignored,但它仍然存在,所以我的项目可以使用它。


$ git checkout -b unignored

$ cat /dev/null > .gitignore

$ git add Foo.ignored .gitignore && git commit -m "Unignore .ignored files"

现在我有了一个分支,这些文件已经提交,正如我想的那样。但是,当我切换回我的主分支时,Foo.ignored就消失了。


有人有任何建议可以更好地设置它吗?


编辑:只是为了澄清,我希望mp3文件存在于两个分支中,以便当我在本地运行该站点(使用任一分支)时,该站点可以工作。我只想在一个分支中忽略文件,所以当我推送到GitHub时,它们也不会被推送。通常.gitignore适用于这种事情(即保留一个文件的本地副本,但不会包含在推送到遥控器中),但当我切换到签入文件的分支,然后返回到忽略文件的分支,文件消失。


慕粉4167745
浏览 99回答 3
3回答

慕少森

此解决方案似乎仅适用于某些已修补的git版本。查看指向解决方法的新答案以及其他答案以及后续注释,以了解哪些版本可能有效。我写了一篇关于如何有效地使用excludesfile不同分支的博客文章,例如一个用于公共github,一个用于heroku部署。这是快速而又脏的:$ git branch public_viewing$ cd .git/$ touch info/exclude_from_public_viewing$ echo "path/to/secret/file" > info/exclude_from_public_viewing 然后在.git / config文件中添加以下行:[core]excludesfile = +info/exclude[branch "public_viewing"]excludesfile = +info/exclude_from_public_viewing现在所有全局忽略的东西都在info/exclude文件中,特定的分支在info/exclude_from_public_viewing希望有所帮助!http://cogniton-mind.tumblr.com/post/1423976659/howto-gitignore-for-different-branches

慕尼黑8549860

重要提示:Cognition.Mind接受的答案不起作用(现在已经好几年了,或者也许对于git的vanilla版本); 看到评论。可在此处找到有效的答案和解决方法:https://stackoverflow.com/a/29583813/2157640另一种替代解决方法(针对我的特定问题,但要求手动存储操作或钩子的实现)将是git stash -u -a。当差异很大时,这很乏味。最后,我现在要解决的问题是分配我的VM,我们将开发环境保存在其中,并info/excludes为分支进行适当设置,分别删除有问题的,未提交的文件/文件夹。

慕雪6173905

我强烈建议考虑将这些MP3文件放在S3上。让它们成为你的Heroku推进的一部分(因此你的Heroku slug的一部分)将大大减慢你的dyno启动时间。由于Heroku使用EC2,如果文件在S3上并且只能由您的应用访问(如果用户没有直接链接到S3),您甚至不会支付任何带宽费用,只需支付50MB的费用。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答