Существующие инструменты исправлений специально разработаны , а не для замены файлов, которые не соответствуют, исходя из того факта, что исторически это было плохой идеей.
Конечно, возможно накатить свое собственное программное обеспечение исправления (не используя, например, git apply
), которое делает то, что вы хотите.
Учитывая, что вы добавили это в git
, учтите тот факт, что вывод git diff
включает строку index:
:
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 216beefc50..d1a2814ec7 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v2.20.0
+DEF_VER=v2.20.1
LF='
'
Использование --full-index
расширяет эту строку:
index 216beefc50d54d132991636d5f049ea0916f1696..d1a2814ec7e415a525e58ac234df8184a2d0f93c 100755
Два больших уродливых идентификатора хешаВот изображения «до» и «после» файла.Это позволяет Git выполнять полное трехстороннее слияние, если это необходимо.(100755
в конце или 100644
в других случаях дает статус +x
или -x
файла для опции git update-index --chmod=
.)
Предположим, например, что выВы хотите применить патч к (как вы сказали) foo.txt
, где патч основан на коммите А, но текущая версия foo.txt
вместо фиксации B
.Строка index
сообщает Git: идентификатор хэша версии foo.txt
равен <...> (где недостающая часть от git rev-parse A:foo.txt
, то есть от большого двоичного объекта, сохраненного в коммите * 1035)*).Поэтому Git может извлечь коммит A
из репозитория, успешно применить патч к A:foo.txt
и создать правильный обновленный файл, так как патч теперь будет применяться.Теперь, когда у Git есть изображения «до» и «после», он может также различать изображение «до» относительно вашего текущего B:foo.txt
, чтобы он знал , что вы изменили .
Git теперь может поместить каждый из этих трех файлов где-то - на самом деле, в индекс, в слоты 1, 2 и 3, как и в любой другой операции, основанной на слиянии.Это дает Git возможность выполнять обычное трехстороннее слияние на трех входах (базовый, наш, их) и либо завершить слияние самостоятельно, либо дать вам возможность разрешать конфликты.
Используя этота же самая базовая идея, вы можете, если хотите - вообще не очень хорошая идея - использовать строку index
, чтобы найти блоб, залатать его (с гарантированным успехом, поскольку патч применяет к , что A:foo.txt
file) и используйте полученный файл напрямую.