webhamster
@webhamster

Как получить изменения git pull с автоматическим слиянием без конфликтов? Более последнее изменение — главное?

Я использую GIT для синхронизации персональной базы знаний. База знаний представляет из себя набор из нескольких тысяч файлов *.txt, *.html, *.xml формата.

Для синхронизации я использую следующую "универсальную" команду:
git add . ; git commit -a -m MyCommit ; git pull -s recursive -X theirs ; git push

Однако иногда, когда я правлю одно и то же место в файле с разных компьютеров, у меня возникают конфликты. И их нужно вручную разрешать. Это неудобно, и к тому же над базой знаний написана оболочка, которая перестает работать, если в корневом индексном XML-файле будет помечен конфликт (XML просто не распарсится). Приходится вручную править файл.

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

Вопрос: какими опциями git pull можно получить последние изменения так, чтобы конфликты автоматически разрешались? Другими словами: как сделать так, чтобы в случае конфликта просто применялись более поздние (т. е. более последние) изменения?
  • Вопрос задан
  • 4902 просмотра
Пригласить эксперта
Ответы на вопрос 3
alekciy
@alekciy
Вёбных дел мастер
Какой смысл на разных машинах править одно и тоже?

Нормальный рабочий процесс pull, внесли изменения, закомитились, push. На другой машине pull, внесли изменения, закомитились, push. Profit!
Ответ написан
Комментировать
webhamster
@webhamster Автор вопроса
> Нормальный рабочий процесс pull, внесли изменения, закомитились, push. На другой машине pull, внесли изменения, закомитились, push. Profit!

Это если всегда есть интернет. Часто нет возможности закоммититься по причине отсутствия сети, часто вырубают питание и топаешь с работы домой не закоммитившись. Ситуаций много разных. Плюс на мобильном устройстве забыл заплатить за инет. Мало ли что.
Ответ написан
Для Git нет понятия "более поздний коммит", для него все коммиты, сделанные от одного предка являются параллельными.
В вашей универсальной команде вы создаете коммит, а потом во время pull просите разрешать конфликты автоматически используя изменения из удаленной ветки, то есть разрешаете конфликты в пользу ранее сделанных вами изменений. Что, как мне кажется, немного противоречит желанию использовать самые последние сделанные изменения.

Возможно вам больше подойдет стратегия ours.

git pull -s ours

В этом случае ни какого слияния не производится, указатель просто перебрасывается на последний локальный коммит. Вся удаленная история изменений игнорируется.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы