如何从 git 存储库中排除 database.yml,同时仍然能够推送到 dotCloud



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

根据您要执行的操作,您有几个不同的选项。

您可以将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

注意 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 个存储库:

  • [你]我们的:(数据库.yml不重要?(
  • [C]ollaborator: (without database.yml(
  • [D]otCloud (带有原始数据bse.yml(

所以还有其他问题:

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

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

注 3:如果您的存储库中不需要 database.yml,则可以在 [y] 和 [D] 之前创建中间裸存储库,并使用"update"钩子将更改转发到 [D]

最新更新