Git commit, который не отменяет оригинальных авторов в git blame - PullRequest
23 голосов
/ 15 октября 2010

Я использовал скрипт perl для изменения всех символов табуляции в репозитории php git и изменил их все на 4 пробела.

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

Я могу зафиксировать это изменение с помощью git commit, но оно будетпометить меня как автора всех измененных строк внутри git blame после выполнения этого коммита.

Есть ли способ зафиксировать это огромное изменение, которое не помечает меня как автора измененных строк, но сохраняеторигинальный автор?Это большая история, которую мы на самом деле не хотим терять в нашем проекте.

Наша цель - заменить вкладки четырьмя пробелами не для того, чтобы вещи выглядели по-другому в git обвинении, а для соблюдения надлежащих стандартов кодирования PEAR.Например, без табуляции, используйте 4 пробела для отступа.

Ответы [ 2 ]

38 голосов
/ 15 октября 2010

Команда commit не несет ответственности за решение о том, как обрабатывать пробелы, а команда blame несет ответственность, потому что это вина , которая анализирует различия между версиями, чтобы получить автора каждой строки. Поэтому в поисках опции игнорировать пробелы в blame :

Опция -w определяется как: «Игнорируйте пробелы при сравнении версии родителя и ребенка, чтобы найти, откуда появились строки». http://kernel.org/pub/software/scm/git/docs/git-blame.html

19 голосов
/ 09 ноября 2010

Благодаря wnoise для git: изменить стиль (пробелы) без смены владельца / вины? , я придумал это, чтобы запустить произвольный фильтр по истории git, поэтому, используя это, вы можете переписать историю, чтобы сделать похоже, что оскорбительные пробелы или другие проблемы никогда не были решены, что оставило оригинальных авторов в такте, но ваш код очищен: git filter-branch --tree-filter 'git diff-tree --name-only --diff-filter=AM -r --no-commit-id $GIT_COMMIT | php cleanup.php' HEAD

...