Запретить Git от удаления проигнорированных файлов - PullRequest
5 голосов
/ 14 февраля 2011

У меня есть ветка master для локального развития и ветка heroku для развертывания на heroku.У меня есть файл conf, который я игнорирую и не проверяю в master, потому что он закрытый, но он не игнорируется в ветке heroku и был добавлен в репозиторий, потому что он необходим серверу heroku.

ПроблемаЯ заметил, что когда я делал git checkout от master до heroku, он удалял мой conf файл из master.Config файл heroku, должно быть, просто автоматически перезаписал тот же самый файл на master, и поскольку этот файл игнорировался, git не предупредил меня о том, что у меня были незафиксированные изменения, которые я сделал ... shucks ...

Как я могу предотвратить подобные вещи?Есть ли способ получить предупреждение об этом, или, возможно, мне следует настроить способ управления вещами.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2011

Если вы готовы к настройке управления вещами, я бы порекомендовал установить переменные среды для всех ваших личных настроек. Heroku поддерживает их, и они значительно упрощают развертывание и настройку хранилища для проектов с открытым исходным кодом (см. http://devcenter.heroku.com/articles/config-vars).

1 голос
/ 14 февраля 2011

Если вы хотите немного изменить свой рабочий процесс, похоже, что вы ДОЛЖНЫ проверять этот файл конфигурации локально.У меня есть похожие потребности, и я делаю что-то похожее:

Workflow:
Master -> Work -> Heroku

В этом случае вы должны проверить конфигурационный файл в Work вместе с любыми другими личными файлами.Для фиксации необходимо перейти к мастеру и пользователю 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
...