2014-07-18 1 views
9

J'ai récemment dû appliquer 16 patches à mon repo, en utilisant 'git am', et j'ai pris soin d'utiliser '--committer-date-is-author-date' pour chacun d'entre eux. Cependant, j'avais aussi besoin d'ajuster le message de commit pour chaque patch am'd, et-- après avoir fini avec tous les 16-- j'ai découvert que 'commit --amend' a bumpé l'horodateur du committer pour chacun d'entre eux.Utilisez 'git filter-branch' pour corriger les dates des commits dans les N dernières validations?

J'ai finalement appris que mon problème pourrait être résolu en un seul coup avec

git rebase --committer-date-is-author-date <SHA-of-commit-prior-to-patches> 

mais pas avant d'essayer de résoudre mon problème avec « filtre-branche », qui ne fonctionne pas. Je suis curieux de savoir ce que j'ai fait de mal. Voici ma tentative:

git filter-branch --env-filter \ 
    'export GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE' SHA1..HEAD 

Et voici le résultat:

Rewrite 1c52265d1f06bd67e0fed1c09e1e75249424476e (1/15)/usr/lib/git-core/git-filter-branch: 1: export: -0500: bad variable name 

Qu'est-ce que je fait de mal? Ne suis-je pas autorisé à définir/exporter une variable pour qu'elle soit la valeur d'une autre, dans un filtre d'env? Notez que j'ai adapté mon approche de celle qui modifiait conditionnellement GIT_AUTHOR_DATE et GIT_COMMITTER_DATE si $ GIT_COMMIT correspondait à un SHA particulier, mais dans ce cas, les deux variables GIT _ * _ DATE étaient définies sur une chaîne constante, plutôt qu'une autre variable.

Répondre

14

La valeur de $GIT_AUTHOR_DATE contient des espaces, donc vous devez citer (-0500 est votre fuseau horaire décalé):

git filter-branch --env-filter \ 
    'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"' SHA1..HEAD 
+0

Je vois maintenant, merci. (J'avais supposé que "-0500" était une sorte de code d'erreur interne à git-filter-branch.) –

+0

Non, c'est juste que sans les guillemets votre déclaration d'exportation se résout à 'exporter GIT_COMMITTER_DATE = @ 1405671090 -0500' (secondes depuis l'époque et décalage de fuseau horaire) qui est une syntaxe de shell non valide. – knittl

Questions connexes