вывод файла git-cat - PullRequest
       8

вывод файла git-cat

3 голосов
/ 14 января 2011

Когда я запускал git cat-file --batch для коммита, он выдает «отсутствует ...», но коммит существует. Почему это могло случиться? Когда cat-файл запускался с ключом -t, он просто выводил 'commit', что я и ожидал. Кто-нибудь может это объяснить? Я новичок в Git. Спасибо.

РЕДАКТИРОВАТЬ: Я выяснил причину. msysgit ожидает LF , в то время как ENTER генерирует CRLF .

1 Ответ

3 голосов
/ 14 января 2011

Я не уверен, git cat-file --batch должно работать так, как вы упоминаете в своем вопросе.
(Возможно, после git 2.8, март 2016 г., см. Ниже)

Даже в « GitMagic book », в среде unix, git cat-file используется как sinelaw , упоминаемый в комментариях:

Проверьте, действительно ли этот файл содержит вышеперечисленное, набрав:

$ echo 05b217bb859794d08bb9e4f7f04cbda4b207fbe9 | git cat-file --batch

Как упоминалось выше в OP Alex.Shen , это новая строка выпуск:
Команды git всегда ожидают LF (перевод строки, U + 000A) , а не Windows CRLF (CR + LF: CR (U + 000D), за которым следует LF (U + 000A)) последовательность.
С '|' он использует символ EOL оболочки bash msysgit (LF), поэтому он всегда работает.


Примечание. В Git 2.5+ (второй квартал 2015 года) добавлена ​​поддержка символических ссылок с git cat-file --batch.
(Новые выпуски Git доступны для Windows на github.com/git-for-windows/git/releases)

См. коммит 122d534 от Дэвид Тернер (csusbdt) , 20 мая 2015 г.
(Объединено Junio ​​C Hamano - gitster - в коммит 67f0b6f , 01 июня 2015 г.)

cat-file: добавьте --follow-symlinks к --batch

"git cat-file --batch(-check)" узнал опцию "--follow-symlinks", которая следует по символической ссылке внутри дерева, когда его спрашивают о объект через расширенный синтаксис SHA-1.

например. HEAD:RelNotes, что указывает на Documentation/RelNotes/2.5.0.txt.

С новой опцией команда ведет себя так, как если бы вместо нее было задано HEAD:Documentation/RelNotes/2.5.0.txt.


Обновление за февраль 2016 года:

Git 2.8 добавляет поддержку CRLF для некоторых команд git:

См. коммит a551843 , коммит 933bea9 , коммит 1536dd9 , коммит b42ca3d , коммит 692dfdf , commit 3f16396 , commit 18814d0 , commit 1f3b1ef , commit 72e37b6 , commit 6e8d46f , commit c0353c7 (28 октября 2015 г.) Junio ​​C Hamano (gitster) .
(Объединено Junio ​​C Hamano - gitster - в коммит 0175655 , 03 февраля 2016 г.)

В частности, commit b42ca3d использует strbuf.c#strbuf_getline() (который может принимать байт, отличный от LF или NUL в качестве ограничителя строки)

С git 2.8:

cat-file: читать пакетный поток с strbuf_getline()

Можно подготовить текстовый файл с помощью редактора DOS и подать его в качестве потока пакетной команды на команду .

...