2010-10-15 37 views
20

Ho usato uno script perl per modificare tutti i caratteri di tabulazione in un repository php git e li ho cambiati tutti in 4 spazi.Git commit che non sovrascrive gli autori originali in git blame

$ find -iname \*.php -exec perl -pi -e "s/\t/ /g" {} \ 

posso commettere questo cambiamento con git commit, ma mi segnerà come l'autore di tutte le righe modificate all'interno git blame dopo questo commit è fatto.

C'è un modo per commettere questo enorme cambiamento che non mi segna come autore delle linee modificate, ma conserva l'autore originale? Questa è una lunga storia che non vogliamo davvero perdere nel nostro progetto.

Il nostro scopo di sostituire le schede con 4 spazi non è quello di far apparire le cose diverse in git blame, ma di seguire gli standard di codifica PEAR corretti. Per esempio. senza tabulazioni, usa 4 spazi per il rientro.

+1

Forse il comando di biasimo supporta un'opzione per ignorare le modifiche di spazi bianchi. – CodesInChaos

+2

@CodeInChaos: yes, '-w' http://www.kernel.org/pub/software/scm/git/docs/git-blame.html. Rendilo una risposta –

risposta

16

Grazie alla wnoise su git: change styling (whitespace) without changing ownership/blame?, sono arrivato fino a questo per eseguire un filtro arbitrario sulla storia git, in modo da utilizzare questo si potrebbe riscrivere la storia per far sembrare che offendere gli spazi o altri problemi non sono mai stati impegnati, lasciando l'originale autori intatti ma il tuo codice è stato ripulito: git filter-branch --tree-filter 'git diff-tree --name-only --diff-filter=AM -r --no-commit-id $GIT_COMMIT | php cleanup.php' HEAD

+2

Beautiful git filter-branch --tree-filter 'git diff-tree --name-only --diff-filter = AM -r --no-commit-id $ GIT_COMMIT | find -iname \ *. php -exec perl -pi -e "s/\ t// g" {} \; ' HEAD – nookni

+0

@nookni: vuol dire che hai finalmente usato questa risposta? allora dovresti controllare questo come risposta accettata –

35

Non è la responsabilità del impegnarsi comando per decidere come trattare spazi bianchi, ma la responsabilità del comando dicolpa perché è colpa che analizza le differenze tra le versioni per ottenere l'autore di ogni linea. Quindi, alla ricerca di un'opzione di ignorare gli spazi bianchi in colpa:

L'opzione -w è definito come: "Ignora spazi bianchi quando si confrontano la versione del genitore e il bambino di per trovare dove le linee di provenienza." http://kernel.org/pub/software/scm/git/docs/git-blame.html

+1

Stiamo cercando di seguire i buoni standard di codifica PEAR, che insistono su 4 spazi per il rientro invece dei caratteri di tabulazione. Questo rende le cose molto più belle anche per l'unificazione tra le implementazioni OS/IDE ... – nookni

+9

Penso che tu abbia frainteso la mia risposta. Sto dicendo che dovresti dire alla colpa di ignorare i cambiamenti nello spazio bianco (e quindi indirettamente che commettono), invece di provare a contrassegnare esplicitamente il commit in modo che non appaia in * blame *. – CodesInChaos

+3

Sì, purtroppo la tua risposta funziona solo dove viene effettivamente usato il flag '-w'. In IDE e strumenti basati sul Web (Github, ecc.) Non lo è. – Timmmm