2010-10-15 28 views
20

Użyłem skryptu Perla do modyfikacji wszystkich znaków tabulatora w repozytorium gp php i zmienił je na 4 spacje.Git commit, który nie zastępuje oryginalnych autorów w git winnie

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

mogę popełnić tę zmianę z git commit, ale będzie to oznaczać mnie jako autor wszystkie linie zmian wewnątrz git blame potem popełnić jest wykonany.

Czy istnieje sposób na dokonanie tej ogromnej zmiany, która nie oznacza mnie jako autora zmienionych linii, ale zachowuje oryginalnego autora? To dużo historii, której tak naprawdę nie chcemy stracić w naszym projekcie.

Naszym celem w zastąpieniu tabulatorów 4 spacjami nie jest sprawianie, by rzeczy wyglądały inaczej w git winy, ale przestrzeganie właściwych standardów kodowania PEAR. Na przykład. bez zakładek, użyj 4 spacji na wcięcie.

+1

Być może polecenie winy obsługuje opcję ignorowania zmian białych znaków. – CodesInChaos

+2

@CodeInChaos: tak, '-w' http://www.kernel.org/pub/software/scm/git/docs/git-blame.html. Niech to będzie odpowiedź: –

Odpowiedz

16

Dzięki wnoise na git: change styling (whitespace) without changing ownership/blame?, wpadłem na to, aby uruchomić dowolny filtr o historii git, więc za pomocą tego można przepisać historię, aby wyglądał jak obrażając spacje lub inne kwestie nie zostały popełnione, pozostawiając oryginał autorzy w takcie, ale twój kod został wyczyszczony: git filter-branch --tree-filter 'git diff-tree --name-only --diff-filter=AM -r --no-commit-id $GIT_COMMIT | php cleanup.php' HEAD

+2

Piękna git gałąź filtra -tree-filter 'git diff-drzewo -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: czy to znaczy, że w końcu użyłeś tej odpowiedzi? powinieneś sprawdzić to jako zaakceptowaną odpowiedź –

35

Nie jest obowiązkiem popełnić polecenie zdecydować, jak traktować spacje, ale obowiązkiem polecenia winy, ponieważ jest winę który analizuje różnice między wersjami, aby każdy autor linia. Więc szukając opcją ignorowania spacje w winy:

Opcja -w jest zdefiniowany jako: „Ignoruj ​​spacje przy porównywaniu wersji rodzica i dziecka, aby dowiedzieć się, gdzie linie pochodzi.” http://kernel.org/pub/software/scm/git/docs/git-blame.html

+1

Staramy się przestrzegać dobrych standardów kodowania PEAR, które wymagają 4 spacji zamiast wcięcia znaków tabulacji. To sprawia, że ​​rzeczy znacznie przyjemniejsze dla ujednolicenia w implementacjach OS/IDE ... – nookni

+9

Myślę, że źle zrozumiałeś moją odpowiedź. Mówię, że powinieneś obwiniać za ignorowanie zmian w białych znakach (i pośrednio tym zatwierdzeniu), zamiast próbować jawnie oznaczyć commit, aby nie pojawił się on w * winy *. – CodesInChaos

+3

Tak, niestety, twoja odpowiedź działa tylko tam, gdzie używana jest flaga '-w'. W środowiskach IDE i narzędziach sieciowych (Github itp.) Tak nie jest. – Timmmm