git-запрос к файлу прав доступа к файлу в произвольном коммите - PullRequest
1 голос
/ 11 августа 2011
$ git init
$ date > file1.txt
$ git add .
$ git commit -a -m "ok"
$ git log --raw file1.txt

Последний cmd работает нормально. Я получаю:

:000000 100644 0000000... c0d0a60... A  file1.txt

Но если я сделаю:

$ git log --raw HEAD:file1.txt

Я ничего не получаю.

Чего мне не хватает? Мне нужно, чтобы вторая форма работала так, чтобы я мог запрашивать перманенты файла в любом произвольном коммите, а не только в текущем рабочем дереве оформления.

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

Команда log принимает набор коммитов и путь.В первой форме вы указываете путь и набор по умолчанию для коммитов - HEAD (все коммиты достижимы из HEAD).Во второй форме вы даете ему идентификатор объекта, который не называет коммит, но также не является путем, поэтому он ничего не может сделать.

Вам нужно дать ему набор коммитов и путь:

  • Набор коммитов, содержащий только один коммит, равен commitish^!.Так что в вашем случае HEAD^!.
  • Путь по-прежнему просто file1.txt

Так что используйте:

git log --raw HEAD^! file1.txt

Конечно (как J-16 SDiZправильно указано) лучше использовать git ls-tree, который предназначен для этой цели, чем злоупотреблять git log.Так что это будет:

git ls-tree HEAD file1.txt

в отличие от log, ls-tree принимает древовидную структуру (для которой коммит является особым случаем), поэтому вам не нужно добавлять смешные суффиксы, такие как ^!.

0 голосов
/ 11 августа 2011

Вам нужно:

git log --raw HEAD^1..HEAD file1.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...