2012-10-19 121 views
3

我正在嘗試爲GIT裸回購庫創建一個基本的GIT Web UI,該回收允許編輯(僅)現有文件。Git:使用Git管道命令編輯裸露回購庫中的文件

例如,考慮到這兩種情況:

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

我如何使用Git低級別管道命令來保存編輯?此外,我正在使用Grit,不確定它是否提供了一個快捷方式來執行此操作。

回答

2

我不知道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 
+0

因此,如果深層嵌套目錄中的文件發生變化,我必須重新生成所有父目錄的哈希,對不對? –

+0

@AkshayRawat - no。我更新了這個例子。我想你也可以用'git mktree'等手工處理樹,但是這裏我們使用索引。 –

+0

非常感謝!我想要在沒有索引的情況下進行裸回購。 –