0

我现在开始 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'

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

感谢你们!

编辑::

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

我在 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

哪个运行成功并自动克隆了 app 目录中的 git@git.assembla.com:off.git 。回到vestidir ( 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(-)
  • 备份到 repo 的根目录 ( 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'

而已。

谢谢!

4

1 回答 1

0

如果我没看错,您的子模块位于“应用程序”中并且它被显式克隆,然后添加到已经将“应用程序”注册为子模块的父级。

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

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

于 2012-07-20T02:42:55.673 回答