2016-12-04 4 views
1

Я пытаюсь использовать nodegit для обработки git как db для контента. Таким образом, я пишу функции для доступа к контенту в репо. Я могу получить файл blob и другую информацию об определенном файле, но я изо всех сил пытаюсь получить информацию о временной отметке.Используя nodegit, как я могу найти дату, когда данный файл был последним обновлен в git repo?

Я хотел бы получить 1) дату создания файла и 2) дату последнего обновления. Но пока я не понял, как это возможно.

Для того, чтобы получить файл, мне нужно выполнить следующие шаги:

1) Получить последнюю Commit с помощью getMasterCommit.
2) Из Commit получить файл TreeEntry используя getEntry.
3) С TreeEntry получите различные метаданные, а затем получите Blob с getBlob.
4) Из Blob выберите другие метаданные и исходный текст файла.

Беда в том, что единственное место, где я могу найти дату, которую я нашел, - это номер Commit, который имеет функцию date. Это может помочь получить последнюю обновленную дату, но на самом деле это не полезно, потому что она просто возвращает дату Commmit (очевидно!), И все же неясно, что файл был обновлен для этого фиксации.

Я также хотел бы иметь возможность создать дату для данного файла. Я могу представить, что это можно было бы получить, выполнив поиск в истории фиксации данных TreeEntry, но мне пока не ясно, как это можно сделать. Фактически, возможность поиска по истории фиксации данного файла может быть тем, что здесь необходимо. Но я не мог понять, возможно ли это.

Может ли кто-нибудь дать руководство здесь?

ответ

1

Есть ходун, который вы можете использовать, чтобы ходить по истории, как если бы вы делали git log. Взгляните на этот пример: https://github.com/nodegit/nodegit/blob/master/examples/walk-history-for-file.js

С помощью fileHistoryWalk вы можете отфильтровать файлы, чтобы найти интересующий вас файл, а затем получить самый ранний референт, который имеет его.

+0

Я просмотрел этот код. Сбивать с толку. Почему 'fileHistoryWalk' вызывается в файл несколько раз, сначала в строке 49, а затем снова в строке 34? Почему этого недостаточно, чтобы рассматривать исходные результаты вызова 'fileHistoryWalk' как историю файла? – fraxture

+0

Я считаю, что это делается в партиях 500, похоже, что API требует максимального количества. Я бы немного экспериментировал с этим, чтобы узнать, достает ли он то, что вы хотите. – yelsayed

1

Вы можете iterate through each file и см.
commit-hash date-time commit-message user file-name. Запустите следующую команду в своем репо с помощью терминала.

$ git ls-tree -r --name-only HEAD | while read filename; do 
echo "$(git log -1 --format="%h %ad- %s [%an]" -- $filename) $filename" 
done  

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

6ea69fa Sun Nov 20 04:29:08 2016 +0600- commit-message-1 [user-1] c.txt 
f83fad2 Thu Oct 27 00:14:37 2016 +0600- commit-message-10 [user-4] b.txt 
b5356e3 Mon Oct 31 14:55:43 2016 +0600- commit-message-7 [user-2] a.txt 
+0

@fraxture это сработает для вас? –

+0

Просто посмотрел. Это интересно, но я пытаюсь решить его, используя nodegit, а не CLI. Однако могли бы дать подсказки. – fraxture

Смежные вопросы