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