2010-01-31 2 views
61

Я клонировал репозиторий, и ветка master в моем репо отслеживает origin/master. Я создал ветку work и изменил некоторые файлы конфигурации, специфичные для моей машины-разработчика, чтобы приложение работало.Запретить локальные изменения в Git

Мой нормальный рабочий процесс будет состоять в том, чтобы переключиться на master ветвь, слияние изменений сделано в work ветке и push те изменения вверх по течению. Проблема в том, что я не хочу, чтобы мои конкретные chanages были нажаты. Когда я сливаю свою ветвь work в master, эти изменения также объединяются.

Единственное решение, которое я нашел до сих пор, заключается не в том, чтобы зафиксировать эти изменения в work, но это не удовлетворительное решение.

+1

Такие конфигурационные файлы не должны находиться в хранилище на всех - удалить их. –

+0

дубликат http://stackoverflow.com/questions/2007397/howto-prevent-git-from-pushing-changes-to-some-files – vava

+1

http://stackoverflow.com/questions/655243/ignore-modified-but -not-commit-files-in-git –

ответ

80

Если вы хотите предотвратить использование (поэтому также нажатие) этих локальных файлов конфигурации, вы можете использовать git update-index --assume-unchanged. Файлы, помеченные этим флагом, будут считаться неизменными (до тех пор, пока вы не сбросите флаг с -no-take-unchanged)

+0

Что происходит с этими конфигурациями файлы при проверке другой ветки? – pomber

+0

@pomber AFAIK они остаются нетронутыми git. –

5

Один из способов решения этой проблемы - «переливать вишню», каждое изменение от вашей рабочей ветви до мастера, прежде чем вы будете продвигаться вверх по течению. Я использовал технику, где я включаю слово как NOCOMMIT в сообщение фиксации для только локальных изменений, а затем использовать сценарий оболочки что-то вроде этого:

#!/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 

Этих вишневое улавливает каждое изменение, которое не отмеченном NOCOMMIT (или DEBUG) в мастер-ветку.

8

Если файлы еще не отслеживаются, вы можете добавить их в файл .gitignore на свой локальный репозиторий, иначе вам нужно будет использовать git update-index --assume-unchanged, как сказал Маурисио.

Ниже приводится дополнительная информация о .gitignore файлов:

http://git-scm.com/docs/gitignore

0

Что вам нужно, это .gitignore файл и добавьте все файлы конфигурации в файл .gitignore.

После того, как файл .gitignore готов вам может понадобиться удалены конфигурационных файлов из кэша

Вот команда:

(Assume you use linux) 
vi .gitignore 
//Add all your config file inside 

//run the following command to remove your config file from GIT cache if your config files is already track by GIT 

git rm --cached myconfig.php 
Смежные вопросы