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

Создание отличия git от ничего

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

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

Есть ли способ заставить его работать с помощью git -diff или diff? Спасибо вам

4b9b3361

Ответ 1

Если вы хотите получить 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

Теперь вы можете выполнить полную разницу с пустой ветвью:

git diff empty..master

Ответ 2

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

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

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

Ответ 3

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

git tag empty $(git hash-object -t tree /dev/null)

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

git diff --name-only empty

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

git diff --stat empty

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

git diff empty

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

git diff --check empty