我现在开始使用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
并将vesti
(git 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'
就是这样。
谢谢!
答案 0 :(得分:0)
如果我正确地读你,你的子模块在'app'中并且被显式克隆,然后被添加到已经将'app'注册为子模块的父模块中。
如果父repo已经提交了子模块,那么从项目工作树rootdir输入git submodule update --init --recursive
(仅当你的子模块有子模块时才需要--recursive)
您可以查看.gitmodules的内容以查看已注册的内容(并记住在更改时提交.gitmodules文件)。此外,您必须手动从.gitmodules中删除行,并在删除子模块时提交它。