Używając Gita, bardzo często korzystamy (a jeśli nie, to nie wykorzystujemy w pełni jego potencjału) z modelu branchowania podobnego do tego. W modelu tym zależy nam, żeby jakoś wyróżnić gałęzie releasowe od rozwojowych. Ustalamy, że gałąź releasowa jest odbijana zawsze od mastera i jej nazwa ma następujący format:
natomiast gałąź rozwojowa może być odbijana od dowolnej innej gałęzi i jej nazwa musi pasować do:
release/<numer_wersji>_yyyyMMdd
develop/<opis>_yyyyMMddTworzymy odpowiednie aliasy, żeby nie tworzyć tych gałęzi ręcznie (i pamiętać o ustalonych zasadach):
new-release = !sh -c 'DATE=$(date +%Y%m%d) && VERSION=$0 && RELEASE_BRANCH_NAME=\"release/\"$VERSION\"_\"$DATE && git checkout master && git pull && git checkout -b $RELEASE_BRANCH_NAME && git push-upstream'
new-develop = !sh -c 'DATE=$(date +%Y%m%d) && BRANCH_NAME=\"develop/\"$0\"_\"$DATE && git checkout -b $BRANCH_NAME && git push-upstream'
I samo wywołanie:
$ git new-relase 1.0.1 $ git new-develop refaktor_super_klasy_x
Wracając do głównego problemu, to jak te aliasy rozpropagować? Albo jak rozpropagować ewentualnie ich modyfikacje? Instrukcja na wiki jest dobra tylko przy pierwszej instalacji Gita, potem nikt tam nie zagląda. Maile czyta 80%, a stosuje 50% osób. Na szczęście jest pewien sposób:
- Tworzymy repozytorium Gita (git-config-common) gdzie trzymamy aliasy i wspólną konfigurację Gita (plik common-configuration).
- Klonujemy to repo na naszą maszynę.
- Konfigurujemy Git’a żeby korzystał z dodatkowego pliku z ustawieniami:
git config --global include.path "~/git-config-common/common-configuration"
- W pliku common-configuration dodajemy alias do aktualizacji aliasów (:)):
update-config-common = !sh -c 'OLDPWD=. cd ~/git-config-common && git pull && cd $OLDPWD'
#!/bin/sh release="release" develop="develop" release_regexp="^(release/[0-9_]+_[0-9]{8})$" develop_regexp="^(develop/[a-zA-Z0-9_]+_[0-9]{8})$" wrong_branch_name_message(){ echo "" echo "!!! Nazwa galezi nie jest poprawna !!!" echo "1. Upewnij sie czy przestrzegasz konwencji nazewniczych." echo "2. Sprawdz czy masz aktualne aliasy" echo "" } while read old new ref; do # echo $old"-"$new"-"$ref if [[ $old == "0000000000000000000000000000000000000000" ]] ; then if [[ ("$ref" == *"$release"*) ]] ; then branch_name=${ref#*refs/heads/} echo "Wykryto nowa galaz release, sprawdzam czy nazwa \"$branch_name\" jest poprawna..." if [[ "$branch_name" =~ "$release_regexp" ]] ; then echo "Nazwa galezi jest poprawna" else wrong_branch_name_message exit 1 fi fi; if [[ ("$ref" == *"$develop"*) ]] ; then branch_name=${ref#*refs/heads/} echo "Wykryto nowa galaz develop, sprawdzam czy nazwa \"$branch_name\" jest poprawna..." if [[ "$branch_name" =~ "$develop_regexp" ]] ; then echo "Nazwa galezi jest poprawna" else wrong_branch_name_message exit 1 fi fi; fi; done
Brak komentarzy:
Prześlij komentarz