我在/var/lib/repos/myrepo.git上有一个裸仓库,我尝试通过以下操作对其进行更新:
$ cd /var/lib/repos/myrepo.git
$ git fetch
我从远程获取最新提交,但是HEAD指针未更新。如果我愿意
$ git log
如果我这样做的话,它只会向我显示更新之前的日志消息
$ git log FETCH_HEAD
我可以看到最新的提交。
我想更新HEAD以指向FETCH_HEAD的sha1,或者让我将裸仓库克隆到另一个位于FETCH_HEAD的目录中。但是,FETCH_HEAD引用在工作目录中不可用。
答案 0 :(得分:1)
我有一个裸仓库
在光秃秃的存储库中,您没有具有文件系统,因此您没有任何要更新的参考。
...想要更新HEAD以指向FETCH_HEAD的sha1,
在裸仓库中,如果您希望设置默认分支,请使用以下命令:
git symbolic-ref HEAD refs/heads/<branch_name>
在“常规” git存储库上,您可以执行以下操作:
将当前分支更新为所需的提交:
git reset FETCH_HEAD --hard
验证已提交并存在于本地.git
存储库中。
既然您提到了您可以看到提交的日志,那么它应该在您的仓库中
git show FETCH_HEAD
答案 1 :(得分:0)
使用git clone --bare
制作的克隆具有默认的 empty 提取引用规范。这意味着,当您运行git fetch
时,您将使用 no refspec有效地运行git fetch
。这不是一个好计划。常规的--bare
存储库应该被推送到,
与CodeWizard said一样,裸克隆没有工作树,但这是red herring的一部分。裸克隆仍然具有HEAD
引用,这是指向其分支名称之一的符号引用。
您可能希望使用git clone --mirror
制作一个克隆。这与裸克隆相同,只不过其默认访存引用规范为+refs/*:refs/*
。这意味着在这样的克隆中运行git fetch
会无条件更新其所有 引用以匹配上游存储库。
请注意,这种克隆不是旨在接收git push
请求,因为在其中运行git fetch
将会替换 所有与其在origin
中设置的值的哈希ID映射。
但是,如果您想要一个裸克隆来更新其HEAD
映射到的任何分支,则可以:
HEAD
git branch --symbolic-ref HEAD
的哪个分支是符号引用
git fetch origin +refs/heads/name:refs/heads/name
以更新该引用。或者,如果您不打算在此存储库中重新分配HEAD
,则可以运行:
git config remote.origin.fetch +refs/heads/master:refs/heads/master
(假设HEAD
的名称解析为master
),然后,普通的git fetch
将仅更新master分支。