GIT: Изменить стиль (пробел) без изменения собственности/вины?
-
29-09-2019 - |
Вопрос
У нас есть огромная древняя кодовая база, которая требует большой уборки. У нас всегда были стандарты кодирования, и все всегда старались следовать за ними, но они не применялись, поэтому со временем проселолись многие нарушения. Не должно быть или отсутствующие пространства, где они должны быть. Мы собираемся активно обеспечивать соблюдение наших стандартов кодирования, чтобы убедиться, что больше нарушений не заполняются, но трудно применять их автоматизированным способом только в изменениях, поэтому было бы неплохо очистить эти старые файлы.
Существуют инструменты, которые могут автоматизировать решение этих проблем, однако, если я это сделаю, то виноват, будет показывать мне как владелец этих строк, когда на самом деле я, возможно, никогда не увидел их. Я знаю, что есть настройка, чтобы обвинить, игнорируя изменения пробела, но я не могу заставить всех использовать вину одинаково, включая другие визуальные инструменты и такие вещи, как 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