Какие стандартные методы использования Git применяют разработчики в компаниях?

Как разработчики управляют изменениями в большом проекте при использовании Git и как избегают конфликтов между различными версиями кода, например, когда несколько разработчиков вносят изменения в один и тот же файл или функцию?
  • 30 января 2024 г. 9:10
Ответы на вопрос 5
Разработчики используют разнообразные подходы и рабочие процессы при работе с Git для управления изменениями в кодовой базе. Некоторые из стандартных методов включают:

1. **Feature Branch Workflow** (*Работа с ветками для функциональности*): Разработчики создают отдельные ветки для каждой новой функции или исправления. Это позволяет работать над изменениями изолированно от основной ветки (часто `master` или `main`), затем сливать готовый код после ревью и тестирования.

2. **Git Flow**: Это более структурированный подход, чем простая работа с ветками. Разработчики используют установленные типы веток, такие как `feature`, `release`, `develop`, и `hotfix`, которые имеют конкретные роли в цикле разработки.

3. **Forking Workflow** (*Работа с форками*): Особенно популярен в открытом исходном коде, где участники создают личные копии (форки) репозитория и разработчики предлагают изменения через pull requests с их собственных форков.

4. **Pull Requests** (*Пулл-реквесты*): Также известны как merge requests в некоторых системах (например, GitLab), они являются ключевым инструментом для ревизии кода в командной разработке. Так разработчики могут комментировать изменения, предлагать исправления и утверждать код перед слиянием в основную ветку.

Для предотвращения и решения конфликтов могут использоваться следующие стратегии:

- **Регулярное слияние изменений (Merging)**: Часто включать изменения из основной ветки (например, `main`) во ветки с новыми функциями, чтобы поддерживать их актуальность и сводить к минимуму риск конфликтов при их слиянии.
  
- **Ребейзинг (Rebasing)**: Использование `git rebase` для перемещения изменений с feature ветки на "вершину" основной ветки, что делает историю коммитов более чистой, но может быть рискованным, если ветка общедоступна и используется другими разработчиками.

- **Интерактивный ребейзинг (Interactive rebasing)**: Для уточнения и улучшения истории коммитов до их включения в общую ветку.

- **Применение Pull Request / Merge Request Reviews**: Код ревью может помочь обнаружить потенциальные проблемы и конфликты до того, как изменения будут слиты.

- **CI/CD системы (Continuous Integration / Continuous Delivery)**: Автоматическое тестирование кода при пушах и пулл-реквестах может обнаружить проблемы и конфликты, которые могут возникнуть при слиянии.

- **Коммуникация между разработчиками**: Эффективное общение имеет ключевое значение для координации работы над совместными изменениями и для того, чтобы разработчики были информированы о действиях своих коллег.

Эти подходы и методы могут комбинироваться в зав
Происходит это так: 
Появляется задача реализовать какой-то функционал.
Разработчик создает ветку от мастера "Новая крутая фича" и делает там все что угодно. Создает новые функции, удаляет старые - все, что необходимо для реализации задачи.
В это время всем остальным он не мешает, т.к. ведет разработку в своей ветке.
Когда процесс разработки заверешен ветка "Новая крутая фича" мержится в мастер.
Есть куча различных flow для работы с гитом, начни с поиска их в гугле. Кроме этого, в самих компания, могут быть приняты свои стандарты, как на основе известных flow, так и самостоятельно разработанные.
Как разработчики пользуются Git в компаниях?

Так, как определено в конкретных компания.
серьёзной пользы в маленьком проекте который пишу только я - не заметил.

Вы только что сами ответили на свой вопрос. [сложность_проекта] * [количество_разработчиков] = [сложность_разработки]
В серьезных компаниях невозможно состояние гонки релизов, которую вы описали. 
Во-первых, информационная система используется не в одном экземпляре. Всегда есть как минимум продакшен экземпляр, предпродакшен и девелоп экземпляры системы. В предпродакшен и девелоп версии могут загружаться не только разные релизы кода, но и гонятся разный набор данных для отладки и тестирования.
К этим экземплярам и набору данных имеют доступ разные работники, с разным уровнем допуска и ответственностью. Рядовой разработчик не будет иметь доступ в продакшен и предпродакшен, для него вышестоящий работник сформирует девелоп версию и подготовит нужный набор данных, который нужен именно для решения его рабочей задачи. Также рядовой разработчик не будет иметь полный доступ к действиям в репозитории, он может действовать только в рамках своей дев ветки, никто ему не даст прав сливать в мастер.
Для каждой новой разработанной функции пишутся автоматические тесты, как минимум с одним тестом, что она включается, эти тесты пишет отдельный контингент работников.
Прежде чем код попадет в продакшен, он будет просмотрен вышестоящим работником, его функционал будет протестирован сначала на тестовых данных, потом на боевых, с каждого теста будут сняты метрики не только по возникающим ошибкам, но и по производительности.
Уже на основе всех этих данных и будет принято решение компетентным работником вливать ваш функционал в прод или нет. Вместе с этим будет принято решение на слияние в мастер в репозитории.
Похожие вопросы