我正在尝试使用子模块克隆项目,并收到类似这样的消息:
fatal: reference is not a tree: da3d99e1e6c554231cba76066a7b3149592e597e
Unable to checkout 'da3d99e1e6c554231cba76066a7b3149592e597e' in submodule path 'module_path'
现在,我不是第一个使用git模块的计时器,首先我检查了推动主项目的同事是否忘记了以某种方式推送模块,并且事实并非如此。
重点是,不仅module_path
中的模块没有任何地方的特定提交(我已经检查了每个遥控器中的所有遥控器和所有分支),但我找不到单个引用说在任何地方提交。
这是我尝试的事情的(部分)列表(我承认我对git存储库的内部不太了解,所以我的尝试在范围上非常普遍):
.git
子目录)插入包含违规参考的文件find
(包括.git
和子模块),文件名包含违规的参考号。git verify-pack
,为有问题的参考文件(请注意:我找到我想要的那个).git/modules/<module name>
中输入了相关的子模块,并在那里完成了上述操作(不是我希望找到任何东西,因为以前的所有操作都是递归的)dtruss
(就像strace
,但是在Mac上),没有找到任何与粗略相关的内容reflog
(不是我确实想要的)。没有骰子。我想我可以尝试强制推动当前提交在遥控器上,但我真的想了解发生了什么,特别是:那个引用来自哪里?为什么我会收到这个错误?
感谢您的帮助!
更新找到了一个新的“玩具”:
$ git cat-file -t da3d99e1e6c554231cba76066a7b3149592e597e
fatal: git cat-file da3d99e1e6c554231cba76066a7b3149592e597e: bad file
这在主git存储库和子模块的一个(相同的消息)中都会发生
UPDATE2 找到命令ls-tree
, 报告特定子模块的违规参考
$ git ls-tree master:<plugin_location> |grep <plugin_name>
160000 commit afa6b85e6aac7dfa13b74fb26fe68055864cdebe <plugin_name>
但实际上在子模块中检出了一个:(
UPDATE3 证明裁判实际上存在于我的同事的机器上(他们在reflog中的位置,这就是为什么我乍看之下没有注意到它们),并且经过一些摆弄我修复了问题。但问题仍然存在: git在哪里保存子模块的引用?
答案 0 :(得分:1)
git在哪里保存子模块的引用?
git log --patch <submodule path>
会显示子模块的更改。
我的一个回购的例子:
$ git log --patch tools
commit 3adfe4b33e4ade9da82983d268e60ca2e52268f9
Author: Alexander Groß <agross@therightstuff.de>
Date: Wed Oct 22 16:50:12 2014 +0200
The big Paket conversion
diff --git a/tools b/tools
index 84c72d3..c84d813 160000
--- a/tools
+++ b/tools
@@ -1 +1 @@
-Subproject commit 84c72d3cbe98e28d3b5c7643e7290085ec1551f7
+Subproject commit c84d813ebdae2fc9f2f14d5821cf820fbed42534
Git子模块存储三位信息:
.gitmodules
.gitmodules