Недавно я столкнулся с действительно загадочной проблемой с Git при слиянии двух ветвей. Проблема возникла, когда авто-слияние попыталось объединить 2 файла, которые содержат «в основном» пробел, вставляя INSIDE строку. Для Exemple, посмотрите на этот файл после мерзавца слияния (или GIT Rebase):Git merge путают про пробелы внутри строки
<<<<<<< f03b9ee0db23cbe39ff231d8fcc3b37bac20cc3d¬
1 public static function findTopParent($tid, $domaine_tree) {¬
2 =======¬
3 public static function findTopParent($tid,$domaine_tree) {¬
4 >>>>>>> Version 8 - last extraction¬
(Обратите внимание на пробел после $ TID,) Цель этого «света» редактировать был только играть хорошо с Drupal кодирования конвенции (просить оставить пробел после комы в параметрах функции).
Я должен добавить, что это был один случай, когда merge left revision mark. Но есть много случаев, когда автоматическое слияние работает без ошибок, но делает ужасную работу по объединению файлов с куском кода сверху (без пространства внутри) и фрагментом кода ниже (с пробелом)
Но запустив мое обычное git-объединение без особого предупреждения или ошибок, мой сайт перестает работать со всеми типами ошибок переопределения функций. Открыв файлы, я увидел, что фрагменты кода повторяются повсюду, оригинальный код выше и «новый» код с косой минутой в функциях ниже. Так что, черт возьми ????? Почему простая модификация, подобная этой, интерпретируется Git как новая строка или, что еще хуже, новые куски кода?
Я измотал то, что меняются повсюду на пару дней, и теперь у меня очень плохое время, сливаясь с моей основной веткой. И теперь я как бы напуган, чтобы сделать это «маленькое» изменение в моих файлах, опасаясь создания причудливых ошибок, скрывающихся в реплицируемом коде. Я проверяю git merge doc, но только нахожу пробельные проблемы, связанные с пространством в конце строки, началом строки (вместо вкладок) или пробелами для табуляции (core.whitespace). Но ничего о проблеме с пространством не добавлено INSIDE. :-(нужны свежие глаза на это
EDIT:.
Чтобы быть ясным и легче понять здесь один отрывок из реального файла, до и после
В мастер перед слиянием:
// Menu Link MLID des pages HUB (statiques) du main-menu
// Requête BD : SELECT * FROM menu_links where plid = 999
// 726 = Loi et Réglements
// 728 = Aide financière de dernier recours
define ('LOI_AIDE_PAGE_MLID',934);
define ('REGLEMENT_PAGE_MLID',935);
define ('AFDR_PAGE_MLID',894);
// Taxonomy VID
define ('DOMAINE_VID',3);
в особенности перед слиянием (обратите внимание на дополнительное пространство после комы):
// Menu Link MLID des pages HUB (statiques) du main-menu
// Requête BD : SELECT * FROM menu_links where plid = 999
// 726 = Loi et Réglements
// 728 = Aide financière de dernier recours
define ('LOI_AIDE_PAGE_MLID', 934);
define ('REGLEMENT_PAGE_MLID', 935);
define ('AFDR_PAGE_MLID', 894);
// Taxonomy VID
define ('DOMAINE_VID', 3);
Затем в отделении:
git commit "blablabla"
git pull --rebase origin master (no message, everythings look cool)
git checkout master
git merge feature (fast-forward, no message)
...
run the site... error duplicate constant !?!?
открытые файлы и теперь это!?!
// Menu Link MLID des pages HUB (statiques) du main-menu
// Requête BD : SELECT * FROM menu_links where plid = 999
// 726 = Loi et Réglements
// 728 = Aide financière de dernier recours
define ('LOI_AIDE_PAGE_MLID',934);
define ('REGLEMENT_PAGE_MLID',935);
define ('AFDR_PAGE_MLID',894);
// Taxonomy VID
define ('DOMAINE_VID',3);
// Menu Link MLID des pages HUB (statiques) du main-menu
// Requête BD : SELECT * FROM menu_links where plid = 999
// 726 = Loi et Réglements
// 728 = Aide financière de dernier recours
define ('LOI_AIDE_PAGE_MLID', 934);
define ('REGLEMENT_PAGE_MLID', 935);
define ('AFDR_PAGE_MLID', 894);
// Taxonomy VID
define ('DOMAINE_VID', 3);
А также найдено файла с меткой пересмотра, но изменение также является лишь ОДНОЙ пробелом.
Пожалуйста, дайте нам некоторые команды git, которые вы сделали, чтобы попасть в это состояние. –
Сидя на master, git checkout -b функция, работа работы (добавить пробел внутри линии), git checkout master, git merge feature. Посмотрите на файлы, мм? авто-слияние ошибочно! –
Есть ли какие-либо другие коммиты на master между точкой fork и точкой слияния? –