小编典典

使用 git,我如何忽略一个分支中的文件但将其提交到另一个分支?

all

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

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

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

理想情况下,我想.gitignore将 mp3 文件放在我的本地 master 分支中,这样当我将其推送到 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 在我的 master 分支中被忽略了,但它仍然存在,所以我的项目可以使用它。

$ git checkout -b unignored
$ cat /dev/null > .gitignore
$ git add Foo.ignored .gitignore && git commit -m "Unignore .ignored files"

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

有人对更好的设置方法有任何建议吗?

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


阅读 63

收藏
2022-08-15

共1个答案

小编典典

我写了一篇关于如何有效地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

2022-08-15