Intereting Posts
как изменить биты getty в Debian Stretch? Как предотвратить arp-scan от записи в syslog? Почему мне не нужно восстанавливать ключи при изменении пароля пользователя? Не удалось выполнить ssh в Ubuntu 12.04 LTS [не удалось разрешить имя хоста (имя хоста): имя или услуга неизвестны Как записать мой полный экран с аудио? iptables блокирует весь входящий и исходящий трафик, за исключением моих IP-адресов Как дистрибутивы Linux проверяют целостность CD / DVD-ROM? sudo / su пользователю в определенной группе Может ли tar архиватор загрузить файл? Передача опции в make-файл Блокирование соединения Fedora FirewallD при отключении Попытка понять копирование образа uboot Как отключить автоматическое отключение звука после загрузки в gnome? Ошибки ввода / вывода при копировании файлов на жесткий диск USB Как обновить автономный веб-сайт с помощью wget для настройки расширений и конвертации ссылок?

Получить последнее сообщение фиксации, автор и хеш с помощью git ls-remote, как команда

Я ищу способ получить три информации из удаленного репозитория, используя git ls-remote подобную команде. Я хотел бы использовать его в скрипте bash, работающем в cron . В настоящее время, если я это сделаю

 git ls-remote https://github.com/torvalds/linux.git master 

Я получаю последний хеш фиксации на главной ветке:

 54e514b91b95d6441c12a7955addfb9f9d2afc65 refs/heads/master 

Есть ли способ получить сообщение фиксации и передать автора?

Хотя нет никаких утилит, которые поставляются с git, который позволяет вам делать то, что вы хотите, довольно легко написать скрипт python, который анализирует объект git, а затем выводит сообщение автора и фиксации.

Вот пример, который ожидает объект git commit на stdin а затем печатает автора, за которым следует сообщение фиксации:

 from parse import parse import sys, zlib raw_commit = sys.stdin.buffer.read() commit = zlib.decompress(raw_commit).decode('utf-8').split('\x00')[1] (headers, body) = commit.split('\n\n') for line in headers.splitlines(): # `{:S}` is a type identifier meaning 'non-whitespace', so that # the fields will be captured successfully. p = parse('author {name} <{email:S}> {time:S} {tz:S}', line) if (p): print("Author: {} <{}>\n".format(p['name'], p['email'])) print(body) break 

Чтобы сделать полную утилиту, например, вы хотите, чтобы сервер поддерживал немой git транспортный протокол через HTTP, так как вы не можете получить единую фиксацию с использованием интеллектуального протокола.

Однако GitHub больше не поддерживает немой транспортный протокол, поэтому я буду использовать мою собственную версию дерева Linus в качестве примера.

Если удаленный сервер поддерживает транспорт dump http git, вы можете просто использовать завиток, чтобы получить объект, а затем передать его на вышеупомянутый скрипт python. Предположим, что мы хотим увидеть автора и зафиксировать сообщение commit c3fe5872eb , тогда мы выполним следующий сценарий оболочки:

 baseurl=http://git.kyriasis.com/kyrias/linux.git/objects curl "$baseurl"/c3/fe5872eb3f5f9e027d61d8a3f5d092168fdbca | python parse.py 

Будет напечатан следующий вывод:

 Author: Sanidhya Kashyap <sanidhya.gatech@gmail.com> bfs: correct return values In case of failed memory allocation, the return should be ENOMEM instead of ENOSPC. ... 

Полный commit SHA commit c3fe5872ebc3fe5872eb3f5f9e027d61d8a3f5d092168fdbca , и, как вы можете видеть в приведенном выше сценарии оболочки, SHA разделяется после второго символа с косой чертой между ними. Это связано с тем, что git хранит имена объектов, помещаемые под первые два символа SHA, предположительно из-за устаревшей файловой системы с низкими ограничениями на количество файлов, которые могут находиться в одном каталоге.


Хотя этот ответ не дает полной рабочей реализации удаленной команды git-show , он дает основные части, необходимые для создания простой.

Как насчет использования журнала git :

 git log -1 

Пример:

 $ git log -1 commit 4a3dfcc66ca76a19052a7c0d44d5e6c315d79e07 Author: LE Manh Cuong <example@example.com> Date: Fri Apr 17 01:54:10 2015 +0700 Make yanking work in OSX.