2014-07-18 16 views
9

Recentemente avevo bisogno di applicare 16 patch al mio repository, usando 'git am', e stavo attento a usare '--committer-date-is-author-date' per ognuna. Tuttavia, avevo anche bisogno di aggiustare il messaggio di commit per ogni patch am, e-- dopo aver finito con tutti e 16 - ho scoperto che 'commit --amend' ha battuto il timestamp del commit per ognuno di essi.Utilizzare 'git filter-branch' per correggere le date del commit nell'ultimo N commit?

alla fine ho imparato che il mio problema potrebbe essere risolto in un colpo solo con

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

ma non prima di tentare di risolvere il mio problema con 'filter-branch', che non ha funzionato. Sono curioso di cosa ho sbagliato. Qui è il mio tentativo:

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

Ed ecco il risultato:

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

Che cosa ho fatto di sbagliato? Non sono autorizzato a impostare/esportare una variabile come valore di un'altra, all'interno di un filtro env? Nota che ho adattato il mio approccio da uno che modificava sia GIT_AUTHOR_DATE che GIT_COMMITTER_DATE se $ GIT_COMMIT corrispondeva a un SHA particolare, ma in quel caso entrambe le variabili GIT _ * _ DATE venivano impostate su una stringa costante, piuttosto che su un'altra variabile.

risposta

14

Il valore di $GIT_AUTHOR_DATE contiene spazi, in modo da avere a citarlo (-0500 è la vostra differenza di fuso orario):

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

vedo ora, grazie. (Avevo ipotizzato che "-0500" fosse una specie di codice di errore interno a git-filter-branch.) –

+0

No, è solo che senza virgolette la tua istruzione di esportazione si risolve in "export GIT_COMMITTER_DATE = @ 1405671090 -0500' (secondi dall'epoca e fuso orario) che è una sintassi della shell non valida. – knittl