2010-06-11 7 views
2

Ma société est en train de passer de CVS à git. Nous sommes sur CVS depuis longtemps, donc il y a une grande histoire. Trop à faire à la main.Massive git commit squashing

En regardant les bûches, il y a beaucoup d'écrasement qui pourrait être fait. Beaucoup de choses. Ce que je voudrais faire, c'est accrocher un script qui va comparer deux commits adjacents. Si elle renvoie true, concaténez les messages de validation et écrasez les validations. Je serais également heureux avec une commande qui accepte deux commits et un message de commit, puis les écrase ensemble. Git rebase --interactive est proche de ce dont j'ai besoin, mais "squash" nécessite beaucoup trop d'intervention manuelle. J'ai également regardé l'utilisation de "fixup" au lieu de squash, mais je ne veux pas perdre les messages de validation.

Des idées?

Répondre

2

Que diriez-vous de --autosquash?

Vous pouvez le combiner avec git filter-branch au script en renommant les commits. (Un mot d'avertissement, cependant, soyez prudent avec la branche de filtre, et lisez les avertissements dans sa page de man Ce n'est pas une commande pour les faibles de coeur.)

+0

Je pourrais me tromper, mais cela ne résoudra toujours pas le problème "Concaténation des messages". Autosquash semble être le même que squash/fixup, mais basé sur le message de validation. – Nycto

+0

En fait, vous pourriez probablement utiliser filtre-branche, oublier la rebase --autosquash entièrement. – dublev

+0

Votre suggestion à propos de filter-branch s'est avérée correcte. L'utilisation du drapeau "commit-filter" vous permet de traiter chaque commit dans le repo entier. Dans le script de rappel que vous avez transmis, vous pouvez rediriger un message dans la commande commit-tree pour modifier le message de validation. Vous pouvez également appeler skip_commit pour fusionner le commit actuel dans le commit suivant. – Nycto