Wenn Sie Free-Plan für Private Repo in Github verwenden, können Sie möglicherweise die Funktion für geschützte Zweige nicht verwenden. Sie müssen also jeden Push / Commit von lokal blockieren.
Dies habe ich getan, damit es lokal funktioniert und an alle Repo-Mitglieder verteilt wird.
Zunächst müssen Sie Husky installieren, um den Pre-Commit- und Pre-Push-Hook zu steuern. Dann habe ich ein Pre-Push-Bash-Skript erstellt und es im Repository festgeschrieben. Rufen Sie dann dieses Skript vom Husky-Pre-Push-Hook mit dem Husky-Parameter auf.
Dies ist meine Husky-Konfiguration im Inneren package.json
(Sie können eine separate Konfiguration festlegen, wenn Sie möchten)
"husky": {
"hooks": {
"pre-commit": "./commands/pre-commit",
"pre-push": "./commands/pre-push $HUSKY_GIT_STDIN"
}
},
Wie Sie sehen können, habe ich zwei Skripte, eines für Pre-Push und eines für Pre-Commit.
Und das ist mein commands/pre-push
Bash-Skript
#!/bin/bash
echo -e "===\n>> Talenavi Pre-push Hook: Checking branch name / Mengecek nama branch..."
BRANCH=`git rev-parse --abbrev-ref HEAD`
PROTECTED_BRANCHES="^(master|develop)"
if [[ $1 != *"$BRANCH"* ]]
then
echo -e "\n🚫 You must use (git push origin $BRANCH) / Anda harus menggunakan (git push origin $BRANCH).\n" && exit 1
fi
if [[ "$BRANCH" =~ $PROTECTED_BRANCHES ]]
then
echo -e "\n🚫 Cannot push to remote $BRANCH branch, please create your own branch and use PR."
echo -e "🚫 Tidak bisa push ke remote branch $BRANCH, silahkan buat branch kamu sendiri dan gunakan pull request.\n" && exit 1
fi
echo -e ">> Finish checking branch name / Selesai mengecek nama branch.\n==="
exit 0
Das Skript wird im Grunde zwei Dinge tun:
- Dieses Skript blockiert jeden, der versucht, auf einen bestimmten Zweig zu pushen (in meinem Fall möchte ich nicht, dass jemand - auch ich - direkt auf einen Zweig pusht
master
und develop
verzweigt). Sie müssen in ihrer eigenen Niederlassung arbeiten und dann eine Pull-Anfrage erstellen.
- Dieses Skript blockiert jeden, der versucht, auf einen Zweig zu pushen, der sich von seinem aktuell aktiven Zweig unterscheidet. Zum Beispiel sind Sie in der Verzweigung,
fix/someissue
aber dann geben Sie fälschlicherweise ein git push origin master
.
Ausführlichere Anweisungen finden Sie in diesem Artikel:
https://github.com/talenavi/husky-precommit-prepush-githooks