2013-08-21 1 views
0

Nous faisons une conversion de cvs/bugzilla à git/Stash/Jira. Je teste en utilisant git filter-branch pour réécrire bug # bugzilla dans les messages de validation avec les ID de problème jira. Cela fonctionne sauf qu'il affecte seulement le maître et non les branches. J'ai utilisé -- --all mais aucune branche n'a été extraite. Est-ce nécessaire? commande exacte suit:Faire git-filter-branch sur toutes les branches

git filter-branch -f --msg-filter 'ruby -S gitBugzillaToJira.sh' --tag-name-filter cat -- --all 

Remarque - Le script Ruby gitBugzillatoJira.sh fait le travail pour échanger le numéro de Bugzilla à l'ID d'émission Jira.

Des idées?

+0

Je suis l'auteur du BFG, qui offrira le message de validation de réécriture dans sa prochaine version. Par intérêt, combien d'identifiants de problèmes distincts devez-vous réécrire? –

+0

~ 10k problèmes. J'ai lu à propos de BFG! Même vu la vidéo comparant BFG (sur un Pi) et filtre-branche. :-) Je ne l'avais pas regardé plus parce que j'avais le filtre-branche fonctionnant (ou alors je pensais) et maintenant réalisé ce problème ... – Scott

+0

@RobertoTyley Cette fonctionnalité a-t-elle jamais été incluse dans le nettoyeur de repo BFG? Je viens d'utiliser la version 1.12.16 et je n'ai pas pu repérer une option permettant de changer les messages de validation. – lenz

Répondre

1

Votre incantation git-filter-branch semble correcte, elle devrait mettre à jour toutes les références se trouvant dans la copie locale de votre repo.

Voici une démo très similaire, montrant ce travail correctement, comme prévu:

$ git clone https://github.com/defunkt/github-gem.git 
$ cd github-gem/ 
$ git filter-branch -f --msg-filter 'sed "s/e/E/g"' --tag-name-filter cat -- --all 

... vous verrez la sortie comme ça en revenant de git-filter-branch, ce qui indique qu'il est mis à jour toutes les branches et les étiquettes (sans que vous ayez à faire un git checkout sur eux):

Rewrite 8ef0c3087d2e5d1f6fe328c06974d787b47df423 (436/436) 
Ref 'refs/heads/master' was rewritten 
Ref 'refs/remotes/origin/master' was rewritten 
Ref 'refs/remotes/origin/fallthrough' was rewritten 
Ref 'refs/remotes/origin/gist' was rewritten 
Ref 'refs/remotes/origin/keithpitt-ruby-1.9-update' was rewritten 
WARNING: Ref 'refs/remotes/origin/master' is unchanged 
Ref 'refs/remotes/origin/organizations' was rewritten 
Ref 'refs/remotes/origin/upload' was rewritten 
Ref 'refs/tags/REL-0.4.2' was rewritten 

Quelle sortie obtenez-vous de cette partie de votre course git filter-branch?

+0

Merci pour vos commentaires. J'ai voté votre réponse pour être utile. Comme indiqué ci-dessous, je réalise maintenant que ce n'était pas git filter-branch qui était le problème après tout. C'était mon incantation de git-push! – Scott

0

User Error!

Comme dit l'image, il est cas d'erreur de l'utilisateur! Après avoir reçu la confirmation d'une tierce partie, ma branche git-filter devrait fonctionner, je me suis rendu compte que je n'avais fait que git push donc seules les branches vérifiées localement ont été poussées. On dirait que je devrais git push --all pour mettre à jour toutes les références. Maintenant, je dois comprendre pourquoi je reçois 3 références à maître avec mes autres branches:

* [new branch]  refs/original/refs/heads/master -> refs/original/refs/heads/master 
* [new branch]  refs/original/refs/remotes/origin/master -> refs/original/refs/remotes/origin/master 
* [new branch]  origin/master -> origin/master 
+0

Je devrais chercher SO, d'abord. De http://stackoverflow.com/questions/7654822/remove-refs-original-heads-master-from-git-repo-after-filter-branch-tree-filte refs/original/* est la copie de sauvegarde que je lire à propos de refs/heads/master étant le pointeur de la tête de mon maître local et refs/remotes/origin/master étant la branche maîtresse – Scott

Questions connexes