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

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

Ответы [ 3 ]

7 голосов
/ 05 апреля 2011

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

$ <i>generate_contents</i> | <a href="http://www.kernel.org/pub/software/scm/git/docs/git-hash-object.html" rel="nofollow noreferrer">git hash-object</a> -t blob -w --stdin
$ <a href="http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html" rel="nofollow noreferrer">git update-index</a> --cacheinfo 100644 <i>sha1 path</i>

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

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

2 голосов
/ 04 апреля 2011

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

0 голосов
/ 15 июня 2014

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

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

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

См. commit 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-случае:
См. commit c8e1ee4 Джефф Кинг (peff) :

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

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

...