Как вы обеспечиваете поведение git, в том числе локально (особенно в Windows)?

13

Я собираюсь перевести этот .NET-магазин из svn в git и выявил некоторые вспомогательные проблемы, решение которых я хотел бы найти, прежде чем переключить переключатель.

В частности, в этом вопросе я спрашиваю о принудительном исполнении. По умолчанию git для windows устанавливается с 'checkout crlf, commit lf', который не будет работать для группы источников, которая (насколько я знаю) состоит исключительно из окончаний crlf.

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

  • Хук предварительной фиксации, который проверяет любые окончания строки lf (или, возможно, все окончания строки lf) и отклоняет их в этом случае.
  • Сценарий установки, распространяемый среди разработчиков, который заполняет глобальный конфиг «как есть, как есть».

PS Когда я писал это, мне пришло в голову, что первоначальное преобразование из svn в git может зафиксировать путь по умолчанию, и пока люди придерживаются значения по умолчанию, это также будет довольно плавным. Будучи разработчиком, использующим git в магазине .NET, который установил git с нестандартным «как есть, как есть», я тоже создал там свои собственные проблемы (все они по умолчанию свернули по умолчанию до моего прибытия) , Так что я все еще склоняюсь к какому-то механизму принуждения.

ndarwincorn
источник
2
С серверной стороной предварительного приема это должно быть пригодно (убедитесь, что окончание CRLF завершится неудачей, если нет), с помощью ловушки обновления вы также сможете обновить предварительное слияние. Какой тип сервера Git вы используете? Если это должно быть сделано на стороне рабочей станции, то может потребоваться менеджер конфигурации, но сложнее и с множеством недостатков. Последнее средство заключается в том, что КИ не может заставить людей следовать процедурам
Тенсибай,
1
Я согласен с Тенсибаем и добавил бы, что выбранный вами вариант должен основываться на том, насколько строго вы считаете, что это должно выполняться. Хуки до фиксации для строгого контроля, предназначенные для отчетов о соблюдении после фиксации.
Дейв Сверски
Спасибо, Дейв, мое обоснование для более строгого соблюдения требований со стороны клиента заключается в том, что это повлечет за собой меньше работы в целом для меня и быстрее выявит ошибки. Не собираюсь CM CM рабочие станции разработчиков, но все серверы разработчиков находятся в DSC, так что добавить это будет тривиально. Редактировать: Спасибо, @Tensibai ... не могли бы вы рассказать о тех недостатках, которые вы видите на стороне клиента?
ndarwincorn
1
Главным образом, если вы применяете глобальную перехватчик на стороне клиента, вы можете предотвратить работу над проектами, требующими окончания. И вы должны настроить его каким-то образом, вы не можете быть уверены, что все будут следовать правильной настройке. Я уверен, что есть и другие пистолеты, о которых я сейчас не думаю
Тенсибай
Что вы в итоге сделали, чтобы решить свою проблему?
Newtopian

Ответы:

6

Чтобы ответить на вопрос о том, как внедрить что-то локально, вы не можете без какого-либо очень тяжелого поднятия управления и контроля состояния каждой рабочей станции разработчиков, и я обычно придерживаюсь мнения, что разработчики, вероятно, должны быть локальными администраторами в своей разработке. машина, потому что если нет, то они просто потратят свое время на то, чтобы понять, как получить эти привилегии.

И это, вероятно, потому что вам не нужно заботиться о состоянии локальной конфигурации при использовании распределенного контроля версий. Вы должны заботиться только о состоянии вашей конфигурации. Предполагая, что вы используете git в качестве централизованной системы управления версиями, потому что это то, что в основном делают все, потому что это проще всего, тогда давайте просто предположим, что «ваша» конфигурация - это копия кода, сохраненная на центральном сервере.

Если это так, то вы не должны принимать слияния, которые, как вы упоминали, ломают окончания строк crlf / lf. Таким образом, вы применяете это, когда какой-то другой клиент пытается подтолкнуть вас к изменениям, используя логику на стороне сервера, которая отклоняет запрос на загрязнение вашего репо своими потенциально нарушающими стилистическими решениями.

hvindin
источник
4

Нам необходим процесс проверки с использованием запросов Pull в github на наши основные ветки dev или master. В ходе этого процесса обзора мы помечаем запросы на извлечение как требующие изменений, если во многих файлах есть пробелы или различия в конце строк, и настаиваем на том, чтобы они следовали форматированию ветки dev или master, для которой они выполняют запрос на извлечение.

Есть также несколько хороших инструментов, которые зависят от того, какие языки вы используете и какие инструменты CI вы используете, которые могут, в процессе сборки или на этапе запроса на выборку, автоматически форматировать код на основе установленных вами правил. Это также помогает поддерживать целостность кода и минимизировать проблемы с форматированием при фиксации кода.

AVI
источник
Не могли бы вы уточнить, какие инструменты вы используете? Принимая во внимание, что есть несколько способов сделать это, и у нас есть свои, но мы еще не реализовали их таким образом, мне любопытно, как вы решаете это.
ndarwincorn
1
Мы используем машинопись, github и jenkins. Typescript имеет хорошую экосистему для этого типа вещей.
avi
3

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

Кроме того, вы можете применить это через хуки в вашем центральном репо, чтобы проверить, что окончания файлов - это то, чем они должны быть, и отклонить слияние / толкание, если оно не будет кошерным. Однако эти хуки не будут клонироваться с репо, по крайней мере, не напрямую, но в этом нет необходимости, так как правила действительно должны применяться только в центральном репо.

Используя шаблоны в вашем git init, вы можете быть уверены, что ваши репозитории созданы равными со всеми файлами gitignore, gitattributes и т. Д. Именно так, как вы этого хотите.

Последнее, что не имеет прямого отношения к вашему вопросу, я обнаружил, что самое большое трение при переводе команды svn saavy в рабочий процесс на основе git - это то, что они привыкли к дополнительному репо в середине. Я обнаружил, что этот лист визуальной подсказки помог немного объяснить, какая команда имела какое влияние на какую часть.

Надеюсь, это немного помогло.

Newtopian
источник