GIT - pre-receive: zákaz push do master rubrika: Nástroje: Verzování

4 pilif
položil/-a 13.1.2017

Zdravím ve spolek,
pokouším se nastavit hook v GITu tak, aby nebylo možné pro vybrané vývojáře "pushnout" do větve master.
V hooku mám tento kód (není finální):

log="/opt/git/ostatni/ukazka.git/hooks/push.log"
protected_branch="master"
policy="\n\n[Policy] Never push code directly to the "$protected_branch" branch! (Prevented with pre-push hook.)\n\n"
USER_NAME=$(git log -1 --format=format:%an HEAD)
echo "User "$USER >> $log
echo "Git user "$USER_NAME >> $log
 
do_exit(){
  echo -e $policy
  echo $policy >> $log
  exit 1
}
 
 
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    echo "branch = "$branch >> $log
    if [[ "master" = $branch ]]; then
        echo "master test" >> $log
        do_exit
    fi
done
 
 
unset do_exit
echo "Push successfull." >> $log
exit 0

Pokud z jiného PC tedy pushnu verzi do master, tak jsem očekával "fail". Bohužel mi tam nějak nezafunguje ta podmínka.
Výstup logu vypadá takto:

User git
Git user UserName
branch = master
Push successfull.

Vidíte tam někdo nějakou chybu?
Případně jak řešíte omezení na push do produkční větve?

Dík.

odkaz Vyřešeno
4 pilif
odpověděl/-a 15.1.2017
 
upravil/-a 16.1.2017

Tak opravdu jsem měl bordel v těch uvozovkách.
Toto mi již funguje podle představ.

#!/bin/sh
log="$PWD/hooks/push.log"
protected_branch="master"
policy="nemate opravneni"
allow="uzivatel"
 
do_exit(){
  echo "! ! ! ! ! ! !"
  echo $policy
  echo "! ! ! ! ! ! !"
  echo $policy >> $log
  exit 1
}
 
while read oldrev newrev refname
do
    uname=$(git log $refname)
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    if [ "$protected_branch" = "$branch" ]; then
        un=$(git log -1 --pretty=format:%an $newrev)
        echo "Zapis do $protected_branch uzivatelem $un" >> $log
        if [ "$allow" != "$un" ]; then
             #echo $policy >> $log
             policy="\nUživatel $un. Nemáte oprávnění zapisovat do větve: $protected_branch \n"
             do_exit
        fi
    fi
done
 
unset do_exit
 
exit 0

Ještě k té dodatečné otázce: řešíte někdo takováto omezení? Pokud ano, tak jakým způsobem?
Vím v podstatě pouze o dvou způsobech a to tento v hooku anebo si udělat jiný vzdálený repozitář a tam dle SSH oprávnění umožnit zápis pouze příslušným jedincům.

Pro zobrazení všech 6 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.