Git: редактирование файла в голом репозитории с использованием сантехнических команд Git

Я пытаюсь создать базовый веб-интерфейс GIT для пустых репозиториев GIT, который позволяет редактировать (только) существующие файлы.

Например, рассмотрим эти два случая:

  • /dir-a/dir-b/dir-c/a-file.txt
  • /a-file.txt

Как я могу использовать низкоуровневые команды Git для сохранения изменений? Также я пользуюсь Grit, не уверен, если он предоставляет ярлык для этого.

1 ответ

Я не знаю о Grit, но с самим Git вы можете сделать это, используя индекс.

Предположим, что новый контент для хранения в dir-a/dir-b/dir-c/a-file.txt доступен в /tmp/new-content.txt.

git read-tree HEAD
newhash=$(git hash-object -w --path=dir-a/dir-b/dir-c/a-file.txt /tmp/new-content.txt)
git update-index --cacheinfo 0644 $newhash dir-a/dir-b/dir-c/a-file.txt
newtree=$(git write-tree)
newcommit=$(git commit-tree $newtree -p HEAD -m 'file editedin a bare repository')
git update-ref HEAD $newcommit
Другие вопросы по тегам