C'è un modo per attivare un hook dopo che un nuovo ramo è stato estratto in Git?C'è un modo per attivare un hook dopo che un nuovo ramo è stato estratto in Git?
risposta
Se uno di questi ganci non lo farò io sarei stupito
http://schacon.github.com/git/githooks.html
Forse questo:
post-checkout
Questo hook viene invocato quando a git-checkout viene eseguito dopo aver aggiornato l'albero di lavoro con lo . Il gancio è dato tre parametri: l'arbitro del HEAD precedente, l'arbitro del nuovo HEAD (che possono o non possono essere cambiato), e un flag che indica se l'offerta era una cassa ramo (rami mutevoli , flag = 1) o un file checkout (recupero di un file dall'indice , flag = 0). Questo hook non può influenzare il risultato di git-checkout.
Un gancio git è uno script collocato in una posizione speciale del repository, che la posizione è:
.git/ganci
Lo script possono essere di qualsiasi tipo che si può esegui nel tuo ambiente, ad esempio bash, python, ruby, ecc.
Il gancio che viene eseguito dopo un checkout è post-checkout. Dalla documentazione:
... Il gancio è dato tre parametri ...
Esempio:
Creare il gancio (scritto):
touch .git/hooks/post-checkout chmod u+x .git/hooks/post-checkout
Contenuto campione di aggancio:
#!/bin/bash
set -e
printf '\npost-checkout hook\n\n'
prevHEAD=$1
newHEAD=$2
checkoutType=$3
[[ $checkoutType == 1 ]] && checkoutType='branch' ||
checkoutType='file' ;
echo 'Checkout type: '$checkoutType
echo ' prev HEAD: '`git name-rev --name-only $prevHEAD`
echo ' new HEAD: '`git name-rev --name-only $newHEAD`
Nota: La baracca nella prima riga indica il tipo di script.
Questo script (git hook) acquisirà solo i tre parametri passati e li stamperà in un formato di facile utilizzo.
Il post-checkout
hook riceve tre parametri:
- Rif del precedente capo
- Ref di nuovo capo
- Se questo è un file di checkout (
0
) o ramo checkout (1
)
È possibile utilizzare il fatto che un ramo creato dall'attuale HEAD avrà lo stesso valore per i parametri 1 e 2.
cat > .git/hooks/post-checkout <<"EOF"
if [ "$3" == "0" ]; then exit; fi
if [ "$1" == "$2" ]; then
echo "New branch created. (Probably)."
fi
EOF
chmod u+x .git/hooks/post-checkout
Limitazioni:
- Verificando un ramo esistente che risulta essere allo stesso HEAD come HEAD corrente ingannare esso.
- Creazione di un nuovo ramo non dal corrente HEAD non verrà rilevato.
Simile ad altri ma verifica che il ramo sia stato estratto una volta.
#!/bin/bash
# this is a file checkout – do nothing
if [ "$3" == "0" ]; then exit; fi
BRANCH_NAME=$(git symbolic-ref --short -q HEAD)
NUM_CHECKOUTS=`git reflog --date=local | grep -o ${BRANCH_NAME} | wc -l`
#if the refs of the previous and new heads are the same
#AND the number of checkouts equals one, a new branch has been created
if [ "$1" == "$2" ] && [ ${NUM_CHECKOUTS} -eq 1 ]; then
git push origin ${BRANCH_NAME}
fi
Questo mi ha fatto sulla strada giusta, grazie mille! Dato che il reflog è greppato per contare i checkout, credo che sarebbe stato un getcha se un ramo fosse esistito in precedenza e un nuovo ramo con lo stesso nome fosse stato creato, quel ramo non sarebbe stato riconosciuto come nuovo. Questo potrebbe essere il comportamento desiderato o un problema a seconda del caso d'uso, ma ho appena pensato di parlarne. – Pwnrar
- 1. Spostare un ramo in un nuovo tag
- 2. git: premendo un ramo nuovo, vuoto per un progetto vuoto?
- 3. Git: creato nuovo ramo da un ramo sbagliato
- 4. Qual è il modo corretto per determinare lo stato di un ramo Git in modo programmatico?
- 5. Git: local-tracking, aggiungi un nuovo ramo?
- 6. Ottieni un nuovo ramo upstream con git
- 7. C'è un modo per bloccare un ramo in GIT
- 8. git: come trasformare un clone in un nuovo ramo?
- 9. Git: come creare un nuovo ramo da un tag?
- 10. Git - Come verificare se un ramo è mai stato fuso in un altro ramo?
- 11. Git crea il ramo dal master estratto?
- 12. Qual è il modo più semplice/veloce per scoprire quando è stato creato un ramo git?
- 13. Git: Che cos'è un ramo di monitoraggio?
- 14. Un modo più semplice per mantenere aggiornato un ramo git
- 15. Git dice che il ramo locale è davanti al telecomando dopo aver estratto il telecomando
- 16. Git hook quando un nuovo ramo viene creato e/o spinto
- 17. C'è un hook git che gira su git reset?
- 18. clone git in un ramo
- 19. Git Git: agisci quando un ramo è avanzato
- 20. Come resettare un ramo su un altro ramo con git?
- 21. In Git, come posso configurare un hook per eseguire un comando sul lato server dopo che un commit è stato accettato?
- 22. Git esclude un commit in un ramo
- 23. Come unire un ramo ad un altro ramo in GIT?
- 24. Qual è il modo migliore per clonare/duplicare un progetto in un nuovo con git?
- 25. Link simbolico a un hook in git
- 26. Blocco di un ramo Git
- 27. Divisione Git diff in un nuovo commit
- 28. Git-svn: crea e spinge un nuovo ramo/tag?
- 29. Git: ripristina/ripristina un intero ramo in uno stato di un altro ramo?
- 30. C'è un modo per spingere dichiaratamente gli aggiornamenti ad un osservabile dopo che è stato definito?
Sei a conoscenza di un modo per dire se questa è la verifica della creazione del ramo (oltre a guardare il nuovo reflog del HEAD)? – pkoch
Sembra che sarebbe una buona idea per te porre una nuova domanda. Se lo fai, inviami il link e vedrò se posso aiutarti. Qual è il problema che stai cercando di risolvere? – givanse
Se un commit è in cima a diversi rami, 'name-rev' dà solo il nome che viene in ordine alfabetico per primo. Quindi, dopo aver verificato un ramo con un nome che precede alfabeticamente il nome del ramo originale, la riga 'prec HEAD' darà il nome del ramo NEW. Una soluzione: 'thisBranchName = $ (git rev-parse --abbrev-ref HEAD); per il ramo in $ (git branch --color = never - contiene $ 1 | sed -e 's /^..//'); do if ["$ (git show-ref -s $ branch)" == $ 1] && ["$ branch"! = "$ thisBranchName"]; quindi parentBranchName = $ branch; interruzione; fi; done' – Ansa211