Как я могу иметь разные версии файла в локальном рабочем каталоге, удаленном рабочем каталоге и цели git ftp? - PullRequest
0 голосов
/ 24 августа 2011

Я использую Git для управления проектом CodeIgniter. Я работаю на своей локальной машине и отправляюсь на удаленный сервер, где проверяю все. Затем я использую git ftp push для обновления рабочего сайта на другом хосте.

Теперь, чтобы сделать это, мне нужны три разных файла index.php, по одному для каждой среды, где я просто установил другую переменную среды.

Так что мне нужно gitignore файл index.php и даже git-ftp-ignore. Для FTP это работает. Для обычного gitignore это не так: он постоянно обновляет файл index.php на удаленном сервере.

Я попытался сделать git rm --cached index.php, но получилось, что он полностью удаляет файл index.php на удаленном сервере.

Что я делаю не так?

Редактировать: Кажется, это не то, что я могу сделать с git, но Я нашел лучший способ установить переменную среды CodeIgniter .

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Во-первых, механизм игнорирования никак не влияет на файлы, которые уже отслеживаются в хранилище. Итак, если вы хотите, чтобы .gitignore работал, вы должны удалить файл из репозитория (как вы это сделали с git rm --cached), но затем, как вы заметили, он будет удален при обновлении удаленного репозитория.

Итак, я не думаю, что вам следует .gitignore файл в этой ситуации. В семантике пропущенных файлов в git есть тонкость, которая поймала меня несколько раз - игнорируемые файлы рассматриваются как одноразовые , поскольку механизм предназначен для продуктов сборки. Здесь у вас есть файл, который вы хотите игнорировать, но он ценный, и в настоящее время git не может его указать.

Например, в вашей ситуации, если вы воссоздаете index.php вручную, это будет работать нормально, но затем, если вы используете git checkout old-commit, чтобы вернуться к старой версии, где отслеживалась index.php, а затем вернитесь туда, где вы были раньше, с git checkout -, ваш index.php будет удален!

Я бы посоветовал вам изменить index.php на источник правильных настроек для переменной среды из какого-либо другого файла:

  1. вне хранилища
  2. или находится в хранилище, игнорируется и находится на пути, который никогда не отслеживался в хранилище

В идеале, тогда также добавьте значение по умолчанию, когда этот другой файл не существует.

0 голосов
/ 03 августа 2012

Это старый вопрос, но я тоже этим занимаюсь и боролся с ним в прошлом.

Что происходит, так как index.php изначально не был в вашем .gitignore, index.php отслеживается всеми вашими репозиториями.

Когда вы обновили .gitignore на своем сайте разработки и удалили его из своего репозитория, то все, что он делает, передается «удаленный index.php» на ваш рабочий сайт. Если на вашем рабочем сайте все еще отсутствует index.php в ITS .gitignore, он "удалит" index.php, как и положено.

Что вам нужно сделать, это убедиться, что вы добавляете index.php в каждый .gitignore в каждой ветви каждого репозитория. ТОГДА вы можете использовать rm --cached и все будет работать как положено.

...