Git子模块更新错误

时间:2012-07-20 01:45:09

标签: git

我现在开始使用git,并运行一些测试来更好地学习它,但是却被错误地抓住了......

我已经开始了一个我正在开发的框架的git存储库,它正在我正在使用的很多项目上使用,以便轻松地更新这些项目。

为了测试,我已经开始了一个新项目,并将框架添加为子模块。我已经将项目克隆到一个新文件夹上,执行了以下命令git submodule init; git submodule update,并将子模块完美地克隆到了它的目录中。

之后,我根据项目需要对源进行了一些修改,并提交了对源进行的修改并推送到服务器。一切都很顺利。

在我克隆的另一个文件夹中,我已经完成了修改,一切似乎都没问题。

DennyMac:app DennyLoko$ git commit -a -m "Teste"
[master 68fee42] Teste
 1 files changed, 1 insertions(+), 0 deletions(-)
DennyMac:app DennyLoko$ cd ..
DennyMac:vesti DennyLoko$ git add app
DennyMac:vesti DennyLoko$ git commit -m "Teste"
[master 3a2b13d] Teste
 1 files changed, 1 insertions(+), 1 deletions(-)
DennyMac:vesti DennyLoko$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 243 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@git.xxxxxxxxxx.com:vesti.git
   33fc470..3a2b13d  master -> master

但是当我检查修改过的文件的来源时,没有任何改变。运行git submodule update会出现以下错误:

DennyMac:testelol DennyLoko$ git submodule update
fatal: reference is not a tree: 68fee423f5dba537956fec51dcab0901856ad4e6
Unable to checkout '68fee423f5dba537956fec51dcab0901856ad4e6' in submodule path 'app'

我该怎么做才能解决这个问题?我正在使用子模块做最好的事情或者存在更好的方法吗?

谢谢你们!

EDIT ::

让我们提供更多细节......

我在Assembla上创建了框架项目,并通过以下命令发送了初始结构:

git init
git add .
git commit -a -m "Estrutura inicial enviada"
git remote add origin git@git.assembla.com:off.git
git push origin master

之后,我为新项目创建了目录:

mkdir vesti
cd vesti
mkdir documentacao
mkdir node_app
git init
git add .
git submodule init
git submodule add git@git.assembla.com:off.git app
git commit -a -m "Teste"
git remote add origin git@git.assembla.com:vesti.git
git push origin master

之后,我创建了一个新目录mkdir testelol并将vestigit clone git@git.assembla.com:vesti.git)克隆到此目录中并执行以下命令:

git submodule init
git submodule update

哪个运行成功并自动克隆了应用程序目录中的git@git.assembla.com:off.git。回到vesti目录(cd ../vesti),我做了以下事情:

  • app子模块(echo "teste" >> app/application/Main_Class.php
  • 中编辑了一个文件
  • 已更改为app目录(cd app
  • 已提交修改(git commit -a -m "Teste"返回[master 68fee42] Teste 1 files changed, 1 insertions(+), 0 deletions(-)
  • 支持回购(cd ..
  • 的根目录
  • 添加了app次修改(git add app
  • 已提交(git commit -m "Teste"已返回[master 3a2b13d] Teste 1 files changed, 1 insertions(+), 1 deletions(-)
  • 推动修改(git push

DennyMac:vesti DennyLoko$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 243 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@git.assembla.com:vesti.git
   33fc470..3a2b13d  master -> master

完成所有操作后,我已经支持testelol目录并执行了返回成功消息的命令git pull

DennyMac:testelol DennyLoko$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (2/2), done.
From git@git.assembla.com:vesti.git
   33fc470..3a2b13d  master     -> origin/master
Fetching submodule app
Updating 33fc470..3a2b13d
Fast-forward
 app |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

之后,我检查了是否对文件testelol/app/application/Main_Class.php进行了修改,但是没有更改。要更新,请运行以下命令:

DennyMac:testelol DennyLoko$ git submodule init
DennyMac:testelol DennyLoko$ git submodule update
fatal: reference is not a tree: 68fee423f5dba537956fec51dcab0901856ad4e6
Unable to checkout '68fee423f5dba537956fec51dcab0901856ad4e6' in submodule path 'app'

就是这样。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我正确地读你,你的子模块在'app'中并且被显式克隆,然后被添加到已经将'app'注册为子模块的父模块中。

如果父repo已经提交了子模块,那么从项目工作树rootdir输入git submodule update --init --recursive(仅当你的子模块有子模块时才需要--recursive)

您可以查看.gitmodules的内容以查看已注册的内容(并记住在更改时提交.gitmodules文件)。此外,您必须手动从.gitmodules中删除行,并在删除子模块时提交它。