我有一个项目,我正在部署到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
Run Code Online (Sandbox Code Playgroud)
此时,Foo.ignored在我的主分支中被忽略,但它仍然存在,所以我的项目可以使用它.
$ git checkout -b unignored
$ cat /dev/null > .gitignore
$ git add Foo.ignored .gitignore && git commit -m "Unignore .ignored files"
Run Code Online (Sandbox Code Playgroud)
现在我有了一个分支,这些文件已经提交,正如我想的那样.但是,当我切换回我的主分支时,Foo.ignored就消失了.
有人有任何建议可以更好地设置它吗?
编辑:只是为了澄清,我希望mp3文件存在于两个分支中,以便当我在本地运行该站点(使用任一分支)时,该站点可以工作.我只想在一个分支中忽略文件,所以当我推送到GitHub时,它们也不会被推送.通常.gitignore适用于这种事情(即保留一个文件的本地副本,但不会包含在推送到遥控器中),但当我切换到签入文件的分支,然后返回到忽略文件的分支,文件消失.
小智 81
此解决方案似乎仅适用于某些已修补的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
Run Code Online (Sandbox Code Playgroud)
然后在.git/config文件中添加以下行:
[core]
excludesfile = +info/exclude
[branch "public_viewing"]
excludesfile = +info/exclude_from_public_viewing
Run Code Online (Sandbox Code Playgroud)
现在所有全局忽略的东西都在info/exclude文件中,特定的分支在info/exclude_from_public_viewing
希望有所帮助!
http://cogniton-mind.tumblr.com/post/1423976659/howto-gitignore-for-different-branches
Mur*_*phy 18
重要提示:Cognition.Mind接受的答案不起作用(现在已经好几年了,或者也许对于git的vanilla版本); 看到评论.可在此处找到有效的答案和解决方法:
另一种替代解决方法(针对我的特定问题,但要求手动存储操作或钩子的实现)将是git stash -u -a.当差异很大时,这很乏味.
最后,我现在要解决的问题是将我们的VM保存在我们的开发环境中,并info/excludes为分支进行适当设置,分别删除有问题的,未提交的文件/文件夹.
Dav*_*lar 14
我强烈建议考虑将这些MP3文件放在S3上.让它们成为你的Heroku推进的一部分(因此你的Heroku slug的一部分)将大大减慢你的dyno启动时间.由于Heroku使用EC2,如果文件在S3上并且只能由您的应用访问(如果用户没有直接链接到S3),您甚至不会支付任何带宽费用,只需支付50MB的费用.
sap*_*apy 12
假设我们要忽略build除production分支之外的所有其他分支的文件夹.因为我们想build在生产中推送文件夹.
1)不要包含build在.gitignore中.如果你这样做,它将永远被忽略所有分支.
2)exclude_from_public_viewing在里面创建一个文件./.git/info(这个文件夹已存在)文件夹touch ./.git/info/exclude_from_public_viewing
3)在内exclude_from_public_viewing写一行(因为你试图忽略build所有分支).
!build
4)有一个现有的文件.git/info/exclude.我们需要在其中添加以下行.
build
Run Code Online (Sandbox Code Playgroud)
我们想忽略build文件夹,但没有在.gitignore中添加它.那么git将如何知道忽略什么?答案是我们将它添加到exclude文件并有条件地传递该文件git config
5)现在我们必须有条件地取消分支build文件夹production.要做到这一点执行以下
6)有一个现有的文件,./.git/config我们需要添加以下内容 -
a)excludesfile = +info/exclude下面[core]
[core]
excludesfile = +info/exclude
Run Code Online (Sandbox Code Playgroud)
b)在./.git/configas 的末尾创建一个新的部分
[branch "production"]
excludesfile = +info/exclude_from_public_viewing
Run Code Online (Sandbox Code Playgroud)
解决方案2
有一个智能备用解决方案.假设你想build/在production早午餐中添加文件夹并在所有其他分支中忽略它.
1)将其添加到您的gitignore文件中.
2)在生产早午餐时,在执行git add时,强制添加git add文件夹build
您是否尝试过让 .gitignore 在您的分支中有所不同?
只要文件不在该分支上跟踪,您就应该能够根据您所在的分支忽略您想要的内容。
| 归档时间: |
|
| 查看次数: |
60507 次 |
| 最近记录: |