Можно ли добавить / зафиксировать файл в индексе локального репозитория Git?

Я возиться с драгоценным камнем Ruby Grit... вижу, как я могу использовать его для управления / доступа к серверу Gitosis, на котором я работаю. Кто-нибудь знает, возможно ли добавить / зафиксировать файлы в локальном репо, или мне нужно будет настроить локальное "нормальное" репо и использовать SSH, чтобы перенести его в голое репо на локальном хосте?

3 ответа

Решение

Вы должны быть в состоянии сделать это, используя низкоуровневые команды:

$ generate_contents | git hash-object -t blob -w --stdin
$ git update-index --cacheinfo 100644 sha1 путь

где sha1 - результат предыдущей команды.

Но голые репозитории предназначены для использования только для загрузки или извлечения. Голый репозиторий вообще не должен иметь индекс!

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

Поскольку git update-index --add --cachinfo Важно добавить файл в индекс, обратите внимание, что cacheinfo имеет новый синтаксис:

--cacheinfo <mode>,<object>,<path>
--cacheinfo <mode> <object> <path>

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

Смотрите коммит ec160ae от Junio ​​C Hamano ( gitster ), Март 2014, часть Git 2.0+:

update-index: учат --cacheinfo новый синтаксис " mode,sha1,path "

" --cacheinfo "опция необычна тем, что принимает три параметра опции.
Опция с необязательным параметром достаточно плохая.
Опция с несколькими параметрами просто безумна.

Введите новый синтаксис, который объединяет эти три вещи вместе с запятой, что делает синтаксис командной строки более единообразным по подкомандам, сохраняя при этом традиционный синтаксис для обратной совместимости.


Примечание: только Git 2.0.X/2.1 (3 квартал 2014 года) заботится о NULL:
Смотрите коммит c8e1ee4 Джеффа Кинга ( peff ):

Бег " git update-index --cacheinfo "без каких-либо дополнительных аргументов приводит к segfault, а не к сообщению об ошибке. Commit ec160ae (update-index: teach --cacheinfo новый синтаксис " mode,sha1,path ", 2014-03-23) добавил код для проверки формата аргумента, но забыл обработать случай NULL.

Достаточно вернуть ошибку из синтаксического анализатора, так как мы потом относимся к ней как к старому стилю --cacheinfo <mode> <sha1> <path> "и жалуемся, что у нас есть менее 3 аргументов для чтения.

Другие вопросы по тегам