Как мне отследить файл из ответа git ls-tree? - PullRequest
0 голосов
/ 19 марта 2019

Я выполнил эту команду на своем CLI: git rev-list --all | xargs -I '{}' git ls-tree --full-tree -r '{}' | grep '.*Foo.*' Он вернул это:

100644 blob 33265039940178412e18a8654bef5c31fa9694b5    Assets/Editor/Foo.cs.meta
100644 blob e1f400f00b3efa867436d3b7f040917ca9f5d08c    Assets/Editor/Foo.cs

Я хочу увидеть содержимое файла Foo.cs, но когда я набираю git checkout e1f400f00b3efa867436d3b7f040917ca9f5d08c, он говорит fatal: reference is not a tree: e1f400f00b3efa867436d3b7f040917ca9f5d08c.

Как посмотреть содержимое этого файла?

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Для вашего примера, git cat-file blob 33265039940178412e18a8654bef5c31fa9694b5 вернет содержимое Assets/Editor/Foo.cs.meta, без необходимости делать git checkout вообще.

Еще лучше, git cat-file --batch может быть передан поток идентификаторов на stdin, и он будет выдавать контент от каждого из них.

Рассмотрим следующее как сквозной пример:

git rev-list --all \
  | xargs -d $'\n' -n 1 git ls-tree --full-tree -r \
  | awk '/Foo/ { print $3 }' \
  | git cat-file --batch
1 голос
/ 19 марта 2019

По хэш-идентификатору:

git cat-file -p e1f400f00b3efa867436d3b7f040917ca9f5d08c

По имени:

git cat-file -p <rev>:Assets/Editor/Foo.cs
git show <rev>:Assets/Editor/Foo.cs

, где <rev> - любой синтаксис, приемлемый для git rev-parse, который задает коммит или дерево.Например, если имя тега v2.1 идентифицирует коммит, который содержит эти файлы, вы можете использовать git show v2.1:Assets/Editor/Foo.cs.

(Примечание: флаг -p для git cat-file здесь на самом деле не нужен, но этоважно при проверке объекта дерева, поскольку он хранится в виде двоичных данных. Вы можете принудительно указать ожидаемый тип объекта git или просто дать -p понять, как его отобразить.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...