Вступление

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

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

Не судите по статье, что в компании, где я работаю, из стеков технологий используется только Bitrix. Так сложилось, что порог вхождения в Bitrix не особо высок. Это и достижение Bitrix и его недостаток. И именно с Bitrix разработчиками чаще всего приходится решать проблемы с системой контроля версий

Я знаю, что GIT не единственная система контроля версий. Плюс-минус все работает одинаково. Когда новый человек приходит в компанию, то при наличии опыта работы с любой системой контроля версий не составляет труда переключиться на GIT. Мы используем именно GIT

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

Одним только собесом не решить проблемы, которые возникают при работе с системой контроля версий

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

Зачем и о чем эта статья?

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

Проблема первая — время 

Нет проблемы обучить (выращивать) штатных сотрудников внутри компании или сторонних подрядчиков. Но на изучение регламента, установку-настройку-выполнение требований требуется определенное количество часов. Хорошо, когда сотрудник или подрядчик постоянный — потратили один раз время и дальше спокойно работаем годами. А если у вас регулярно возникают задачи, для выполнения которых достаточно 4 часов работы разово нанятого фрилансера? Если он привык работать с GIT-ом, проблем нет. Если не умеет/не понимает или спорит, что с GIT тратится еще больше часов — приходится порой тратить больше времени на объяснение, чем на рабочую задачу.

Проблема вторая — у каждого свои привычки

Любой разработчик знает, что существуют задачи (особенно, если ты работаешь один как фрилансер или в небольшой студии, в которой «один проект — один ответственный») когда можно работать без гита. Свои релизы такой разработчик «колхозит» — переименовывает файлы с префиксом даты предрелизного состояния или вставляет надписи «old».  Бороться с этим бесполезно. В рамках собственных проектов каждый волен сам решать, как поступить.

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

Я все еще часто слышу упреки разработчиков: «Ну ты же не говорил, как именно надо сделать». Для этого и нужен регламент — определить и зафиксировать принятые правила игры. Предупредить претензии и обиды сотрудников, которых вывели с проекта, или работу которых не принимают.  

Любой регламент — это результат опыта. Поскольку у большинства распределенных команд проблемы и ошибки схожи — схожи будут и регламенты. А значит, вынося во внешний мир собственный — можно подтолкнуть «общественное бессознательное» в нужную сторону, и, хотя бы отчасти, решить проблему времени на изучение регламента.

Перед началом работы 

Исторически сложилось, что все свои проекты мы ведем на GitLab и «переезжать» куда-то со своими репозиториями не планируем —  во-первых, это сложно осуществить в рабочих проектах, где много команд, во-вторых нам просто нравится Гитлаб. Если у вас другая система — это не критично, общие требования идентичны. 

  • Тимлид проекта перед началом работ должен убедиться, что у всех разработчиков есть доступ к удаленному репозиторию проекта.

  • Штатные сотрудники компании получают доступ ко всем репозиториям. Подрядчикам мы выдаем доступ к конкретным репозиториям, только на срок реализации проекта. Здесь тимлиду нужно не забыть выставить сроки предоставления доступа, т.к. 101% после сдачи проекта забудем удалить доступ подряда. 

Алгоритм настройки Git 

  • На общем хосте main (предпрод, тестовая площадка) должна быть включена ветка stage. ВАЖНО! Ветка master используется только для боевого хоста. 

  • Используйте только \n для перехода на новую строку. (укажите в редакторе + в настройке гита) 

IDE и редакторы позволяют в настройках выставлять нужный символ конца строки, но неопытные разработчики нередко забывают, что и Git при определенных настройках (автоформатирование при коммите) может его изменить. Если часть команды работает на MacOS, часть на Linux, а часть на  Windows — велика вероятность, что в какой-то момент что-то пойдет не так. А потому в регламент мы внесли требование принудительно указывать в IDE и в настройках Git-а единый символ конца строки. 

  • Проверьте, чтобы .gitignore был правильно настроен:

/bitrix/ 
/bitrix 
/upload/ 
/upload 
/local/
/local/vendor/
/web.config 
/.htaccess 
/robots.txt 
/*.xml 
*.swp 
*.log

В .gitignore добавлены помимо папок /bitrix/ и /upload/ так же файлы /bitrix и /upload, т.к. на площадках для разработки это симлинки. Файл .gitignore может быть изменен и дополнен в зависимости от потребностей проекта.

  • в GIT не должны попадать отладочные скрипты, логи, медиафайлы регистрируемые в БД и др. 

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

  • Заведите правило: 1 разработчик — 1 хост.  Если на проекте должно одновременно работать несколько разработчиков, то количество хостов на проекте должно быть равно количеству разработчиков + 1 (общий хост на который сливаются все изменения)

За личным хостом следит сам разработчик, за общим — тимлид. Это позволит всегда держать руку на пульсе как общего состояния проекта, так и индивидуальных задач каждого разработчика.

  • Все наработки сначала вливаются в stage, а затем в master. Ничего не должно вливаться сразу в master. Все новые ветки для выполнения новых задач начинаются от текущего stage, если прямо не указано иного (бывают ситуации, в которых лучше ветвиться от master).

  • Доставкой изменений на бой занимается тимлид на проекте или его старший программист проекта. Также неплохо было бы настроить CI/СD

В нашем полном регламенте помимо тех, кому дано право изменять боевой сервер — прописано и разрешенное для деплоя время. Мы исключили возможность обновлений перед выходными в конце дня, а плановый деплой разрешен только в первой половине рабочего дня. Причины очевидны — если что-то пойдет не так, нужно иметь запас времени на то, чтобы откатиться. Разбираться в причинах можно и потом, но восстановить работоспособность проекта нужно сразу. 

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

Подготовка к переносу наработок на предпрод для проверки

  1. После выполнения наработок необходимо сделать git pull в текущую ветку из ветки stage (в некоторых случаях master) удаленного основного репозитория и тем самым предотвратить появление конфликтов в удаленном репозитории. Затем пушить ветку с наработками git push в свою же ветку удаленного репозитория 

В принципе — ничего нового в этом пункте нет, стандартное предупреждение и разрешение конфликтов в Git-е. Но тимлиду имеет смысл разъяснить этот пункт, особенно если исполнитель удаленный и еще не привык к общим требованиям. За время, что он работал над задачей — в ветке stage могли появиться изменения от других разработчиков, и безопаснее разрешить конфликты в локальной ветке до того, как очередная порция изменений будет запушена в удаленный репозиторий. 

  1. В удаленном репозитории нужно создать мерж реквест в stage на тимлида или старшего на проекте, если он отвечает за сливания. 

Если на текущем проекте есть отдельный чек-лист —  разработчик должен заполнить его, если нет — отметить в комментарии к задаче ссылку на merge request (в некоторых случаях коммит) с наработкой и описанием. Отписать тимлиду или старшему на проекте, если он отвечает за сливания, чтобы проверил работу и принял merge request, либо отправил на доработку. 

  1. После того, как все замечания устранены и мерж реквест принят, смотрим работу на основной (тестовой) площадке. 

Про ветки и коммиты

  • Правила именования веток 

Даже один только этот пункт — позволяет выработать очень полезную привычку давать веткам имена, которые понятны всем участникам разработки. Название должно содержать номер задачи, в рамках которой выполняется работа и пункт чек-листа. То есть при выполнении задачи, ветка будет выглядеть следующим образом: 

ih(os)/номерЗадачи/краткоеОписаниеЗадачи

Ih — значит inhouse, штатный сотрудник 

os — outstaff-подрядчик 

54361 — обязательно указываем номер задачи 

краткоеОписаниеЗадачи — это 2 - 4 слова. 

Пример правильно названной ветки: 

ih/54361/fixCatalogStyles 

В случае, если работа по какой-то причине не привязана к конкретной задаче, именование следующее: 

ih(os)/годмесяц/краткоеОписаниеЗадачи 

Пример альтернативно названной ветки если нет задачи под неё: 

ih/2107/checkoutRefactoring 

  • Правила именования коммитов

Именование коммита должно отражать суть проделанной работы. В наименовании коммита должен присутствовать номер задачи и номер пункта данной задачи.

Пример: 

«54361-1 import elements to offers iblock»

где 54361 номер задачи и через тире номер пункта (если в задаче есть отдельные пункты, которые можно считать как самостоятельный функционал). 

  • Правила форматирования кода перед выполнения задачи

Если вам приходится работать с существующим кодом в файле и этот код не правильно отформатирован, то в случае, когда мы будем делать доработку и отформатируем весь код файла, в коммите будет не понятно — что именно изменилось. 

Для того, чтобы избежать этой проблемы, надо: 

  • Отформатировать этот файл перед выполнением работ, согласно регламенту написания кода (в PHPStorm можно комбинацией клавиш [CTRL] + [ALT] + L) и закоммитить, при этом в настройках PHPStorm должны стоять верные настройки PSR и версия PHP. 

  • Указать в коммите, что это форматирование 

  • Начать выполнять работу только после коммита с форматированием

  • Правила работы с версткой и стилями 

В нашей компании бэкендеры не правят стили и верстку прямо в back-end минуя исходник верстки. Для работы с версткой используется отдельный репозиторий. Сперва фронтенд-разработчик правит верстку именно в файлах верстки, только потом backend-разработчик ее натягивает. Таким образом исходник верстки всегда актуален.

Перенос наработок на бой 

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

Еще немного про ветки и переносы

Новая ветка должна актуализироваться каждый раз перед стартом выполнения задачи и в нее из ветки предпрода может подтянуться то, что еще нельзя переносить. 

Так как в проектах существует очередь правок и у них может быть продолжительное время приемки функционала, для каждого переноса необходимо: 

  • В выполненном пункте задачи перечислить все коммиты (хеши), которые к нему относятся. Также можно помечать коммиты тегом. (Есть и другие способы ничего не терять при переносе. Я выбрал именно перечисление коммитов, потому что для большинства разработчиков он наиболее понятен).

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

  • Перенос надо осуществлять релизными ветками, в которые вливаются все коммиты с наработками, вида: 

release/20210408, где 20210408 — сегодняшняя дата 

Если мы не хотим вливать целую ветку, а хотим подтянуть только один коммит, то можно воспользоваться командой: 

git cherry-pick коммит 

Если переносимого коммита нет в вашем локальном git, то надо сперва подтянуть изменения из других веток к себе 

git fetch origin 

git fetch — забирает данные в ваш локальный репозиторий, но не вливает их в вашу ветку. То есть коммиты из других веток придут к вам на площадку, но так же останутся в других ветках. В итоге удобно мержить и проводить код-ревью используя IDE.

Дополнение, которое может облегчить жизнь

Иногда приходит проект от заказчика, где под GIT загнали все файлы, включая те, которых там вообще быть не должно. К боевому сайту нет доступа и какие-либо изменения по этим файлам категорически нельзя отправлять в репозиторий. Например, robots.txt, sitemap.xml и другие файлы и каталоги.

Что бы выкрутится из этой ситуации мы на своих площадках, можем делать так:

Перестать отслеживать изменение одного файла:

git update-index --assume-unchanged <file>

Перестать отслеживать целую директорию:

git ls-files -z <dir>/ | xargs -0 git update-index --assume-unchanged

После этого GIT  не будет реагировать на какие-либо изменения в этом файле или директории.

Чтобы отменить это поведение, выполните следующее:

Для файла:

git update-index --no-assume-unchanged <file> 

Для директории:

git ls-files -z <dir>/ | xargs -0 git update-index --no-assume-unchanged


В процессе разработки есть проблема не только с тем, что кто-то не знает как работать с GIT, но и с тем, что все делают, как им нравится, или кажется, что так правильнее. Основной позыв этой статьи — стандартизация/унификация основных проблемных мест при работе с GIT в процесса разработки. Нельзя допускать ситуацию «кто в лес, кто по дрова».

Комментарии (39)


  1. amarao
    17.11.2021 12:37
    +6

    Какой интересный у вас класс задач. Неужели, это обязанность тимлида - обучать сотрудников основам работы с git'ом? Разве это не задача HR и собеседующих?

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


    1. Showvars
      17.11.2021 12:52
      +10

      Прошу прощения, что не по теме. Слепая печать — настолько важна?


      1. amarao
        17.11.2021 13:07
        -10

        Она не является критической, и, в принципе, я могу себе представить человека, который очень хорош в ИТ, но печатает медленно, но, скорее, как исключение.

        Проблема в том, что для класса задач скорость работы с устройствами ввода прямо транслируется в скорость работы. Если вы запрос в гугл печатаете в три раза дольше, чем средний человек, то вы теряете ~5% эффективности (потому что чтение результатов занимает больше времени).

        Но если вы, например, в консоли, то медленная и неэффективная навигация на 90% транслируется во время за консолью. Чтобы быстро работать в консоли нужно смотреть на экран. Чтобы быстро работать в IDE (что vscode, что vim, что emacs), нужно смотреть на экран, причём быть глубоко в контексте (потому что представляемые данные имеют смысл только в контексте нажатых кнопок, и иногда важны не данные, а их изменение). Если вы глаза от экрана отводите при печате, то вы катастрофически теряете контекст.


        1. fougasse
          17.11.2021 16:27
          +5

          У меня лично при работе над фунциональностью контекст в голове, а не на экране монитора. Притом не в виде конкретных ключевых слов и форматирвания в IDE, а гораздо более абстрактно.

          При дебаге, возможно, некоторое смещение в сторону IDE с watches (если она позволяет) или к чтению логов.

          Зачем мне при этом скорость стенографистки/машинистки — непонятно.

          Бесспорно, слепая печать добавляет некоторый комфорт в некоторых ситуациях, например, при написании документации, переписке в чатиках(хотя, в рабочих лучше всё-таки обдумывать написанное), нг написание кода/дебаг/рефакторинг — это не про N символов в секунду.

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


          1. amarao
            17.11.2021 17:04
            +1

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

            Ближайший grep, ctrl-p в vscode, tab в шелле и т.д. - и вы ждёте что-то на экране. Если вы взгляд отводите, у вас разрушается контекст.

            При чтении чужого кода нужно очень много печатать (если только вы не относитесь к людям, которые начинают читать проект с automake.mk, потому что это первый файл по алфавиту), и потеря этого контекста снижает продуктивность. Грубо говоря, если у вас при чтении документа отобрать Ctrl-F, вы всё равно его прочитаете, но, возможно, дольше и не так хорошо.


          1. KvanTTT
            18.11.2021 17:29

            Зачем мне при этом скорость стенографистки/машинистки — непонятно.

            Для дополнительного комфорта. Ну и программист не только код пишет, а еще всякие issue, комментарии. Я на русском давно печатаю вслепую, на английском полностью стал вслепую год назад. И комфорт увеличился (а еще у меня клава без надписей).


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

            Это не важно: участвуйте вы в них или нет. Скорость еще более актуальна для старых языков с многословным синтаксисом (Java), причем если код пишется не в IDE. И при разработки реально возникают мысли о том, что вообще-то не охота столько писать, особенно если печатаешь медленно. Приходит прокрастинация, сроки откладываются. Так что да, слепая печать влияет на продуктивность, как и используемая IDE.


    1. ArtemPervushin Автор
      17.11.2021 13:13
      +1

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


      1. amarao
        17.11.2021 13:18

        А вы не думали о переходе на более современный и разумный стек, на который перешли высококвалифицированные разработчики?


        1. Gemorroj
          17.11.2021 13:33
          +3

          переход на голанги и ноды не имеет отношения к "высокой" квалификации. это лишь мода.


          1. Macbet
            17.11.2021 13:46
            +4

            отнюдь, невозможно быть разработчиком на "современном стеке" и не знать git ибо git является неотъемлимой частью инфраструктуры этих стеков а вот в битриксе получается можно его не знать


            1. ArtemPervushin Автор
              17.11.2021 14:23
              +4

              По опыту считаю, что без git вообще ни как либо лютый колхоз. Свою разработку без git я вообще представить не могу.


          1. amarao
            17.11.2021 14:37
            +3

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

            Более того, вчитайтесь в то, что я написал. "на более современный и разумный стек, на который перешли высококвалифицированные разработчики". Я не говорю, что надо переходить на какую-то конкретную технологию.

            Я говорю, что в свете "упал уровень разработчиков на bitrix" надо посмотреть, куда ушли с bitrix те, у кого уже есть хороший уровень базовых знаний. Может быть, это перспективное направление? Чем более хороший специалист, тем больше он неравнодушен к технологиям, с которыми он работает. Это с начинающими можно играть в "могу копать, могу не копать". Хороший профи хоть и может, но не хочет некоторые технологии, и выбирая из двух офферов с одинаковой зарплатой, очевидно пойдёт туда, где технологии привлекательнее. Привлекательнее чем что? Чем Bitrix, карл!


            1. rpsv
              29.11.2021 08:06

              Bitrix - CMS на языке PHP, поэтому ваша фраза "Переход с bitrix на любой универальный язык программирования" крайне неадекватна :)


              1. amarao
                29.11.2021 12:20

                А php написан на Си. Является ли программист на php программистом на С? Является ли программист на битрике программистом на php?


        1. ArtemPervushin Автор
          17.11.2021 14:01
          +2

          Есть b24, который не перекрыть другими стеками. Можно делать в несколько раз дороже (именно раз) на более современном стеке


    1. FlyingDutchman2
      17.11.2021 16:17
      -2

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

      Git - это одна из десятков используемых систем контроля версий, поэтому кажется странным приравнивать знание git к умению читать и писать. К примеру, я работал с различными системами контроля версий начиная с 1999 года, а с git познакомился только через 20 лет, в 2019 году.


      1. amarao
        17.11.2021 16:34
        +7

        Английский язык - один из более чем 2500 тысяч языков мира, но все IT'шники должны владеть им.

        Git - ровно так же. Не умеешь git, страдаешь и люди в работе с тобой страдают. Возможно, где-то там до сих пор кто-то пользуется cvs, но в целом, git победил. Вы можете владеть ещё какими-то системами, но знать git - обязаны. Ровно так же, как знание армянского, французского и ещё одного языка предков не освобождает вас от знания английского.


        1. dedmagic
          18.11.2021 08:18

          // зануда on

          2500 тысяч == 2,5 млн.

          // зануда off

          :)


      1. KvanTTT
        17.11.2021 20:17
        +3

        А как вы десяток насчитали? Даже если есть и другие, то Git явно доминирует, он испольузется почти везде. Даже bitbucket забросили свой mercurial. И важна не только СКВ, но и инфраструктура вокруг нее.


        Так что не соглашусь — знание Git в настоящее время является необходимым для специалиста уровня выше Middle.


        1. foal
          20.11.2021 02:32

          Да ладно - вот список того с чем мне довелось работать:

          • VSS

          • CVS

          • StarTeam

          • SVN

          • BitKeeper

          • Rational ClearCase

          • Perforce

          • HG

          • GIT

          Вполне есть десяток. Но да, GIT надо знать, даже на начальных уровнях.


          1. invasy
            20.11.2021 13:39

            И где они все сейчас?


            1. foal
              20.11.2021 15:11

              Ну, по крайней мере, HG и GIT я активно сейчас использую. Остальные да, для меня уже давно в разряде легаси.


          1. KvanTTT
            20.11.2021 15:35

            А, ок, в оригинальном комментарии было про десятки. Один можно насчитать, да.


            1. foal
              20.11.2021 15:52
              +1

              Насчитать можно и несколько десятков - я написал только те с которыми работал/ю сам.

              Не подумайте, что я с вами спорю, с исходным комментарием я не согласен :) Возможно у меня проф. деформация, но умение пользоваться GIT'ом для меня является одним из базовых навыков для имеющих отношение к IT.


    1. ArtemPervushin Автор
      18.11.2021 16:05

      Одним только собесом не решить проблемы, которые возникают при работе с системой контроля версий


  1. BasicWolf
    17.11.2021 16:50
    +1

    Доставкой изменений на бой занимается тимлид на проекте или его старший программист проекта. Также неплохо было бы настроить CI/СD

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

    Печаль. 2021й год на дворе, а вы вручную "доставляете" изменения. И для этого ещё и отдельные ветки "staging" и "main". И каким же образом достигается Continuous Delivery, если между коммитом и деплоем в продакшн столько "вахтёров"?


  1. bohdan-shulha
    17.11.2021 17:56
    +4

    Любой разработчик знает, что существуют задачи (особенно, если ты работаешь один как фрилансер или в небольшой студии, в которой «один проект — один ответственный») когда можно работать без гита

    Видимо, я какой-то фейковый разработчик. Даже работая в одиночку, системя контроля версий приносит пользу: быстрый откат изменений; просмотр истории изменений (вида "ой, а что это я там менял, что у меня всё сломалось?"); собственно, сам контроль версий исходного кода (вида "надо тут эту фичу назад вернуть, раньше было лучше"). В некоторых вариациях, это деплой одной командой или мониторинг "а не закинули нам какого скрипта лишнего?".

    Как по мне, единственно допустимый вариант не использовать систему контроля версий - одноразовый скрипт (который действительно запустился раз и его тут же можно удалять).


    1. ArtemPervushin Автор
      19.11.2021 10:00

      Это не слова, а мёд мне в уши! )


  1. ookami_kb
    17.11.2021 18:00
    +2

    Это какой-то бюрократизм головного мозга...

    > После выполнения наработок необходимо сделать git pull в текущую ветку из ветки stage (в некоторых случаях master) удаленного основного репозитория и тем самым предотвратить появление конфликтов в удаленном репозитории.

    В GitHub это решается галочкой "Require branches to be up to date before merging". Неужели в GitLab нет ничего подобного?

    Отписать тимлиду или старшему на проекте, если он отвечает за сливания, чтобы проверил работу и принял merge request, либо отправил на доработку. 

    Зачем, если уже запросили его code review?

    Если вам приходится работать с существующим кодом в файле и этот код не правильно отформатирован, то в случае, когда мы будем делать доработку и отформатируем весь код файла, в коммите будет не понятно — что именно изменилось.

    Решается однократным рефакторингом и введением линтера.

    Правила именования веток

    Зачем? Время жизни веток должно быть максимум несколько дней (а лучше < 1 дня). У вас несколько миллионов разработчиков, и поэтому возникают конфликты имен?

    И т.д. Большая часть ваших проблем, похоже, решается нормальной настройкой инструментов, а не написанием регламентов.


    1. dadgo
      17.11.2021 20:21

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


      1. ookami_kb
        17.11.2021 20:42
        -1

        Если это именно ветка для release candidate, то да, время жизни может быть больше. Нехорошо, но таковы реалии. И да, к ним можно (и даже нужно) определить правила наименования (и сделать их protected). Но это будет несколько веток вида release-v*

        Но если feature-branch живет по несколько месяцев (и это настолько "нормально" в компании, что придумывают под это дело специальные регламенты наименования), то в консерватории что-то сильно не так.


  1. Khaperets
    17.11.2021 19:55
    +1

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


    1. geher
      22.11.2021 07:09

      А зачем это в случаях, когда в компании используется другая система контроля версий?

      Гит - не что-то особо страшное. Изучить на базовом уровне - несколько часов, если специалист таки специалист.

      А если таки в компании используется гит, то достаточно каждому новопринятому выдавать шпаргалку с принятыми в компании правилами использования гит (они, внезапно, могут сильно отличаться в разных компаниях), которую просто не забыть снабдить примерами команд. Дальше сам разбпрется. А если не разберется, то его квалификация вызывает сильные сомнения.


      1. KvanTTT
        22.11.2021 15:35

        А зачем это в случаях, когда в компании используется другая система контроля версий?

        Таких компаний очень мало.


  1. Stanger2021
    18.11.2021 09:58
    -3

    Я так понимаю,все статьи про git сейчас минусят...


  1. ArtemPervushin Автор
    18.11.2021 16:05

    Не судите по статье, что в компании, где я работаю, из стеков технологий используется только Bitrix. Так сложилось, что порог вхождения в Bitrix не особо высок. Это и достижение Bitrix и его недостаток. И именно с Bitrix разработчиками чаще всего приходится решать проблемы с системой контроля версий


  1. ArtemPervushin Автор
    18.11.2021 16:06

    Я знаю, что GIT не единственная система контроля версий. Плюс-минус все работает одинаково. Когда новый человек приходит в компанию, то при наличии опыта работы с любой системой контроля версий не составляет труда переключиться на GIT. Мы используем именно GIT


    1. KvanTTT
      18.11.2021 17:31

      Ну судя по жалобам, у многих это составляет труд :) Некоторые так и не смогли осилить на таком уровне, чтобы вести историю на приемлимом уровне.


  1. ArtemPervushin Автор
    18.11.2021 16:06

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