Git обнаружит логические дубликаты файлов и не сможет объединить - PullRequest
0 голосов
/ 12 октября 2018

Есть ли в git или GitHub механизм, который может обнаружить файл 007__JamesBond.txt, созданный Алисой в главной ветви, и что Боб создал 007__TheSpyWho.txt в ветви функций?

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

Это будетв идеале ведут себя так, как если бы оба человека совершали 007.txt, что, естественно, выявляет конфликт слияния.

Фильтр должен применяться только к выбранным каталогам.Можно ожидать, что оба файла находятся в одном и том же каталоге, поэтому нам не нужно слишком широко сканировать, чтобы найти дубликаты.

Реальное приложение представляет собой набор файлов, используемых библиотекой базы данных Flyway для поддержки DDL.скрипты.Библиотека ожидает описание в имени файла после уникального номера.

1 Ответ

0 голосов
/ 15 октября 2018

Этот скрипт, установленный как .git/hooks/commit-msg, успешно обнаруживает логические дубликаты при запуске git commit и git merge.Конфигурирование его как хука pre-commit не работает для слияний, только для коммитов, поэтому лучше монтировать его как commit-msg.

#!/bin/bash

##################################################################
# Detect flyway logical duplicates with the same numbered prefix #
##################################################################

#Place each directory to check on a new line without any commas
flywaydirs=(
  "mycomponent1/src/main/resources/db"
  "mycomponent1/src/main/resources/db"
)

#The prefix and the main name of the file are separated by __ so we'll see files like:
#V1_prefix__main_name.sql

duplicateprefixes=()
for i in "${flywaydirs[@]}"
do
  while read -r line
  do
    duplicateprefixes+=($line)
  #Ignore filenames prefixed with R__
  done < <(git ls-files $i | sort | grep -v '/R__' | sed 's/__[^__].*$//g' | uniq -d)
done

if [ ${#duplicateprefixes[@]} -ne 0 ]; then
  echo "Found duplicate flyway files:"
  for i in "${duplicateprefixes[@]}"
  do
    git ls-files ${i}__*
  done
  echo "## Aborting commit ##"
  exit 3
else
  echo "No duplicate flyway files detected. Test passed."
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...