在pre-commit
钩子(实际上是Gerrit中的ref-update
)期间,存储库处于分离的HEAD模式(女巫很好)。
执行git clone path/to/my/repo
确实克隆/获取此提交,但我只想执行git fetch
并避免每次提交时都克隆我的存储库(出于各种原因,例如避免每次更改文件时间戳。)
在以前克隆的存储库(如上所述)上执行git fetch --all
不获取此分离的头部提交。请注意,我执行让提交 SHA1 ,但git checkout commit-sha1-here
无法使用,因为它尚未被提取。
我确实知道设计中只提取了远程分支,但由于 clone 可以获取分离的头,是不是有办法更新我的克隆存储库以检索他们以后?我希望每次只为此而避免创建临时分支。
最终目标是拥有裸存储库的更新工作树(分离的HEAD)。
答案 0 :(得分:0)
在这里回答我自己的问题。
分离的HEAD的 git pull
似乎不允许设计,但可以使用git push
分离的HEAD(即,不是从发送方推送的接收方提取):
$ git push <repository> +<sha1>:refs/remotes/origin/master
然后从接收它的存储库:
$ git checkout <sha1> # same as origin/master
注意:如果它是当前分支或非基础存储库,则默认情况下不允许推送到refs/remotes/origin/master
而不是直接推送到master
,因此我们将推送到原始引用。