Как мне перечислить каталог в репозитории Git вместе с последней информацией о фиксации для каждой записи каталога? - PullRequest
12 голосов
/ 21 мая 2011

Я хочу вывести каталог из репозитория Git вместе с последней информацией о фиксации каждой записи каталога.Подобно тому, как GitHub отображает каталоги или как viewvc отображает каталог в репозитории SVN / CVS.

В настоящее время я делаю это так:

  1. Получить записи каталога с помощью git ls-tree master и анализировать структуру каталогов из выходных данных.

  2. Затем для каждой записи каталога я делаю это: git log -n 1 master -- filename и анализирую из нее информацию о коммите (я указываю строку специального формата длясделать это проще, но это не относится к моей проблеме).

Совершенно очевидно, что это очень медленно, потому что я должен вызывать Git для каждого файла.Есть ли более быстрый способ сделать это?Может быть, одну команду, которую я могу выполнить, чтобы получить все данные, которые мне нужны одновременно?

Ответы [ 3 ]

4 голосов
/ 17 июля 2011

Oneliner для анализа git whatchanged выходных данных и дерева печати с последними идентификаторами коммитов:

git whatchanged -r --pretty=oneline | perl -ne 'our %q; if (/^([0-9a-f]{40})/) {$c = $1} if (/:.{38}(.*)/) { $q{$1} = $c unless exists $q{$1} }; END { print map {"$q{$_} $_\n"} (keys %q); }'  | sort -k 2

Пример вывода:

b32f7f65f19e547712388d2b22ea8d5355702ce2 code/unfreezemodule/file.c
b32f7f65f19e547712388d2b22ea8d5355702ce2 code/unfreezemodule/Makefile
b32f7f65f19e547712388d2b22ea8d5355702ce2 code/unfreezemodule/unfreezemodule.c
efeda0a22e4d1d5f3d755fee5b72fa99c0046e38 code/unfreezer/.gitignore
b822361ffbc4548d918df5381ce94c296459598a code/unfreezer/unfreezer.c
18ed76836182eba702e89b929eff2c0ea78ffb3e code/whole/wh
1e111ce4e8c0813b397f34e3634309f7594cb864 code/xbmctest/.gitignore
cb67943c4c18e3461267a34935fc8efaca5e2166 .config/awesome/awesome.lua
d5e2b7c1d24bed1d0b53338f43747dc856c9cfe4 .config/awesome/rc.lua
13ca8dbcd7f1ec684a7eba494442ee743ed577c0 cr
566b54fb72e32947fcbf7d5c58fed78b5abe976d d
392ac1a2456e8a29b2ebb7af9499c3f69d24a559 Desktop/CityInfo.desktop
392ac1a2456e8a29b2ebb7af9499c3f69d24a559 Desktop/.directory

Вы можете настроить git whatchanged параметры и / илиотфильтруйте вывод, как хотите.

0 голосов
/ 22 мая 2011

Вы можете запросить git log -n 1 <file|directoryname>.Таким образом, вы можете анализировать git-ls-tree в нерекурсивном режиме и запускать его нужно только для каждого файла / каталога на том уровне, на котором вы находитесь.

0 голосов
/ 21 мая 2011

Возможно, вы могли бы проанализировать git whatchanged master, продолжая возвращаться в историю, пока вы не «увидите» все пути к файлам?

В зависимости от того, какова ваша история и сколько лет некоторым файлам, это можетбудь быстрее.

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