У меня был скрипт, который для каждого измененного_файла в
"git diff --name-only master..origin/master"
diff для этого файла применяется следующим образом:
git diff master..origin/master file_name | git apply.
Для любых вновь создаваемых файлов (файлы в оригинале master, но не в оригинале master) я получил следующие ошибки:
fatal: ambiguous argument 'my_file_name': unknown revision or path not in the working tree.
error: unrecognized input
После поиска в SO я нашел следующую информацию о флаге намерения добавить в git add: Что делает git add --intent-to-add или -N и когда его следует использовать?
Итак, я попробовал следующее: для каждого файла, который я собираюсь получить из различий между origin / master и master, если этот файл в данный момент не существует в master (local), тогда я вызываю git add с - намерение добавить флаг перед вызовом git diff с этим именем и применением diff.
if ! ls "$changed_file" 1> /dev/null 2>&1; then
echo adding new file "$changed_file"
echo foo > "$changed_file"
git add --intent-to-add "$changed_file"
fi
git diff master..origin/master "$changed_file" | git apply
При этом я получаю следующую ошибку при попытке применить git apply (последняя строка), говоря, что файл уже существует в рабочем каталоге:
error: tests/new_file: already exists in working directory
Когда я попытался удалить фиктивную часть создания файла, как показано ниже, она также не работала.
if ! ls "$changed_file" 1> /dev/null 2>&1; then
echo adding new file "$changed_file"
git add --intent-to-add "$changed_file"
fi
с сообщением об ошибке, таким же, как и раньше:
fatal: ambiguous argument 'my_file_name': unknown revision or path not in the working tree.
error: unrecognized input
Кто-нибудь знает, что происходит, и как я могу это исправить? (получить и применить diff нового удаленного файла)