Подтвердить что ты не робот

"фатальный: поврежденный патч в строке XX" при размещении одной строки

Я получаю следующую ошибку, когда пытаюсь выполнить одну строку или несколько строк, используя git gui (правый клик → линии сцены для фиксации). Это не первый случай, когда это произошло со мной, и я обнаружил, что другие сталкиваются с этим. Однако я не мог найти, как его решить.

Кто-нибудь сталкивался с этой проблемой? есть ли что-то, что я могу сделать (постановка всего файла не является реальным решением)

Update: Вот файл, который дает мне следующую ошибку, когда я пытаюсь выполнить удаленную строку.

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/texture"
    android:tileMode="repeat"
-   android:dither="true"
    >
</bitmap>
\ No newline at end of file

Вот сообщение об ошибке:

fatal: corrupt patch at line 14

странно, что в следующем штрафе нет даже 14 строк!? примечание, заканчивающееся файлом новой строкой, не решило проблему.

4b9b3361

Ответ 1

По-видимому Git GUI требует, чтобы файлы заканчивались новой строкой при размещении отдельных строк.

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

Ответ 2

Собственно, это часто происходит, когда вы редактируете строки "-".
Когда вы удаляете '-' и забываете добавить '' (пробел) вместо него

Или, по ошибке, вы добавляете два пробела и используете "вкладки" как идентификатор

Откройте патч и убедитесь, что все строки, которые вы хотите оставить нетронутыми, начинаются с '' (1 пробел)

Я видел, что некоторые люди используют --ignore-space-change --ignore-whitespace --whitespace=fix как обходной путь, но это еще одна вещь, которую вы не должны смешивать.

Откройте патч и убедитесь, что все строки, которые вы хотите оставить нетронутыми, начинаются с '' (пробел)

UPD

также возможно, что у вашего редактора есть опция: "Удалить пробелы в конце строки" Итак, когда вы в своем редакторе сохраняете патч:

-Line with space at end <--- NOTICE: Here one space at the end
+Line with no space at end<--- Here no space

Ваш редактор удаляет конечное пространство и патч становится следующим:

-Line with space at end<--- Here no space. Patch will FAIL!!!
+Line with no space at end<--- Here no space also

Этот патч будет FAIL, потому что исходный файл не имеет строки:

-Line with space at end<---

он имеет:

-Line with space at end <--- 

UPD2

Итак, если в вашем патче в следующей строке

android:tileMode="repeat"

Ваш редактор удаляет пространство для тренировки. Патч будет FAIL

Ответ 3

Git GUI не может добавлять/удалять строки из индекса, когда кусок, с которым вы работаете, слишком велик (т.е. слишком много последовательных строк изменены).

Мое обходное решение: если изменения не являются "стенкой розового" (если в середине фрагмента есть некоторые немодифицированные строки), перейдите в edit > options и уменьшите количество строк в контексте различий. Если это не работает, вы ввернуты; используйте другой инструмент (например, в командной строке).

Ответ 4

Я получал эту ошибку во время размещения ханков.

"Условное обозначение", упомянутое здесь, напомнило мне, что в моих опциях git diff -w -w "я пропускаю пробелы во время пробелов.

Я удалил этот флаг (используя git -gui "Options..." ), и смог обработать hunks без ошибки. Затем я добавил его обратно (потому что я обычно не хочу видеть, что пробелы различаются при изучении того, что изменилось).

Не уверен, что это поможет вам, но это довольно безобидно, чтобы попробовать и легко отменить.

Ответ 5

Вдохновленный ответом kyl191, я придумал простое решение этой проблемы:

  • добавить символ новой строки в конец вашего файла

  • сохранить все изменения

    git stash
    
  • добавить символ новой строки в конец вашего файла еще раз, так что у вас есть символ новой строки в вашем текущем файле, а также в вашей скрытой версии

  • выполните соответствующий hunk (содержит только вашу новую строку)

    git stage <your file>
    
  • введите ваши изменения из stash

    git stash pop
    

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