GIT: Изменить стиль (пробел) без изменения собственности/вины?

StackOverflow https://stackoverflow.com/questions/4112410

Вопрос

У нас есть огромная древняя кодовая база, которая требует большой уборки. У нас всегда были стандарты кодирования, и все всегда старались следовать за ними, но они не применялись, поэтому со временем проселолись многие нарушения. Не должно быть или отсутствующие пространства, где они должны быть. Мы собираемся активно обеспечивать соблюдение наших стандартов кодирования, чтобы убедиться, что больше нарушений не заполняются, но трудно применять их автоматизированным способом только в изменениях, поэтому было бы неплохо очистить эти старые файлы.

Существуют инструменты, которые могут автоматизировать решение этих проблем, однако, если я это сделаю, то виноват, будет показывать мне как владелец этих строк, когда на самом деле я, возможно, никогда не увидел их. Я знаю, что есть настройка, чтобы обвинить, игнорируя изменения пробела, но я не могу заставить всех использовать вину одинаково, включая другие визуальные инструменты и такие вещи, как Gitstats. В идеальном мире будет какой -то способ переписать историю, чтобы выглядеть так, будто нарушения никогда не были представлены, не скрывая, кто представил фактический код, но я не могу найти ничего подобного.

Это было полезно?

Решение

В идеальном мире будет какой -то способ переписать историю, чтобы выглядеть так, как будто нарушения никогда не были представлены

git filter-branch делает именно это.

http://git-cm.com/docs/git-filter-pranch

Это имеет те же проблемы, что и все команды переписывания истории, поскольку это по существу признает недействительную все клонированные репозитории.

Другие советы

Если вы пытаетесь получить проблему с первопричиной, используя вину, не забудьте использовать -w Флаг, чтобы игнорировать все изменения белых или изменений в отступлении. Таким образом, вы получите последнее реальное изменение в коде, вместо этого просто отступление или удаление пробелов.

git blame -w app/to/file.rb

Или вы можете просто использовать команду git slap ..

git config alias.slap "blame -w";
git slap app/path/to/file.rb

Имея те же результаты: D

Строительство на Ответ Марио, Я бы предложил git shame Как глобальный git-alias:

git config --global alias.shame 'blame -w -M'

... и используйте его вместо git-warm:

git shame path/to/file

Объяснять:
- -w Игнорирует изменения пробела, поэтому не обвинять кого-то, кто переосмыслил код
- -M Обнаруживает линии, которые были перемещены или скопированы, и обвиняет первоначального автора

Я сделал запрос на привлечение к Textmate Git Bundle, чтобы установить этот параметр «-W» по умолчанию для команды «Обзор Annoted File» (ENSHER) ». Спасибо, Марио Зайзар, ты сделал мой день.

diff --git a/Support/lib/git.rb b/Support/lib/git.rb
index 5e8de13..5192953 100644
--- a/Support/lib/git.rb
+++ b/Support/lib/git.rb
@@ -307,6 +307,9 @@ module SCM
       file = make_local_path(file_path)
       args = [file]
       args << revision unless revision.nil? || revision.empty?
+      # Ignore whitespace when comparing the parent's version and
+      # the child's to find where the lines came from.
+      args << '-w'
       output = command("annotate", *args)
       if output.match(/^fatal:/)
         puts output 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top