Git (через Tortoise Git) изменяет скомпилированный файл при обнаружении конфликта, делая его поврежденным - PullRequest
0 голосов
/ 27 мая 2020

Я новичок в git, так что извините за то, что, вероятно, не будет на 100% ясным.

Я работаю с скомпилированными файлами (точнее .acd-файлами от Rockwell для Studio5000 в PL C промышленная автоматизация). Я почти уверен, что формат файла не важен. Мы хотим работать над проектом с несколькими пользователями. Мы используем Git в качестве централизованного сервера и инструмент слияния брендов PL C (в данном случае примером является Rockwell). Мы настроили инструмент Rockwell Merge как MergeTool в Tortoise Git, и все «в основном» идет нормально.

Однако, когда мы выполняем запрос для обновления sh локального репо, конфликты на 100% возникает, потому что файл не является файлом .txt, с которым обычно работает Git. Проблема в том, что когда мы вытягиваем (возникает конфликт) и говорим Git, что хотим объединить, он изменяет локальный файл (я предполагаю, помещая ИХ и НАШИ немного повсюду в файле), даже если мы не делаем Я не хочу разрешать конфликты таким образом, и это повреждает файл для чтения по умолчанию. Файлы BASE, REMOTE (THEIRS) и LOCAL (OURS) появляются только тогда, когда мы используем Tortoise Git Edit Conflict (они не появляются автоматически, когда мы указываем, что хотим объединить 2 версии).

Моя проблема в том, что неопытный и / или неопытный человек может легко сделать sh поврежденный файл на сервере, потому что разрешение поврежденного файла (что является одним щелчком мыши) позволяет пользователю зафиксировать. Я знаю, что мы можем довольно легко вернуть / сбросить предыдущие коммиты, но это немного беспорядочно для истории журнала, и мы почти не хотим отслеживать поврежденные версии. Кроме того, это заставляет нас терять много времени, поскольку «обычный пользователь», вероятно, столкнется с трудностями при возврате к предыдущей версии, и ему может потребоваться помощь.

Сначала я хотел бы сделать следующее: когда пользователь пытается объединить файлы, Git не изменяет скомпилированные файлы из рабочего каталога (рабочее дерево и т.д. c.).

Во-вторых: я почти уверен, что это возможно, я просто не понимаю, как, но я бы хотел для автоматического создания файлов BASE, LOCAL и REMOTE при выборе слияния при возникновении конфликта, что было бы более простым, чем необходимость вручную выбирать опцию Edit Conflict. Мне приходит в голову, что файлы .docx уже делают это, а мой файл .acd - нет. Есть ли объяснение?

Как я уже сказал, я новичок и широко открыт для любых идей! :)

1 Ответ

0 голосов
/ 28 мая 2020

Tortoise Git по умолчанию не изменяет конфликтующий файл, а Git - для текстовых файлов.

Git включает маркеры конфликтов в текстовые файлы. Если вы не хотите, чтобы это произошло, вы можете попробовать добавить файл .gitattribtues и объявить свой файл как binary. binary - это вырезка для -diff -merge -text, поэтому -merge также может быть вариантом, если файл является текстовым файлом, и вы все равно хотите видеть различия.

Вы также можете создать ловушку фиксации, которая проверяет наличие возможные маркеры конфликтов в файлах до разрешения фиксации (см. https://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html#tgit -dug-settings-hooks и предотвращают фиксацию файла с конфликтами слияния в git).

...