Найдите, конфликтует ли моя ветка с какой-либо удаленной веткой

Наша компания работает по принципу «филиал на функцию». Итак, каждый разработчик создает новую ветку, взламывает и отправляет в общий репозиторий на сервере. Хук пост-получения репозитория сервера вызовет запрос на извлечение!

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

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

Проблема:
1. Процесс перебазирования/слияния с каждой веткой занимает много времени
2. Постоянно меняется рабочее дерево

Я делаю это неправильно или есть какой-либо другой подход, чтобы определить, будет ли ветка разработчиков конфликтовать с какой-либо веткой запроса на вытягивание на сервере!


person Mudassir Razvi    schedule 18.02.2015    source источник


Ответы (1)


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

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

Например, если есть 2 функции, каждая из которых изменяет файл с одним и тем же номером строки с разными строками кода, git определенно вызовет конфликт — вы никак не можете этого избежать.

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

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

В случае, если у вас достаточно большая команда разработчиков (скажем, 10) с достаточно большим количеством ветвей (скажем, 100), вы, по сути, закончите сравнение со 100 ветвями при каждом нажатии каждого разработчика. Представьте, что 10 разработчиков вмешиваются всего два раза в день, и вы уже на 2000 возможных точек конфликта между разными группами разработчиков. Люди могут легко закончить тем, что тратят больше времени на преждевременное разрешение конфликтов, чем на разработку.


Итак, как сделать это разумным способом?

По сути, не пытайтесь преждевременно избегать будущих конфликтов.

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

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

person Anshul Goyal    schedule 18.02.2015
comment
Понял! Также я не проверяю каждую неслитую ветку. Я проверяю только каждый запрос на вытягивание. Кроме того, один из вариантов использования, который я проверяю, заключается в том, что если два человека изменяют одну и ту же строку в одном и том же файле, существует вероятность 90%, что их код зависит, и поэтому я хочу заранее сообщить разработчику, что босс, кто-то сделал что-то, что вы, возможно, захотите учесть в своем коде. Однако я все равно разрешаю разработчику вводить код! - person Mudassir Razvi; 19.02.2015