您可以使用管道命令.
获取当前的HEAD,从那里获得树然后是你的blob.
获得blob后,您可以将内容放在文本框中.完成后,您只需要对新blob进行哈希处理,创建新树,新提交和tadaam.它被"推"了.
PS:记住你是在一个裸存储库中,所以检查你使用的每个命令都不需要索引和工作目录.
正如这里所要求的那样是一步一步的例子.
首先,我们获取当前文件内容:
> git cat-file -p HEAD:var/test/text.txt
test
Run Code Online (Sandbox Code Playgroud)
我们对该内容进行了一些修改,现在已准备好推送新内容.要保存该内容,我们将对其进行哈希处理:
> git hash-object -t blob -w var/test/text.txt
9764d221e6b50063b83c0268544c5d5b745ec9c5
Run Code Online (Sandbox Code Playgroud)
这将保存它,并返回该对象的sha-1(blob),下一步是创建一个test包含我们text.txt文件的新文件夹.但首先让我们看一下当前test文件夹的外观:
> git ls-tree HEAD:var/test
100644 blob 9daeafb9864cf43055ae93beb0afd6c7d144bfa4 text.txt
Run Code Online (Sandbox Code Playgroud)
所以我们想要做的就是用9daeafb...新的一个(9764d22...)替换以前的SHA-1 ()并基于它生成一个新的树(注意\t).
> echo -e "100644 blob 9764d221e6b50063b83c0268544c5d5b745ec9c5\ttext.txt" | git mktree
b7788f9e8e9a24be31188167a6a0bc1de9e41d24
Run Code Online (Sandbox Code Playgroud)
很好,所以现在我们有了新文件text.txt和父文件夹test,我们现在需要var.
> git ls-tree HEAD:var
040000 tree 9bfb857f532d280ecd7704beb40a2ea4ba332f5a test
> echo -e "040000 tree b7788f9e8e9a24be31188167a6a0bc1de9e41d24\ttest" | git mktree
536f33626a47138499fade7df6d02327f75d80be
Run Code Online (Sandbox Code Playgroud)
现在我们需要var(我们的存储库的根目录)的父代:
> git ls-tree HEAD
040000 tree 31a6ee5e7d14a0569721632a05234185a109d6bd var
> echo -e "040000 tree 536f33626a47138499fade7df6d02327f75d80be\tvar" | git mktree
7db3d6bc14cce98ff89ccc285b9d17965f5ca92b
Run Code Online (Sandbox Code Playgroud)
它完成了,我们的树准备好了.唯一缺少的是实际提交:
> git commit-tree -p HEAD -m "commit message" 7db3d6bc14cce98ff89ccc285b9d17965f5ca92b
4aa2de2cf9e3e4f5470bcd1ee1e83ef6e4025eaf
Run Code Online (Sandbox Code Playgroud)
但它还没有准备好,现在我们希望提交成为HEAD,所以最后一步是:
> git update-ref HEAD 4aa2de2cf9e3e4f5470bcd1ee1e83ef6e4025eaf
Run Code Online (Sandbox Code Playgroud)
现在我们已经完成了.
资源:
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |