Github如何允许内联文件编辑? (或者如何在裸git存储库中添加或编辑文件)

时间:2011-07-27 14:26:56

标签: git github grit

我有一个小应用程序管理几个类似于Github / Gitorious的git存储库。 Github允许inline file editing,我想知道是否有人知道他们如何管理这个。

我最初的想法是它会完全克隆存储库,使用你的提交来替换文件,提交和推送,但这似乎是一个非常昂贵的操作,有大型存储库,如linux内核。

有关以更有效的方式将文件添加和编辑到裸存储库的任何想法吗?

1 个答案:

答案 0 :(得分:8)

您可以使用管道命令。

获取当前的HEAD,从那里获取树,然后获得blob。

获得blob后,您可以将内容放入文本框中。完成后,您只需要对新blob进行哈希处理,创建新树,新提交和tadaam。它被“推”了。

PS:记住你是在一个裸存储库中,所以检查你使用的每个命令都不需要索引和工作目录。


正如这里所要求的那样是一步一步的例子。

首先我们获取当前文件内容:

> git cat-file -p HEAD:var/test/text.txt
test

我们对该内容进行了一些修改,现在可以推送新内容了。 要保存该内容,我们将对其进行散列:

> git hash-object -t blob -w var/test/text.txt
9764d221e6b50063b83c0268544c5d5b745ec9c5

这将保存它,并返回该对象的sha-1(blob),下一步是创建一个包含test文件的新文件夹text.txt。但首先让我们看一下当前test文件夹的外观:

> git ls-tree HEAD:var/test
100644 blob 9daeafb9864cf43055ae93beb0afd6c7d144bfa4    text.txt

所以我们想要做的是用新的(9daeafb...)替换先前的SHA-1(9764d22...)并基于此生成新树(注意{ {1}})。

\t

很好,所以现在我们有新文件> echo -e "100644 blob 9764d221e6b50063b83c0268544c5d5b745ec9c5\ttext.txt" | git mktree b7788f9e8e9a24be31188167a6a0bc1de9e41d24 和父文件夹text.txt,我们现在需要test

var

现在我们需要> git ls-tree HEAD:var 040000 tree 9bfb857f532d280ecd7704beb40a2ea4ba332f5a test > echo -e "040000 tree b7788f9e8e9a24be31188167a6a0bc1de9e41d24\ttest" | git mktree 536f33626a47138499fade7df6d02327f75d80be 的父级(它是我们存储库的根目录):

var

已经完成了,我们的树准备好了。唯一缺少的是实际提交:

> git ls-tree HEAD
040000 tree 31a6ee5e7d14a0569721632a05234185a109d6bd    var

> echo -e "040000 tree 536f33626a47138499fade7df6d02327f75d80be\tvar" | git mktree
7db3d6bc14cce98ff89ccc285b9d17965f5ca92b

但它还没有准备好,现在我们希望提交成为HEAD,所以最后一步是:

> git commit-tree -p HEAD -m "commit message" 7db3d6bc14cce98ff89ccc285b9d17965f5ca92b
4aa2de2cf9e3e4f5470bcd1ee1e83ef6e4025eaf

现在我们已经完成了。


<强>资源: