【问题标题】:how to push to a remote only some directories or files? in git如何仅将某些目录或文件推送到远程?在 git
【发布时间】:2011-12-23 02:18:43
【问题描述】:

我正在使用 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

根据their instructions里面.gitignore应该有这些行:

bin
build
include
lib
.Python
*.pyc

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

git push heroku master

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

谢谢

【问题讨论】:

    标签: django git heroku


    【解决方案1】:

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

    我给你的建议是创建一个单独的分支来将代码部署到 heroku。在这种情况下,您可以使用 master 分支进行主动开发,并将这些虚拟环境文件夹保留在其中 - 并有一个单独的分支(例如,“生产”)用于将代码部署到 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 挂钩自动删除文件的过程的方法。
    • 确保 Heroku 可以使用“master”以外的分支来运行代码(我认为它应该可以)。
    • 查看是否可以在不同的分支中使用不同的.gitignore 文件,如果可以,是否会取消手动删除这些文件的清理过程。

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回答,是的,我正在做本地开发。我担心它会改变工作流程,但我认为我可以使用结构或 shell 脚本自动执行此操作。
    【解决方案2】:

    你为什么不试试virtualenvwrapper?它将 virtualenv 与您的开发环境分开。 典型的场景是你在一个 virtualenv 上工作,比如说“main_env”。

     mkvirtualenv main_env
    

    当你需要另一个测试时,你可以这样做

    mkvirtualenv test_env
    

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

    如果您坚持保留它们,那么您可以简单地不在 git 中暂存它们。如果您不添加带有git add 的文件/文件夹,则不会将其发送到服务器。

    【讨论】:

    • 我想到了,但我在为 virtualenv、vim 和 ipython 处理 python 路径时遇到了这样的噩梦,我想避免使用不同的 virtualenv 弄乱它。
    • 好吧,那么显然出了点问题:) 设置 virtualenvwrapper 非常非常简单,并且有详细的解释(只需检查安装说明并自己查看)。如果您安装了 ipython,那么运行 manage.py shell 将启动 django 配置的 ipython shell。它只是工作。
    猜你喜欢
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 2011-01-01
    • 2014-10-30
    • 2010-11-28
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多