Git ловит хак для обхода плохой целевой ветки при открытии обзора слияния на Gitlab - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть привычка создавать запросы на слияние (MR), нажимая ссылку, напечатанную удаленным сервером в толчках:

╰─ git push
Counting objects: 33, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (33/33), done.
Writing objects: 100% (33/33), 3.46 KiB | 1.73 MiB/s, done.
Total 33 (delta 31), reused 0 (delta 0)
remote: 
remote: To create a merge request for modelref, visit:
remote:   https://gitlab.com/foo/bar/merge_requests/new?merge_request%5Bsource_branch%5D=mybranch

Проблема в том, что целевая ветвь MR будет установлена ​​на предварительно сконфигурированную master ветвь *

Так что, в основном, я бы предпочел иметь URL с параметром merge_request%5Btarget_branch%5D= url, установленным в родительскую ветвь ( этот скрипт находит его).

Я мог бы написать локальный pre-push хук (поскольку локальные post-push операции не существуют), который создает этот URL, который я бы щелкнул вместо этого, но можете ли вы найти менее уродливый хак?


* , что приведет к потере времени, если я не изменю целевую ветку сразу, так как при изменении этого поля формы будут сброшены все остальные поля (https://gitlab.com/gitlab-org/gitlab-ce/issues/22090)

1 Ответ

0 голосов
/ 04 декабря 2018

Вот что я в итоге сделал:

~ / bin / git-branchestor.sh

#!/bin/bash

# Find closest ancestor given two candidate branches

branch=`git rev-parse --abbrev-ref HEAD`
commit1=`git merge-base $branch ${1}`
commit2=`git merge-base $branch ${2}`
ancestor=`git merge-base ${commit1} ${commit2}`
if [[ "$commit1" == "$ancestor" ]]; then
    echo ${2}
else
    echo ${1}
fi

Мои ветви функций разветвляются от hotfix или develop, это аргументы, которые я привожу в свой git-branchestor.sh скрипт:

.git / hooks / pre-push

#!/bin/bash

remote="$1"
url="$2"

z40=0000000000000000000000000000000000000000

while read local_ref local_sha remote_ref remote_sha
do
    if [ "$local_sha" = $z40 ]
    then
        # Handle delete
        :
    else
        if [ "$remote_sha" = $z40 ]
        then
            # New branch, examine all commits
            range="$local_sha"
        else
            # Update to existing branch, examine new commits
            range="$remote_sha..$local_sha"
        fi
        branch=$(git rev-parse --abbrev-ref HEAD)
        if [[ "$branch" != "hotfix" && "$branch" != "master" && "$branch" != "develop" ]]; then
          ancestor=`~/bin/git-branchestor.sh hotfix develop`
          echo "Open MR: https://gitlab.com/user/project/merge_requests/new?merge_request%5Bsource_branch%5D=${branch}&merge_request%5Btarget_branch%5D=${ancestor}"
          echo ""
        fi
    fi
done

exit 0
...