如何只将某些目录或文件推送到远程?在git

时间:2011-11-06 15:03:00

标签: django git heroku

我正在使用heroku开发一个Django应用程序,他们使用git来推送代码。我的问题是他们需要这个文件结构:

heroku_project/
     requirements.txt (this a pip requirements file)
     procfile (this file tell heroku how to run your app)
     django_project (the project itself)
     lib
     bin
     build
     lib (these 4 folders belong to my python virtual env)

所以我必须在这个文件夹上初始化我的git所以这意味着有这些额外的文件:

heroku_Project/
     .gitignore
     .git

根据.gitignore内的their instructions,应该有以下几行:

bin
build
include
lib
.Python
*.pyc

问题是我想跟踪那些虚拟环境文件夹,因为有时我只安装python用于测试,我稍后会丢弃它们,或者我对它们进行实验性更改,我希望我可以使用git撤消这些更改,我的问题我如何跟踪这些文件夹,所以我需要从.gitignore中删除它们。问题是我什么时候

git push heroku master

因为这会推送那些文件夹而我们不希望这样,所以我如何有选择地推送文件和目录?或者你会用什么样的工作流来解决这个问题?

由于

2 个答案:

答案 0 :(得分:1)

首先,如果你在Heroku中进行积极的开发,那么你可能会死在水中。但是如果你在本地机器上进行开发 - 分支机构可能会帮助你。

我的建议是创建一个单独的分支,用于将代码部署到heroku。在这种情况下,您可以使用主分支进行活动开发,并将这些虚拟环境文件夹保存在那里 - 并且有一个单独的分支(比如“生产”),用于将代码部署到heroku。

每当您准备发布新版本的代码时,您应该切换到生产分支,合并来自master的更改,删除这些虚拟环境文件夹,然后推送到Heroku。实际上,该命令序列看起来像这样。

$ git checkout production
$ git merge master
$ rm -Rf bin build include lib .Python *.pyc
$ git commit -a -m "Cleanup for production."
$ git push heroku production

这似乎是最好的解决方案。您可能想要自己研究一些载体:

  • 通过shell脚本和git hooks自动删除文件的方法。
  • 要确保Heroku可以使用“master”以外的分支来运行代码(我认为它应该可以)。
  • 查看是否可以在不同的分支中使用不同的.gitignore文件,如果是这样 - 是否会删除手动删除这些文件的清除过程。

希望这有帮助!

答案 1 :(得分:0)

为什么不试试virtualenvwrapper?它将virtualenv与您的开发环境区分开来。 典型的情况是你在一个virtualenv上工作,让我们说“main_env”。

 mkvirtualenv main_env

当你需要另一个进行测试时,你可以做到

mkvirtualenv test_env

您可以使用一个命令在workon [name]之间切换它们。你真的不应该把这些文件保存在git中。他们与项目无关。并且由于virtualenwrapper,您不需要git在这些虚拟环境之间切换。

如果你坚持要保留它们,那么你就不能把它们放在git中。如果您不添加git add的文件/文件夹,则不会将其发送到服务器。