Як ви застосовуєте поведінку git, зокрема локально (особливо в Windows)?


13

Я берусь на думку про переміщення цього магазину .NET від svn до git, і визначив деякі допоміжні проблеми, над якими я хотів би вирішити, перш ніж перевести комутатор.

Мене про це, зокрема, в цьому питанні, задають стягнення безстроково. За замовчуванням git для Windows встановлюється з "checkout crlf, commit lf", який не працюватиме для ряду джерела, який (наскільки мені відомо) складається виключно з закінчень crlf.

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

  • Гак попереднього введення, який перевіряє наявність будь-яких закінчень рядка lf (або, можливо, усіх закінчень рядка lf), і відхиляє в цьому випадку.
  • Сценарій встановлення, розподілений на розробники, який заповнює глобальний конфігурацію "як є, як є".

PS Під час написання цього мені спало на думку, що початкове перетворення з svn в git може скористатися способом за замовчуванням і до тих пір, поки люди дотримуватимуться за замовчуванням, що також буде досить непомітним. Будучи розробником, що використовує git, у магазині .NET, який встановив git із типовим параметром "як є, як є", я також створив свої власні проблеми там (усі вони були за замовчуванням до мого приходу) . Тому я все ще схиляюся до якогось механізму правозастосування.


2
На стороні сервера з попередньо отриманим гаком це має бути переданим (забезпечте закінчення кримінальних помилок і не вдасться, якщо ні), з гаком оновлення ви також можете оновити попереднє об'єднання. Який тип сервера git ви використовуєте? Якщо це доводиться робити на робочій станції, менеджер конфігурації може бути дорогою, але важче і з купою недоліків. Останній засіб обмежується на CI і не
примушує

1
Я погоджуюся з Тенсібаєм, і додам, що обраний вами варіант повинен ґрунтуватися на тому, наскільки суворо ви вважаєте, що це слід виконувати. Заздалегідь здійснюйте гачки для суворого дотримання, підшивання для звітування про дотримання зобов'язань після виконання.
Дейв Сверський

Дякую, Дейв, моє обґрунтування щодо забезпечення виконання клієнтів / більш жорсткого виконання вимог - це спричинить меншу загальну роботу для мене і швидше виявить помилки. Не збираюся керувати робочими станціями розробників, але всі сервери розробників знаходяться в DSC, тому додають, що це буде тривіально. Редагувати: Дякую також @Tensibai ... Ви могли б детальніше розглянути ті недоліки, які ви бачите на стороні клієнта?
ndarwincorn

1
Головним чином, якщо ви застосовуєте глобальну сторону клієнта з гачка, ви можете перешкодити роботі над проектами, які потребують закінчень. І вам доведеться налаштувати це якимось чином, ви не можете бути впевнені, що всі дотримуватимуться правильних налаштувань. Я впевнений, що є інші підошви, про які я зараз не думаю
Tensibai

Що ти в кінцевому підсумку робив для вирішення своєї проблеми?
Ньютопський

Відповіді:


6

Щоб відповісти на питання про те, як застосувати щось на місцях, ви не можете зробити не дуже важкий контроль над керуванням та дотриманням стану кожної робочої станції розробників, і я, як правило, вважаю, що розробники, ймовірно, повинні бути місцевими адміністраторами щодо їх розвитку. машина, тому що якщо їх немає, вони просто витратять свій час, роздумуючи про те, як отримати ці пільги в будь-якому випадку.

І це, мабуть, тому, що вам не потрібно дбати про стан локальної конфігурації під час використання розподіленого контролю версій. Вам слід дбати лише про стан вашої конфігурації. Якщо припустити, що ви використовуєте git як централізовану систему управління версіями, тому що в основному це все роблять всі, оскільки це найпростіше, тоді давайте просто припустимо, що "ваша" конфігурація - це копія коду, збереженого на центральному сервері.

Якщо це так, то ви не повинні приймати злиття, які, як ви вже згадували, розбивають закінчення рядків crlf / lf. Таким чином, ви примушуєте вас до того, що колись інший клієнт намагається підштовхнути зміни вас за допомогою логіки на стороні сервера, яка відхиляє запит забруднити ваше репо з їх потенційно порушуючим стилістичним вибором.


4

Нам потрібен процес перегляду за допомогою витягування запитів у github на наші головні відділи розробника чи майстра. Під час цього процесу перевірки ми позначимо запити на витяг як такі, що потребують змін, якщо багато файлів мають пробіл або відмінності, що закінчуються рядком, і наполягатимемо на тому, щоб вони дотримувалися форматування дев або головного відділення, для якого вони роблять запит на витяг.

Існує також кілька приємних інструментів, залежно від того, якими мовами ви користуєтесь та якими інструментами CI ви користуєтесь, які під час процесу збирання або витягування запиту можуть автоматично відформатувати код на основі встановлених вами правил. Це також допомагає підтримувати послідовність коду та мінімізувати проблеми форматування під час введення коду.


Чи хотіли б ви детальніше зупинитися на використанні інструментів? Зважаючи на те, що існує декілька способів цього досягти, і у нас є свій, але нам ще належним чином їх реалізувати, мені цікаво, як ви це вирішите.
ndarwincorn

1
Ми використовуємо машинопис, github та jenkins. Typescript має гарну екосистему для цього типу речей.
avi

3

Ви можете використовувати конфігурацію сховища для зміни конфігурації користувача на основі репозиторію. Коли це робиться на репо, що вважається центральним джерелом, воно повинно поширюватися клонами і перетягується на інші репозитори, включаючи локальні, таким чином центрально переводячи локальний конфігурацію.

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

Використовуючи шаблони у своєму git init, ви можете переконатися, що ваші репости створені нарівні з усіма файлами gitignore, gitattributes тощо, як саме ви хочете.

Останнє, що безпосередньо не стосується вашого питання, я знайшов найбільшу точку тертя, коли взяв команду svn saavy до робочого процесу, заснованого на git, що змусило їх звикнути до додаткового репо в середині. Я виявив, що цей візуальний аркуш київ допоміг трохи пояснити, яка команда мала який вплив на яку частину.

Сподіваюсь, це трохи допомогло.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.