Почему я всегда должен слить вручную на git pull? - PullRequest
5 голосов
/ 31 июля 2011

Я новый пользователь git и не могу понять, как это обойти.У меня был некоторый опыт работы с SVN, и я придерживаюсь поведения SVN.

Каждый раз, когда я извлекаю файлы из удаленного репозитория, и измененный мной файл также изменяется удаленно, он нуждается в объединении.Я могу понять конфликты слияния для сложных изменений, но я вижу конфликты слияния для очень небольших изменений (например, изменение одной строки в разных функциях).Насколько я помню, SVN мог объединить большинство из них автоматически и переведет файл в конфликтующее состояние только в случае сбоя автоматического слияния.

Для git это происходит каждый раз и заставляет открыть git mergeинструмент.Есть ли способ автоматически объединить файлы?Я пропускаю некоторые настройки, которые по умолчанию помещают хранилище в конфликтный набор по умолчанию?

Ответы [ 2 ]

8 голосов
/ 31 июля 2011

Частой причиной этого являются разные окончания строки. Вы делитесь репо с кем-то еще, используя другую ОС? SVN делает некоторые манипуляции с окончаниями строк. Git, с другой стороны, хранит файлы побайтно, как они есть по умолчанию. Это означает, что когда пользователь Windows сохраняет файл с окончанием строки \ r \ n, а пользователь Linux сохраняет файл с переводом строки \ n, каждая строка выглядит измененной, и если какие-либо другие изменения находятся в процессе воспроизведения, это вызывает конфликты повсюду. Чтобы изменить способ обработки концов строк, используйте параметр конфигурации «core.autocrlf». В репозитории, в котором используются разные ОС, я рекомендую установить для него значение «input» для пользователей Linux и «true» для пользователей Windows:

git config [--global] core.autocrlf input

или

git config [--global] core.autocrlf true

На самом деле, я бы сказал, просто используйте эти настройки глобально все время. Они спасут тебя от сердечной боли. Прочтите больше о core.autocrlf на странице справки git-config и обратите внимание, что если вы страдаете от этой проблемы и включаете autocrlf в существующем репозитории, вы можете столкнуться с некоторым поразительным поведением, но это можно объяснить.

3 голосов
/ 31 июля 2011

Из руководства:

https://book.git -scm.com / book / ru / v2 / Git-Branching-Basic-Branching-and-Merging

git commit -a

На этом этапе две ветви разошлись, и в каждой были внесены разные изменения.Чтобы объединить изменения, сделанные в эксперименте, с мастером, запустите

git merge экспериментальный

Если изменения не конфликтуют, все готово.Если есть конфликты, в проблемных файлах, показывающих конфликт, останутся маркеры;

git diff

покажет это.После того, как вы отредактировали файлы для разрешения конфликтов,

git commit -a

подтвердит результат слияния.Наконец,

gitk

покажет хорошее графическое представление полученной истории.

Q: Какой клиент Git вы используете?Инструмент командной строки Git?Или что-то еще?

В: Кроме того, речь идет о файлах как Linux, так и Windows?Или они из разных сред?

...