Прежде чем разрешить пользователю отправлять данные на сервер, я хочу проверить, не конфликтует ли его/ее ветка с какой-либо неслитой с главной веткой на сервере!
На мой взгляд, это одна из очень неправильных стратегий. Вы должны понимать, что конфликты — это нормальная часть git, что в них нет ничего нечестивого, и что как бы вы ни старались их избегать, они рано или поздно произойдут.
Например, если есть 2 функции, каждая из которых изменяет файл с одним и тем же номером строки с разными строками кода, git определенно вызовет конфликт — вы никак не можете этого избежать.
Теперь, поскольку у вас будет этот скрипт проверить отсутствие конфликтов, вы никогда не сможете отправить вторую ветку, пока первая не будет объединена. Абсолютная трата времени и производительности разработчика.
Кроме того, вы забываете, что разработчики могут продвигать свои ветки, даже если ветка не готова к слиянию, вы также не сможете этого сделать. Если два или более разработчиков сотрудничают, они просто не смогут продвигать, потому что они не могут нажать, потому что их ветка конфликтует с какой-то другой веткой.
В случае, если у вас достаточно большая команда разработчиков (скажем, 10) с достаточно большим количеством ветвей (скажем, 100), вы, по сути, закончите сравнение со 100 ветвями при каждом нажатии каждого разработчика. Представьте, что 10 разработчиков вмешиваются всего два раза в день, и вы уже на 2000 возможных точек конфликта между разными группами разработчиков. Люди могут легко закончить тем, что тратят больше времени на преждевременное разрешение конфликтов, чем на разработку.
Итак, как сделать это разумным способом?
По сути, не пытайтесь преждевременно избегать будущих конфликтов.
Сделайте одну из веток ссылкой - проверяйте только master
ветку и убедитесь, что с ней нет абсолютно никакого конфликта во время слияния.
Каждый раз, когда нужно выполнить слияние, проверяйте конфликт с мастером и сливайтесь только тогда, когда конфликтов нет. Если есть конфликт, попросите владельца запроса/ветви получить обновленный мастер, перебазировать его ветку, разрешить конфликты и снова отправить запрос.
person
Anshul Goyal
schedule
18.02.2015