2012-07-20 137 views
0

我开始,现在与git,并运行一些测试,以了解它更好,但上了车错误stucked ...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 [email protected]: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' 

什么我必须做解决这一问题?我正在使用子模块做最好的事情或者存在一个更好的方法呢?

谢谢你们!

编辑::

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

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

git init 
git add . 
git commit -a -m "Estrutura inicial enviada" 
git remote add origin [email protected]: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 [email protected]:off.git app 
git commit -a -m "Teste" 
git remote add origin [email protected]:vesti.git 
git push origin master 

之后,我已创建了crea泰德一个新的目录mkdir testelol和克隆vestigit clone [email protected]:vesti.git)进入该目录并执行以下命令:

git submodule init 
git submodule update 

哪些成功运行,并自动克隆[email protected]:app目录内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修饰的的根目录ications(git add app
  • 承诺(git commit -m "Teste"回到[master 3a2b13d] Teste 1 files changed, 1 insertions(+), 1 deletions(-)
  • ,推动了修改(git push

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 [email protected]:vesti.git 
    33fc470..3a2b13d master  -> origin/master 
Fetching submodule app 
Updating 33fc470..3a2b13d 
Fast-forward 
app | 2 +- 
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 [email protected]:vesti.git 
    33fc470..3a2b13d master -> master 

这样做的一切,我已经备份到testelol目录和执行命令git pull其返回成功信息后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' 

就是这样。

谢谢!

回答

0

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

如果父回购已经发生了子模块承诺分配给它,然后从工作树ROOTDIR项目,进入git submodule update --init --recursive(如果你的子模块具有submodles只需要--recursive)

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

+0

否。要添加子模块,我已经使用'git submodule add remote_path local_dir'。现在我排除了第二个目录,创建了一个新目录,再次克隆了repo,并且当我执行'git submodule update'时返回错误'致命:引用不是树:68fee423f5dba537956fec51dcab0901856ad4e6 无法在子模块路径中签出'68fee423f5dba537956fec51dcab0901856ad4e6' “app''。 – 2012-07-20 02:53:50

+0

请使用实际的目录名称(或一致的别名)更清楚。所以这一切都在一台机器上。第一次使用'git submodule add remote_path local_dir'添加子模块,然后排除(使用.gitignore?),然后创建一个不同的目录(使用mkdir应用程序?)和一个远程repo克隆到它? 如果您可以在父工作目录中发布.gitmodules的内容。它只应在您想要的目录中列出所需的子模块。如果还有其他,请删除[submodule path]块和下面的'path'和'url'行。 – karmakaze 2012-07-20 03:08:02

+0

已编辑以显示您提问的内容。 – 2012-07-20 04:22:06