防止Git删除被忽略的文件

时间:2011-02-14 06:24:55

标签: git heroku git-branch

我有一个用于本地开发的主分支和一个用于部署到heroku的heroku分支。我有一个我忽略的conf文件,并且没有检查master,因为它是私有的,但是在heroku分支中它没有被忽略,并且它被添加到repo中,因为heroku服务器需要它才能工作。

问题:我注意到当我从master到heroku进行git checkout时,它从master中删除了我的conf文件。 heroku conf文件必须只是自动覆盖master上的同一个文件,因为该文件被忽略,git没有警告我,我有未提交的更改,我做了...丢了......

如何防止此类事件发生?有没有办法得到关于它的警告,或者我应该调整我管理事物的方式。

2 个答案:

答案 0 :(得分:2)

如果您愿意调整管理方式,我建议您为所有私人配置设置环境变量。 Heroku支持它们,它们极大地简化了开源项目的部署和存储库设置(参见http://devcenter.heroku.com/articles/config-vars)。

答案 1 :(得分:1)

如果您愿意稍微改变一下您的工作流程,听起来您应该在本地检查该配置文件。我有类似的需求,我做了类似的事情:

Workflow:
Master -> Work -> Heroku

在这种情况下,您可以将配置文件与任何其他私有文件一起检查到Work。要提交,您需要转移到master和用户cherry-pick处理所有非私有提交。我使用了所有不以NOCOMMIT:开头的提交,并将其构建到我调用的pull-work.sh

脚本中

通过这种方式,您不会破坏DVCS的模型,其配置文件可能与远程存储库分开进行版本化。

这是pull-work.sh。这是由另一个SO用户在我的一个类似但尽管不同的问题上开发的。

#!/bin/sh

BRANCH=`git branch | grep ^\\* | cut -d' ' -f2`
if [ $BRANCH != "master" ]; then
  echo "$0: Current branch is not master"
  exit 1
fi

git log --pretty=oneline work...master | grep -v -E '(NOCOMMIT|DEBUG):' | cut -d' ' -f1 | tac | xargs -l git cherry-pick