Управление исходным кодом Xcode 8 не показывает конфликтов
После того, как Xcode обновился до версии 8.0 (8A218a), у меня возникла проблема с переносом изменений из репозитория git из Xcode только, когда некоторые файлы конфликтуют. Мы все работаем над одной ветвью.
Пока конфликтов нет, все работает отлично, и я могу совершать, тянуть и толкать.
Но я понял, что всякий раз, когда у нас есть конфликт в некоторых файлах, Xcode больше не показывает конфликты. Он просто закрывает всплывающее окно pull, не показывая окно разрешения конфликта. Нет информации или что-то еще. Я не вижу
Удалите
сообщение. И я не могу нажать мою фиксацию (потому что изменения не вытягиваются), получая сообщение:
Убедитесь, что все изменения были извлечены из удаленного репозитория и повторите попытку
Я попытался потянуть с помощью терминала, но конфликтующий файл перепутался с сообщениями git, отображающими мои и другие люди в одном конфликтующем файле по этим сообщениям git. И файлы, над которыми работали другие люди, теперь показаны как мои собственные изменения/дополнения.
Я также попробовал обновить git до последней версии, которая в настоящее время 2.10.0. Не повезло.
Итак, я в итоге удаляю свою копию и клонирую последнюю и повторно использую изменения, которые я сделал, что очень раздражает.
У кого-нибудь есть решение для этого?
EDIT:
Вот что вы можете сделать как обходной путь с помощью терминала:
-
Откройте терминал и сообщите системе, в которой живут утилиты Xcode:
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
-
Установите "opendiff" как глобальный метод mergetool по умолчанию:
git config --global merge.tool opendiff
-
Откройте Xcode mergetool вручную и избавитесь от конфликта обычным способом:
git mergetool
-
Сохранить изменения, зафиксировать, нажать.
Ответы
Ответ 1
Я использую git в терминале для решения этой проблемы, используется mergetool.
Fisrt, я делаю некоторые изменения, но упс, не обновляюсь:
git fetch origin
git pull origin master
From ssh://[email protected]:22/projectname
* branch master -> FETCH_HEAD
Updating a030c3a..ee25213
error: Entry 'filename.c' not uptodate. Cannot merge.
Итак, обновляйтесь и повторите попытку, но у вас есть конфликт:
git add filename.c
git commit -m "made some wild and crazy changes"
git pull origin master
From ssh://[email protected]:22/projectname
* branch master -> FETCH_HEAD
Auto-merging filename.c
CONFLICT (content): Merge conflict in filename.c
Automatic merge failed; fix conflicts and then commit the result.
Итак, я решил посмотреть на изменения:
git mergetool
использовать mergetool для слияния конфликта
changes...no...their changes...
git checkout --ours filename.c
git checkout --theirs filename.c
git add filename.c
git commit -m "using theirs"
И затем мы попробуем последний раз
git pull origin master
From ssh://[email protected]:22/projectname
* branch master -> FETCH_HEAD
Already up-to-date.
answer from: Как разрешить конфликты слияния в Git?
Ответ 2
Следующая последовательность действий разрешает эту проблему:
Выход Xcode
Открыть терминал и cd в папке проекта
git checkout -.
git pull
Посмотрите на вывод команды pull. Он должен объявить, что есть конфликт в одном из файлов.
Откройте этот файл во внешнем редакторе (не Xcode). Теперь файл должен содержать специальные маркеры, описывающие конфликт (они были добавлены GIT)
Маркеры выглядят так:
<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
Удалить маркеры и разрешить конфликт
git добавить [имя файла]
git commit -m "конфликт в [имя файла] разрешен"
git нажмите
Ответ 3
Обновите Xcode 8.2.1
У меня была такая же проблема. Но она разрешена после обновления моей версии Xcode до 8.2.1.
Я разрешил все конфликты сегодня, с которыми я столкнулся с Xcode Version 8.1.
Ответ 4
обновите свой Xcode до последней версии и убедитесь, что у ваших партнеров тоже один и тот же
Ответ 5
Случается ко мне еще в Xcode 8.1, используя Github.
Выполнение git fetch
в терминале, а затем вытаскивание из Xcode снова, похоже, исправляет проблему для меня.