2012-07-20 141 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