2013-03-05 2 views
46

У меня есть репо под названием myrepo на удаленном сервере beanstalk.Git - Игнорировать файлы во время слияния

Я клонировал его на свою локальную машину. Созданы два дополнительных филиала: staging и dev. Оттолкнули эти ветви на удаленный.

Сейчас:

local     remote     server 
-------------------------------------------------------- 
master ==> Pushes to `master` ==> deployed to `prod` 
staging ==> Pushes to `staging` ==> deployed to `staging` 
dev  ==> Pushes to `dev`  ==> deployed to `dev` 

У меня есть файл с именем config.xml, который отличается по каждой отрасли.

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

Причина, по которой я хочу это, имеет сценарий развертывания, который вытягивает (проверяет) конкретную ветвь и разворачивается на соответствующих серверах. Таким образом, нам нужен файл config.xml этой конкретной ветви, как указано выше, при развертывании.

Я думаю .gitignore не работает. Каковы другие варианты? Обратите внимание, что проигнорированный файл должен быть частью проверки и фиксации, что важно. его следует игнорировать только во время слияний.

Спасибо!

+0

В режиме по умолчанию, Git тянуть это сокращение для мерзавца выборки с последующим мерзавца слияния FETCH_HEAD. Поэтому вы говорите о конфликте друг с другом. – zzk

+0

Хорошо, я бы сказал, его оформление. Не тянуть. Я уточню вопрос, чтобы быть понятным. –

+0

Возможный дубликат [Git: игнорировать некоторые файлы во время слияния (сохранить некоторые файлы, ограниченные одной ветвью)] (http://stackoverflow.com/questions/3868491/git-ignore-some-files-during-a-merge- keep-some-files-limited-to-one-branch) – givanse

ответ

26

В итоге я нашел git attributes. Попытка. Работаем до сих пор. Пока не проверял все сценарии. Но это должно быть решение.

Merge Strategies - Git attributes

+1

ссылка не работает ... –

+2

но я нашел это [git-scm.com/book/ch7-2.html#Merge-Strategies](http://git-scm.com/book/ch7- 2.html # Merge-Strategies) –

+0

Новая ссылка: https://git-scm.com/docs/merge-strategies – Liosan

3

Вы можете начать использовать с помощью git merge --no-commit, а затем отредактировать слияние, как вам нравится, например, путем неупорядочения config.xml или любого другого файла, а затем зафиксировать. Я подозреваю, что вы хотите автоматизировать его дальше, используя крючки, но я думаю, что стоило бы пройти вручную хотя бы один раз.

+0

«git attributes» предлагает любое прямое решение? Я не могу это понять. http://git-scm.com/book/en/Customizing-Git-Git-Attributes#Merge-Strategies –

2

Вы можете использовать .gitignore держать config.xml из хранилища, а затем использовать post commit hook, чтобы загрузить соответствующий config.xml файл на сервер.

+1

Я знаю, что это взломать. Я пытаюсь найти чистое решение. Что относительно git 'attributes'. Любая идея, как это работает? Я не могу это понять. http://git-scm.com/book/en/Customizing-Git-Git-Attributes#Merge-Strategies –

+1

Я не слышал об этом, я пытаюсь применить атрибут merge = ours, выглядит многообещающим. – tlehman

+1

Git атрибуты потрясающие! Вы даже можете сказать git, как отличать нетекстовые файлы, поэтому вы можете использовать pdf2text для diff PDF-файлов! – tlehman

42

я получил по этому вопросу с помощью Git объединить команду с «--no-фиксации» вариант, а затем явно удален поставил файл и игнорировать изменения в файл. Например: сказать, что я хочу, чтобы игнорировать любые изменения в Myfile.txt я поступайте следующим образом:

git merge --no-commit <merge-branch> 
git reset HEAD myfile.txt 
git checkout -- myfile.txt 
git commit -m "merged <merge-branch>" 

Вы можете поставить заявления 2 & 3 в течение цикла, если у вас есть список файлов, чтобы пропустить.

+0

Я бы добавил «--no-ff», если вы хотите, чтобы файл не перезаписывался, когда слияние происходит в стратегии быстрой перемотки вперед. –

1

Здесь git-update-index - Зарегистрировать содержимое файла в рабочем дереве индекса.

git update-index --assume-unchanged <PATH_OF_THE_FILE> 

Пример: -

git update-index --assume-unchanged somelocation/pom.xml

+0

Это хорошо, когда вы нажимаете, но все еще жалуетесь, когда вытаскивание может перезаписать файл. – Rolf

+0

Вы пытались добавить файл в файл .gitignore. @Рольф –

Смежные вопросы