GIT - pre-receive: zákaz push do master rubrika: Nástroje: Verzování
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.
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:
Nebo se přihlaste jménem a heslem: