Создание git diff из ничего

Я пытаюсь создать файл патча для использования через обзорную доску.
Это будет начальный патч.

diff -ruN --exclude=.git empty_dir working_dir > mypatch_00.patch работает, но я получаю "Выбранный файл не выглядит как diff." ошибка.

Есть ли способ заставить его работать, используя git-diff или diff? Спасибо

2 ответа

Решение

Если вы хотите получить diff для вашего первоначального коммита (возможно, я неправильно понял ваш вопрос), вы можете отобразить его, используя

git show COMMIT

В качестве альтернативы, чтобы получить его в виде файла:

git format-patch -1 COMMIT

куда COMMIT пересмотр этого коммита. Если это также ваш текущий коммит, вам не нужно указывать его вообще.

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

git checkout --orphan empty         # Create orphaned branch
git read-tree --empty               # Remove all files from index
git commit --allow-empty -m 'Empty' # Initial commit

Теперь вы можете сделать полный diff против пустой ветки:

git diff empty..master

Если вам нужен полный diff от ничего до определенного коммита, есть более простой способ, чем в принятом ответе:

empty_tree=$(git hash-object -t tree /dev/null) 
git diff-tree -p ${empty_tree} $MY_COMMIT [${files}...]

Значение ${empty_tree} всегда 4b825dc642cb6eb9a060e54bf8d69288fbee4904 но я предпочитаю не иметь магический номер там.

Я предпочитаю "пустой" в качестве тега. Самый простой способ это:

git tag empty 4b825dc642cb6eb9a060e54bf8d69288fbee4904

Потому что тег может указывать на tree-ish напрямую, без коммита. Теперь чтобы получить все файлы в рабочем дереве:

git diff --name-only empty

Или то же самое с stat:

git diff --stat empty

Все файлы в формате diff:

git diff empty

Проверьте пробелы во всех файлах:

git diff --check empty
Другие вопросы по тегам