J'ai besoin d'aide avec un script Bash qui ajoutera automatiquement le nom de la branche de git en tant que hachage dans les messages de validation.
git
bash
git-branch
Tomer Lichtash
la source
la source
git branch | grep ...
concerne l'obtention de la branche actuelle n'est pas la bonne façon de le faire. Considérez soitgit symbolic-ref -q HEAD
(comme indiqué dans cette réponse ) ougit rev-parse --abbrev-ref HEAD
. La commande symbolic-ref échouera si vous êtes sur un HEAD détaché, donc si vous souhaitez détecter ce cas, utilisez-le. Sinon, la méthode rev-parse --abbrev-ref est probablement la meilleure.Réponses:
Utilisez le
prepare-commit-msg
oucommit-msg
githook .Il existe déjà des exemples dans votre
PROJECT/.git/hooks/
répertoire.Par mesure de sécurité, vous devrez activer manuellement un tel hook sur chaque référentiel que vous souhaitez utiliser. Cependant, vous pouvez valider le script et le copier sur tous les clones dans le
.git/hooks/
répertoire.la source
.git/hooks/prepare-commit-msg.sample
. =) Tout ce que vous devez modifier (après avoir suivi les instructions dans les commentaires) est de copier-coller la solution de stackoverflow.com/questions/1593051/… que vous souhaitez.git/hooks/prepare-commit-msg.sample
contient trois exemples. Une pour commenter la section des conflits, y ajouter unegit diff --name-status -r
sortie et ajouter des lignes Signed-off-by ... Pas d'ajout de nom de branche au message de validation. J'ai donc été obligé d'écrire mon propre crochet.you will have to manually enable such a hook on each repository you wish to use it
signifie- t-il que vous devez accorder des autorisations d'exécution au FILE? Si oui, puis-je modifier la réponse pour inclure cela (ou pourriez-vous, s'il vous plaît)?Voici mon
commit-msg
script à titre d'exemple:Crée le message de validation suivant:
J'utilise le numéro de
branch_name
problème, la description du problème est placée dans la commandebranch_description
usinggit branch --edit-description [branch_name]
.Pour en savoir plus sur les descriptions des succursales, consultez ce Q&R .
L'exemple de code est stocké dans Gist suivant .
la source
echo $NAME: "$(cat $1)" > $1
. Cela fonctionne parce que la raison pour laquelle les nouvelles lignes étaient perdues est que l'écho traitait chaque ligne de$(cat "$1")
comme un nouvel argument et faisait écho à chacune avec un espace entre les deux. En l'entourant$(cat "$1")
de guillemets doubles, echo traite la sortie cat comme un argument unique. Aussi, je ne pense pas qu'il soit nécessaire de citer$1
car sa valeur est.git/COMMIT_EDITMSG
Un script un peu plus simple qui ajoute le nom de la branche au message de validation avant de le modifier. Donc, si vous souhaitez le modifier ou le supprimer, vous pouvez.
Créez ce fichier .git / hooks / prepare-commit-msg :
la source
sed: 1: ".git/COMMIT_EDITMSG": invalid command code .
en utilisant ceci.sed -i '.bak' "1s/^/$branchName : \n/" $1
@
commesed
séparateur au lieu de/
puisque les barres obliques sont plus susceptibles d'apparaître dans le nom de la branche ou le message de validation, ce qui est foutused
.Vous pouvez le faire avec une combinaison des hooks prepare-commit-msg et pre-commit.
.git / hooks / prepare-commit-msg
.git / hooks / pre-commit
Définir les autorisations
la source
--amend
par exemple. Au lieu d'utiliser,echo
vous devriez utiliser à lased
place. Le voici dans un one liner:sed -i "1s@^@$(git branch | grep '^\*' | cut -b3-) @" $1
ajoutez le code ci-dessous dans le fichier prepare-commit-msg.
Il ajoutera le nom de la branche au message de validation sauf fusion-validation. Le merge-commit a des informations de branche par défaut, donc un nom de branche supplémentaire n'est pas nécessaire et rend le message laid.
la source
Inspiré par la réponse de Tim qui s'appuie sur la première réponse, il s'avère que le hook prepare-commit-msg prend comme argument le type de commit qui se produit . Comme on le voit dans le fichier prepare-commit-msg par défaut, si $ 2 est «merge», alors c'est un commit de fusion. Ainsi, le commutateur de casse peut être modifié pour inclure la fonction addBranchName () de Tim.
J'ai inclus ma propre préférence pour la manière d'ajouter le nom de la branche et toutes les parties non commentées du
prepare-commit-msg.sample
hook par défaut .la source
Si vous souhaitez le rendre global (pour tous les projets):
Créez un
git-msg
fichier avec le contenu de la réponse de shytikov et placez-le dans un dossier:Maintenant, activez les hooks:
et
git init
encore une fois dans chaque projet que vous souhaitez utiliser.la source
J'avais des problèmes pour que ces solutions fonctionnent sur MacOS en raison du fait qu'il utilise BSD
sed
au lieu de GNUsed
. J'ai réussi à créer un script simple qui fait le travail. Toujours en utilisant.git/hooks/pre-commit
:Cela suppose une norme de dénomination de branche similaire à
functional-desc_JIRA-NUMBER
. Si le nom de votre succursale n'est que votre numéro de ticket Jira, vous pouvez simplement vous débarrasser de tout, du tuyau au f2. Cela nécessite également que vous ayez un fichier nommé.gitmessage
dans votre répertoire personnel.la source
Si vous souhaitez que le ticket JIRA soit ajouté au message de validation, utilisez le script ci-dessous.
Message de validation quelque chose comme
PROJECT-2313: Add awesome feature
Cela nécessite que le nom de votre succursale commence par le ticket jira.C'est une combinaison de ces solutions:
Il est modifié pour OS X, avec le
sed -i '.bak'
et fonctionne également à partir de SourceTree.https://gist.github.com/georgescumihai/c368e199a9455807b9fbd66f44160095
la source