本文旨在解决如题所示的问题。(预告:是由--depth 1
这个参数和git版本导致的)
我要配置的是一个叫sosed的工具。
# 克隆代码
git clone https://github.com/JetBrains-Research/sosed.git
而后我根据其指导配置了conda环境,然后到了 python3 -m sosed.setup_tokenizer 这一步
setup_tokenizer要运行几个指令:
# 把该项目tag为v.1.1.1的版本克隆到tokenizer文件夹
git clone --branch=v1.1.1 https://github.com/JetBrains-Research/identifiers-extractor.git tokenizer
cd tokenizer
# 更新子模块
git submodule update --init --recursive --depth 1
cd ..
在运行到git submodule update --init --recursive --depth 1
的时候,就出现了错误:
fatal: reference is not a tree: e213464b5062017dc058cfb7effe2fc7a2eebb04
fatal: reference is not a tree: 6002fcd5e86bb1e8670157bb008b97dbaf656d95
Unable to checkout 'e213464b5062017dc058cfb7effe2fc7a2eebb04' in submodule path 'identifiers_extractor/parsers/vendor/tree-sitter-bash'
Unable to checkout '6002fcd5e86bb1e8670157bb008b97dbaf656d95' in submodule path 'identifiers_extractor/parsers/vendor/tree-sitter-c'
如果读者朋友遇到和我类似的场景,那么以下即为你需要的解决方案。
根据 git submodule update --depth 1: reference is not a tree,我发现以上出错的原因是:
--depth 1
导致只克隆了最浅的一个commit,那么除非你需要的commit id(比如我们上面的e213464b5062017dc058cfb7effe2fc7a2eebb04
和这个最浅的commit id恰好一样,才不会报错)--depth 1
,也不会报以上错误。然后我看了下我的git版本,只有git version 1.9.1
。
随后我按照:Ubuntu之Git更新 将git version 1.9.1
更新到:git version 2.28.0
,对应指令如下:
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
现在重新运行git submodule update --init --recursive --depth 1
,就不会再有问题啦!
(所以还是我Ubuntu 14.04 上的git太老旧了。)
不是很重要,但是在最开始的时候也给了我一些启发。
配置一个工具,小麻烦还是很多的。
所以需要不断积累,有种“工匠”精神的感觉。