我在搞乱 Ruby Grit gem...看看我如何使用它来管理/访问我正在运行的 Gitosis 服务器。有谁知道是否可以将文件添加/提交到本地裸仓库,还是我需要设置一个本地“普通”仓库并使用 SSH 将其推送到本地主机上的裸仓库?
3 回答
您应该能够使用低级管道命令执行此操作:
$生成内容| git hash-object -t blob -w --stdin $ git update-index --cacheinfo 100644 sha1 路径
- sha1是先前命令的结果。
100644
: 表示普通文件。
但是裸存储库仅用于推入或从中获取。裸存储库根本不需要索引!
您需要一个工作树来将文件添加到索引并提交它。
虽然可以通过管道命令直接更改裸 git 存储库的内部内容,但我真的建议设置一个正常的克隆,修改它并将生成的提交推送回裸存储库。
由于git update-index --add --cachinfo
将文件添加到索引很重要,请注意 cacheinfo 具有新语法:
--cacheinfo <mode>,<object>,<path>
--cacheinfo <mode> <object> <path>
直接将指定的信息插入到索引中。
为了向后兼容,您也可以将这三个参数作为三个单独的参数提供,但鼓励新用户使用单参数形式。
请参阅Junio C Hamano ( )的提交 ec160ae,2014 年 3 月,Git 2.0+ 的一部分:gitster
update-index
: 教--cacheinfo
一种新语法“mode,sha1,path
”"
--cacheinfo
" 选项的不同之处在于它需要三个选项参数。
带有可选参数的选项已经够糟糕了。
具有多个参数的选项简直是疯了。引入一种新语法,将这三个内容用逗号连接在一起,这使得命令行语法在子命令之间更加统一,同时保留了向后兼容的传统语法。
注意:只有 git 2.0.X/2.1 (Q3 2014) 处理 NULL 情况:
参见Jeff King ( )的commit c8e1ee4:peff
在没有任何进一步参数的情况下运行“
git update-index --cacheinfo
”会导致段错误而不是错误消息。提交 ec160ae (update-index: teaching--cacheinfo
a new syntax "mode,sha1,path
", 2014-03-23) 添加了检查参数格式的代码,但忘记处理 NULL 情况。从解析器返回一个错误就足够了,因为我们将其视为旧式“
--cacheinfo <mode> <sha1> <path>
”,并抱怨我们要读取的参数少于 3 个。