Git克隆--裸/获取
我有一个git存储库,有着悠久而奇怪的历史。我不知道开发人员对这个存储库做了什么,也无法控制他们现在对它做了什么 但我需要克隆这个存储库(用于redmine集成)并定期获取所有更改 我该怎么做:Git克隆--裸/获取,git,Git,我有一个git存储库,有着悠久而奇怪的历史。我不知道开发人员对这个存储库做了什么,也无法控制他们现在对它做了什么 但我需要克隆这个存储库(用于redmine集成)并定期获取所有更改 我该怎么做: git clone --bare git@git.server.com:/opt/git/repo cd repo.git git log 现在我可以看到所有提交。好的 接下来,开发人员在主存储库中进行提交,我希望获取所有更改(所有分支、标记等): 但是如果问提交历史,我没有看到在主存储库中进行的最后
git clone --bare git@git.server.com:/opt/git/repo
cd repo.git
git log
现在我可以看到所有提交。好的
接下来,开发人员在主存储库中进行提交,我希望获取所有更改(所有分支、标记等):
但是如果问提交历史,我没有看到在主存储库中进行的最后一次提交。为什么?
如果我没有发布足够的信息,我准备给你所有需要的
提前谢谢
已更新
以下是原始报告中的分支机构信息:
git branch -a
one
test
* master
release
以下是克隆存储库中的分支信息:
git branch -a
one
test
* master
release
我可以在原始存储库的主分支中看到最后一次提交,但在克隆存储库的主分支中找不到它们。您应该使用
git pull
或者在获取后运行git merge
,以获取获取的更改
如果您有一个裸存储库,您就不能执行拉取操作,因为拉取操作想要与HEAD合并,而裸回购操作没有
要更新裸存储库,您可以将其作为remote
添加到非裸存储库并推送到它
但我认为,--mirror
而不是--bare
将按原样为您服务
与--bare相比,-mirror不仅映射
源到目标的本地分支,它映射所有引用(包括
远程分支、注释等),并设置refspec配置,如
所有这些引用都被中的git远程更新覆盖
目标存储库
然后您可以使用
git remote update
更新镜像存储库您可以使用git symbolic ref
更新裸存储库的头
,例如,将其指向远程源站的分支主
$ git symbolic-ref HEAD refs/remotes/origin/master
如果使用git fetch
更新遥控器,它将进行更新,例如origin/master
。所缺少的只是重新定位克隆的头部
要在裸repo中获取更多更新,我需要:
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
然后我可以做:
git fetch
要定期提取到裸存储库中,请首先配置
git config remote.origin.fetch "+*:*"
然后就跑
git fetch --prune
获取所有更改,包括标记、新分支甚至分支删除(选项--prune
)
- 请注意上面命令中包含的双引号(
“
),以保护asterix(*
)不会从shell中解释
- 允许非快进更新需要加号。如果您想备份远程服务器的当前状态,这可能是您的意图
- 注意:不使用此配置获取标记删除
另请参见。fatal:/usr/lib/git/git-pull
没有工作树就无法使用。我认为这是因为它是一个裸存储库。fatal:/usr/lib/git/git-pull
没有工作树就无法使用。我认为这是因为它是一个裸存储库。很抱歉,可能是,您需要裸存储库吗?是的,正如我看到的那样dmine需要一个裸存储库。此外,此方法适用于所有其他存储库,但我无法找出此repo的错误。我尝试过它,但得到:git log
->致命:错误的默认版本“HEAD”
。这是最好的答案。所有其他答案都解决了获取由创建的repo的问题>git clone--bare
不要为我修复它。符号ref解决方案不是很好,因为每次都需要为每个分支执行此操作,这是不可取的。如果使用git fetch-p
它将额外修剪已从源位置删除的分支。
git fetch --prune