linux - 我无法克隆 git 树

标签 linux git

我有一个关于 git 的问题,我尝试克隆一棵树但没有成功。

git clone https://github.com/cer/event-sourcing-examples/tree/d2077e21aa677a00095f90250470ff011c132ab8/java-spring

我克隆了项目

git clone https://github.com/cer/event-sourcing-examples

我试图切换到那棵树但没有效果

你有什么建议吗?

最好的问候

最佳答案

Git 不能直接克隆树。您需要克隆整个存储库,然后 checkout 使用您想要的树的提交。不过,为了减少混淆,请注意术语“树”和“提交”之间存在差异:

  • 树是表示目录的 Git 对象,包含指向 blob(文件)和其他树的链接。树不一定是存储库的根目录。
  • 提交对象包含指向存储库 树的链接,以及一些额外信息,例如提交消息、日期和其他 header 。

您只能 checkout 提交。很少有 Git 命令直接处理树对象(git cat-filegit ls-tree 是异常(exception))。但是,您的 GitHub URL 中的对象 ID 确实是提交的 ID,所以这不是问题。

然后,您可以在克隆存储库后将您想要的提交 check out 到新分支中:

git checkout -b test-branch d2077e21

如果您要解决的问题只是从远程存储库中获取单个提交(或树),那么您就不走运了,因为 Git 的远程协议(protocol)不支持该操作。如果有的话,如果你可以在你想要的提交时将一个分支插入到远程存储库中,你可以直接克隆该分支,而无需任何历史记录:

git clone -b test-branch --depth 1 https://github.com/cer/event-sourcing-examples

但是,如果您做不到,那么您仍然不走运。远程协议(protocol)只允许引用命名的 refs,不允许任意提交。

关于linux - 我无法克隆 git 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43411941/

相关文章:

git - 推送当前与推送上游(跟踪)

c# - .gitignore 和 Visual Studio 项目 : Ignore bin/Debug directory but not bin/Release directory

linux - 远程 rsyslog 输出中的省略号

linux - 赋予 bash 脚本 suid 权限

linux - awk: $2 ==/"foo"/{ ... } 无法按预期工作(将 $2 与 foo 完全匹配,引用)

git - 使用 ssh 连接到实时服务器并将我的 git 推送到其中

linux - 当我打开我的 vimrc 文件时,Vim 返回与 Vundle 相关的错误

调用 php 脚本结束时 PHP 后台作业停止

python - Jenkins Git 插件 : git describe cannot describe anything

git - 如何查看一个分支中的哪些提交不在另一个分支中?