Git克隆--裸/获取

Git克隆--裸/获取,git,Git,我有一个git存储库,有着悠久而奇怪的历史。我不知道开发人员对这个存储库做了什么,也无法控制他们现在对它做了什么 但我需要克隆这个存储库(用于redmine集成)并定期获取所有更改 我该怎么做: git clone --bare git@git.server.com:/opt/git/repo cd repo.git git log 现在我可以看到所有提交。好的 接下来,开发人员在主存储库中进行提交,我希望获取所有更改(所有分支、标记等): 但是如果问提交历史,我没有看到在主存储库中进行的最后

我有一个git存储库,有着悠久而奇怪的历史。我不知道开发人员对这个存储库做了什么,也无法控制他们现在对它做了什么

但我需要克隆这个存储库(用于redmine集成)并定期获取所有更改

我该怎么做:

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