2014-02-06 151 views
7

我想從我剛剛建立了一個遠程回購拉和我得到消息 混帳拉不能沒有工作樹被用來使用混帳拉不能沒有工作樹

一切我讀過似乎在我的.git目錄指向,但它似乎罰款

git branch 

使輸出

* master 

git ls-tree --full-tree -r HEAD 

這樣

100644 blob c825c0607f77e1df4e05920037a2ce09c08e5180app/assets/javascripts/ready.js 

這看起來是正確的,使條目列表負載我覺得我已經成功地正確地推動文件到回購?

git status 

給輸出

fatal: This operation must be run in a work tree 

和 ls -l命令git的 給

drwxrwxr-x 2 roy roy 4096 Feb 6 14:24 branches 
-rw-rw-r-- 1 roy roy 66 Feb 6 14:24 config 
-rw-rw-r-- 1 roy roy 73 Feb 6 14:24 description 
-rw-rw-r-- 1 roy roy 23 Feb 6 14:24 HEAD 
drwxrwxr-x 2 roy roy 4096 Feb 6 14:24 hooks 
drwxrwxr-x 2 roy roy 4096 Feb 6 14:24 info 
drwxrwxr-x 4 roy roy 4096 Feb 6 14:24 objects 
drwxrwxr-x 4 roy roy 4096 Feb 6 14:24 refs 

這似乎有點奇怪,因爲它看起來就像它推前一樣。

任何人都可以幫助我做我做錯了什麼? 在我能做一個git pull之前,我有什麼需要做的嗎?我被那個ls-tree命令弄糊塗了,這些文件沒有被推送?

+3

這是不是你想拉裸回購? – cHao

+1

@cHao。是的,我做了git --bare init。然後在客戶端連接到它與git遠程添加起源roy @ .......並推送。 git的LS-遠程客戶端上提供了168c3cb6118b84b495810cd9295eb41dc23b7fa1 \t HEAD 168c3cb6118b84b495810cd9295eb41dc23b7fa1 \t裁判/頭/主 – RoyTheBoy

+1

好,因爲Git是告訴你,這些操作是沒有沒有工作樹(這裸回購沒有)感。沒有狀態(因爲沒有可能有狀態的工作樹),並且不能進行合併(這可能會產生衝突,因此需要工作樹來解決這些問題) –

回答

13

看來你正在一個裸倉庫中工作。

裸存儲庫就像普通存儲庫一樣,只是它沒有關聯的工作目錄。 正在pull a fetch加上merge,它不能應用於裸倉庫。

在細節:

一個Git倉庫,畢竟只是一個.git目錄中定義的一組元數據存儲在特殊的目錄(如refs,在本地和遠程分支機構存儲和objects,其中包含所有文件內容,等等)。

通常,git存儲庫與所謂的工作目錄相關聯,即所謂的工作目錄,即檢出某個提交:開發人員可以使用工作目錄對源代碼進行修改,從而準備下一次提交。

然而,有時候,不需要有一個工作目錄。最常見的情況是,存儲庫託管在共享服務器中,並用作開發人員集成其代碼的中央共享位置。存儲庫必須存儲所有的信息(因此它有它自己的.git目錄副本),開發人員可以將其貢獻加入其中,但沒有開發人員可以直接處理它;所以,沒有提供工作目錄。這是一個裸倉庫。

現在,有一些git命令在工作目錄上運行。這些命令不適用於裸存儲庫,因爲它缺少工作目錄。

git pull就是其中之一。 git pullgit fetchgit merge的組合。現在,git fetch僅涉及.git目錄,因此它可以在裸存儲庫上執行。另一方面,git merge需要在工作目錄上進行合併才能執行。而且由於工作目錄不存在,該命令將失敗。

pullmerge不是在裸存儲庫上不能執行的唯一命令。我強烈建議你喲,看一下this interactive map這將幫助你選擇哪些操作不能在純倉庫進行(see the amazing Interactive Git Cheatsheet

enter image description here