【问题标题】:How can I exclude database.yml from a git repo while still being able to push to dotCloud?如何在仍然能够推送到 dotCloud 的同时从 git repo 中排除 database.yml?
【发布时间】:2012-05-23 11:04:23
【问题描述】:

我想在我的一个项目中添加一个远程 git 协作者,但我不想让他访问我在 database.yml 中的密码。我知道如何 .gitignore database.yml 并相应地清除 repo,但问题是我正在将这个特定项目部署到 DotCloud,据我所知,这需要 database.yml 成为 git repo 的一部分。我现在能想到的最好的解决方案是使用 rsync 推送到 DotCloud,但我宁愿直接从 git repo 推送。有人知道我可以这样做吗?

【问题讨论】:

  • 我不知道 DotCloud 是什么,但我很难相信任何平台都会要求你在 git repo 中输入密码。

标签: git dotcloud


【解决方案1】:

您有几个不同的选择,具体取决于您想做什么。

您可以将database.yml 文件放在您的.gitignore file 中,然后在使用 dotcloud push 时使用 rsync 而不是 git 来推送您的代码。

$ dotcloud push --all ramen

使用--all 选项将强制上传者使用“rsync”方法,从而推送您的所有文件。有关更多信息,请参阅此页面。 http://docs.dotcloud.com/guides/git-hg/#pushing-uncomitted-changes

如果您需要忽略文件,那么您可以创建一个.dotcloudignore 文件,并在其中添加您想要忽略的文件。

第二种更好的方法是根本不将您的密码放入您的database.yml 文件中。将您的密码添加为环境变量,然后您的database.yml 文件就可以安全无密码了。

$ dotcloud var set myapp MYVAR=MYVALUE

然后您可以像使用 environment.ymlenvironment.json 一样引用变量。更多信息可以在这里找到:http://docs.dotcloud.com/guides/environment/#adding-environment-variables

【讨论】:

    【解决方案2】:

    注意 1:假设更简单的方法是在 git 中创建别名,它会自动执行 rsync:

    git config alias.<yourcommand>; !<your script>
    

    例子:

    git config alias.sendtocloud "! echo 'rsync' && rsync && echo pull && git pull"
    

    稍后再试:

    git sendtocloud <continue parameters as after git pull >
    

    如果你想拥有纯 git 解决方案和至少 3 个 repos:

    • [Y]our:(database.yml 不重要?)
    • [C]ollaborator:(无 database.yml)
    • [D]otCloud(带有原始databse.yml)

    所以还有其他问题:

    1. 如何与合作者共享存储库? (由谁来拉或推?)
    2. 或者您是否有一些裸存储库来交换数据(由 [Y] 和 [C] 共享)?
    3. 正确吗,您的存储库中不需要包含 database.yml?

    注意 2:您可以使用 git 钩子来做几乎所有您想做的事情。例如,您甚至可以在更新等之前使用一些临时分支进行管理。

    注意 3:如果您的存储库中不需要 database.yml,那么您可以在 [y] 和 [D] 之前创建中间裸存储库,并使用“更新”挂钩将更改转发到 [D]

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      相关资源
      最近更新 更多