2011-10-01 1 views
1

Nous essayons d'implémenter un workflow git où il existe un hook de pré-réception sur le repo distant pour valider que toutes les références push ont des messages de validation contenant certaines informations requises. Afin de fournir une certaine commodité aux développeurs, nous aimerions aussi qu'une commande git locale puisse être exécutée pour voir ce que toutes les références seraient poussées par une commande push afin qu'elles puissent vérifier avant de pousser si leur push passerait ou non le hook, et créez également une nouvelle commande git qui appelle filter-branch ou autre chose pour réécrire tous les messages de validation afin de remplir toute information manquante.Comment obtenir une liste de toutes les références qu'une poussée de git pousserait?

Alors, est-il possible d'obtenir une liste de tout ce qui serait poussé par une commande push? git push --dry-run --verbose donne seulement un résumé très sommaire:

Par exemple,

> git push --dry-run --verbose origin head:test/me 

Pushing to [email protected]:myproject.git 
To [email protected]:myproject.git 
* [new branch]  head -> test/me 
+0

Vous lui avez dit explicitement de pousser HEAD pour tester/moi, et en retour il vous a dit qu'il créerait une nouvelle branche sur le serveur nommé test/moi. Qu'est-ce qui est superficiel à ce sujet? –

+0

@Kevin Je souhaite connaître la liste complète des validations qu'il va transmettre au référentiel distant, soit sous forme de liste de hachages, soit via la syntaxe foo..bar. – nohat

+0

Combien de refs un git pousserait-il si un push git poussait refs? – nohat

Répondre

0

Vous pouvez utiliser git pousser --porcelain.

2
git log @{u}.. 

Ceci liste tous les commits qui n'ont pas encore été envoyés à la télécommande. Si vous voulez que la diff de chaque allouent puis ajoutez un -p après l'enregistrement

git log -p @{u}.. 

Oui, les deux points à la fin sont nécessaires. :)

+0

Cela semble prometteur, mais qu'est-ce que c'est supposé être {@ u}? Quand j'exécute cela, j'obtiens 'erreur: Aucune branche en amont trouvée pour '' erreur: Aucune branche en amont trouvée pour '' erreur: Aucune branche en amont trouvée pour '' fatal: argument ambigu '@ {u} ..': révision inconnue ou chemin non dans l'arbre de travail. Utilisez '-' pour séparer les chemins des révisions' – nohat

+0

@nohat Cette réponse arrive très tard, mais elle est quand même ici: @ {u} est un raccourci pour @ {upstream} qui est un pointeur vers la pointe de la télécommande -tracking branche que la branche courante suit. L'erreur que vous voyez est due à un mappage manquant entre votre branche actuellement active et sa branche de suivi à distance. Exécutez 'git branch --set-upstream /' pour configurer le mappage. Si 'test' est la branche et' origin' est la télécommande alors 'git branch --set-upstream test origin/test' va configurer le mapping. En outre, je serais heureux si vous retirez le score -ve. – brahmana

+0

C'est bien de savoir ce raccourci! 'git cherry -v @ {u}' peut le faire aussi. –

Questions connexes