Предотвратить локальные изменения в Git - PullRequest
62 голосов
/ 01 февраля 2010

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

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

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

Ответы [ 4 ]

82 голосов
/ 01 февраля 2010

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

8 голосов
/ 01 февраля 2010

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

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

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

5 голосов
/ 01 февраля 2010

Один из способов решения этой проблемы состоит в том, чтобы «выбирать» каждое изменение из вашей рабочей ветви в мастер, прежде чем переходить вверх по течению. Я использовал технику, в которой я включаю слово вроде 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), в главную ветвь.

1 голос
/ 21 декабря 2010

Вам нужен файл .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
...