问题描述
我正在编写一些用于管理发布的 git 命令脚本。如果使用远程服务器上的哈希在远程服务器上创建一个分支,我想做的一件事。但我想运行它而不必获取整个树的开销。我从 git ls-remote <url>
获取哈希,然后我想通过类似 git push <url> <hash>:refs/heads/release/1.0.0
的东西推送到远程,但为了使其工作,我需要初始化一个存储库,然后获取哈希。
我希望有一种比必须先获取更直接的方法。我应该注意到,我希望通过初始化一个裸仓库来优化额外的步骤,然后使用 depth=1 进行浅提取。
解决方法
除了极少数命令 git
仅适用于本地存储库;有限的子命令集是:clone
、fetch
、pull
、push
、ls-remote
。
因此要使用远程存储库,您有 3 个选择:
-
使用远程主机提供的外
git
API。示例是 Github/Gitlab API。 -
使用
ssh
连接到远程主机并直接在服务器上使用本地远程存储库。 -
本地克隆; fetch 刚好足以创建和推送一个分支。
列表的结尾。
,如果该存储库是您的,只需在那里创建分支:这样做的方法是登录服务器并创建分支。
如果不是您的,则推送普通更新:您无法绕过对推送到不属于您的存储库的内容的检查。 “您的”的定义是,您可以登录到服务器并使用本地 git 命令,例如创建任意分支。
是的,我基本上是在回应 what @phd said。
编辑:一个补充:获取完成你要求的任务所需的绝对最低限度,做你的克隆 -n --filter=tree:0 --depth 1 --no-single-branch
,然后你可以将引用添加到现有提交并以 99+% 的折扣推送它们(在我的测试)关于获取成本。