2017-02-13 2 views
5

Хосты смотрят скрипт, который делает git ls-files? Возможно восстановление файла индекса или извлечение списка файлов из поврежденного индексного файла? Возможно возможно с регулярным выражением? предпочтительно в python 2.7.6Как работает скрипт git ls-files

+1

Вы хотите найти, где находится существующий двоичный файл 'git-ls-files'? Или написать новый скрипт, который делает то же самое? _Зачем_? Как это связано с поврежденным индексом? Какой фактический файл - '.git/index'? Что-то другое? – Useless

+0

Да, мне нужно написать новый скрипт, который делает то же самое, что и git-ls-файлы, так как мне нужно только извлечь файлы из файла .git/index (неважно, что это испорчено или нет), без проверки неправильной подписи, хэша и что-то еще просто список сырых файлов без мусора –

ответ

3

В зависимости от уровня коррупции это может быть или не быть выполнимым. Структура данных и связанная с ними оснастка Git более приспособлены к обнаружению коррупции, чем к ее исправлению.

В частности, сам индекс не является частью репозитория, он получен из текущего содержимого, поэтому в большинстве случаев вам, вероятно, будет лучше удалять его и делать git reset, чтобы воссоздать его. Тот, кто читает ваш вопрос, вероятно, задается вопросом, как ваш репозиторий попал в это состояние.

Имея это в виду, вот пару мыслей:

Последние 20 байт индекса являются sha1 содержимого файлов до этого момента. Если они повреждены, вы можете перезаписать их с помощью шестнадцатеричного редактора.

~$ python3 
>>> data = open('.git/index', 'rb').read() 
>>> data[-20:].hex() 
'e211d8f60209ca8571c2acc73f9a24ef523b5fa3' 
>>> hashlib.sha1(data[:-20]).hexdigest() 
'e211d8f60209ca8571c2acc73f9a24ef523b5fa3' 

Это может устранить простую коррупцию, вызванную поврежденным мозгом инструментом.

Если вы действительно хотите, чтобы восстановить все, что вы можете от полностью поврежденного файла индекса, вы, вероятно, хотите:

  1. Read index-format.txt в эталонной реализации.
  2. Посмотрите на процедуру parse_index в libgit2.
  3. Посмотрите на ошибку, которую вызывает ваш индексный файл.
  4. Осторожно исправьте эту рутину, чтобы продолжать плохие данные без сбоев.

Другой подход может заключаться в использовании утилиты strings, если вы просто хотите увидеть список имен файлов. Вы потеряете соответствующую двоичную информацию (а часть двоичной информации будет содержать нежелательный файл ASCII).

+0

строки не очень плохо, но и много мусора –

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

  • Нет связанных вопросов^_^