Инструмент Git для удаления строк из подготовки, если они состоят только из изменений в пробеле

TeamCity имеет некоторую интеграцию Python .

, Но TeamCity:

  • не открытый исходный код
  • не является небольшим, а скорее многофункциональный
  • свободно для маленькой середины команд.

10
задан Jon Seigel 29 March 2010 в 04:20
поделиться

1 ответ

Следующее поможет вам в большинстве случаев:

$ clean=`git diff --cached -b`; \
  git apply --cached <(git diff --cached -R); \
  echo "$clean" | git apply --cached -; \
  clean=

Для выпусков git до 1.7.0 он не работает, если в одном или нескольких файлах есть изменения, состоящие только из пробелов. Например,

$ git diff --cached -b
diff --git a/file1 b/file1
index b2bd1a5..3b18e51 100644
diff --git a/file2 b/file2
new file mode 100644
index 0000000..092bfb9
--- /dev/null
+++ b/file2
[...]

Пустая дельта (из file1 выше, которая действительно должна быть подавлена) делает git-apply недовольным:

fatal: patch with only garbage at line 3

ОБНОВЛЕНИЕ: 1.7.0 выпуск git устраняет эту проблему .

Предположим, наш репозиторий находится в следующем состоянии:

$ git diff --cached
diff --git a/foo b/foo
index 3b18e51..a75018e 100644
--- a/foo
+++ b/foo
@@ -1 +1,2 @@
-hello world
+hello  world
+howdy also

Затем мы могли бы выполнить приведенные выше команды для разветвления индекса и рабочего дерева:

$ git diff --cached
diff --git a/foo b/foo
index 3b18e51..1715a9b 100644
--- a/foo
+++ b/foo
@@ -1 +1,2 @@
 hello world
+howdy also

$ git diff 
diff --git a/foo b/foo
index 1715a9b..a75018e 100644
--- a/foo
+++ b/foo
@@ -1,2 +1,2 @@
-hello world
+hello  world
 howdy also

Если все изменения внесены только пробелами, вы увидите

error: No changes

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

8
ответ дан 3 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: