Создание 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