2016-02-04 2 views
0

Je suis en train de créer un alias pour mon flux de travail "fusionner à la mise en scène". Disons que j'ai terminé une tâche dans la branche "dev/layout_fix" et que je veux la déployer dans le staging après l'avoir validée.Git config alias problème

Voici ma voie:

  1. git checkout staging
  2. git merge dev/layout_fix --no-ff
  3. git push
  4. git checkout dev/layout_fix

Maintenant, je l'ai essayé cette approche:

[alias] branch-name = "!git rev-parse --abbrev-ref HEAD" stagify = "!git checkout staging && git merge $(git branch-name) --no-ff && git push && git checkout $(git branch-name)"

mais le nom de branche alias est "staging" en raison de la vérification.

Est-il possible d'écrire le nom de la branche actuelle dans une variable avant que la mise en scène soit extraite?

Répondre

1

Est-il possible d'écrire le nom de la branche en cours dans une variable avant que celle-ci ne soit extraite?

Bien sûr. Puisque vous préfixez vos alias git avec !, ce ne sont que des scripts de shells. Ainsi, vous pouvez coller la sortie des commandes git dans les variables de la même façon que vous le feriez pour un script shell, par exemple, quelque chose comme ceci:

[alias] 
branch-name = "rev-parse --abbrev-ref HEAD"        
mybranch = "!branch=$(git branch-name); echo my branch is: $branch"  

Avec cette définition, je peux courir ceci:

git mybranch 

Et obtenez:

my branch is: master 

Cela devrait être assez pour vous aider à démarrer.

+0

Oui, c'est tout! Merci beaucoup. – bambamboole

0

Vous pouvez obtenir le nom de la branche actuelle en utilisant git describe --exact-match --all. Au lieu d'un alias, vous pouvez écrire un script et le déployer à /usr/libexec/git. Vous avez juste à le placer là et l'appeler git-stagify. J'écris ceci de mémoire, mais je crois que c'est le chemin par défaut. Vous pouvez le trouver en recherchant où se trouve git-pull (avec le tiret), en utilisant locate ou tout ce qui est disponible dans votre distribution. Cela vous donnera tous les avantages de l'environnement de script bash, qui peut être manquant lorsque vous utilisez simplement des alias.

0

La commande alias complet ressemble:

stagify = "!branch=$(git rev-parse --abbrev-ref HEAD) && git checkout staging && git merge $branch --no-ff && git push && git checkout $branch"

Merci à @larsks pour la bonne approche.

+1

Une note: 'git rev-parse --abbrev-ref HEAD' affichera' HEAD' quand vous êtes en mode tête détachée. C'est souvent la bonne réponse, mais pas utile pour votre objectif final (qui consiste à changer temporairement HEAD).Vous pouvez utiliser 'git symbolic-ref --short HEAD' à la place, ce qui fera échouer toute la séquence (probablement ce que vous voulez-l'autre option est de fusionner par commit ID, ce qui est une chose valide à faire mais peut-être pas ce que tu voudrais). – torek