我有一个关于 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-file
和 git 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/