2017-02-13 14 views
0

Я ищу для координации обновлений схемы базы данных MySQL с фиксацией git.Получите старый git 1.7, чтобы в принципе создать то же самое, что и команда git tag --merged, для обновлений схемы базы данных

Мой первоначальный план состоял в том, чтобы отмечать коммиты с номером схемы, например, git tag schema19936 b6671a2c1. Затем я мог бы «git tag -merged» посмотреть, доступен ли тег в текущей ветке, если тогда запустить сценарий schema19936.

К сожалению, мы по-прежнему поддерживаем CentOS 6, который включает git 1.7. Git 1.7 не включает флаг «--merged» в теге git, так что мое действие больше не будет работать.

Предыстория: Мы исходим из подрывной деятельности и ранее использовали номер версии, поскольку наши критерии для просмотра кода требуют обновления схемы.

Есть ли какая-нибудь работа вокруг старого git 1.7, чтобы в принципе создать то же самое, что и команда git tag -merged. Или есть лучший способ приблизиться к этому.

ответ

1

Все --merged does is test ancestry, поэтому вы можете сделать это вручную. То есть, тег Т "сливается" совершить C, если Т   совершаютС. «≤» тест для фиксаций осуществляется с git merge-base --is-ancestor и поворота T в свою фиксацию T   совершить легко сделать с gitrevisions syntax путем добавления ^{commit}. (Если тег T указывает на нечто иное, чем совершить, это не получится с грохотом, с посланием STDERR.)

К сожалению, git merge-base --is-ancestor был добавлен в Git 1.8.

К счастью, the documentation имеет буквальные немного скрипта, показывающие «старый способ» делать то, что более красиво выражаются через этот --is-ancestor тест:

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

A=$(git rev-parse --verify A) 
if test "$A" = "$(git merge-base A B)" 
then 
    ... A is an ancestor of B ... 
fi 

В современном мерзавца, вы можете сказать, что это в более прямой путь:

if git merge-base --is-ancestor A B 
then 
    ... A is an ancestor of B ... 
fi 

вместо этого.

Просто заменить в старом тесте с использованием T^{commit} для начального A и $C (наш совершить, чтобы проверить) для B:

A=$(git rev-parse T^{commit}) || exit 1 
if test $A = "$(git merge-base A $C)"; then ...; fi 
+0

спасибо, я дам это попробовать – vossman77

+0

это работало, я был способный реализовать «git tag -merged», хотя и намного медленнее. – vossman77

 Смежные вопросы

  • Нет связанных вопросов^_^