2012-09-10 37 views
2

警告:我是新來的!Git在Windows上:我的文件在哪裏?

我在本地機器上安裝了git。我也將它安裝在我們網絡上的服務器上。在服務器上,我創建了C:\git來存放我的代碼並共享該目錄。所以,我所做的:

$cd C:\git 
$git init --bare 

設置我的本地機器上的一個新的遠程指向「混帳服務器」

$git remote add shared "//shared/path/to/git/folder" 
$cd C:\path\to\my\source\code 
$git init 
$git add -A 
$git commit -m "initial push" 
$git push shared master 
$git checkout -b test 
$git push shared test 

這樣的共享目錄,現在我已經做了所有當我回到服務器時,我期望在那裏看到我的源代碼的服務器副本,但我沒有看到它。我是否錯過了git的全部或者我做錯了什麼?

回答

3

Git將源代碼存儲爲「二進制大對象」(BLOB或簡稱爲「對象」)。一個裸倉庫,就像服務器上的庫一樣,只包含那些BLOB,而不是一個「工作樹」,這是你的克隆版本庫所具有的,這就是爲什麼你不能在服務器上看到你的文件是正常的。他們在那裏,根據他們的內容進行唯一命名,在objects目錄中。試試這個實驗:

git init 

echo "hello" > hello.txt 

git add hello.txt 

dir .git/objects 

你會看到一個名爲2a子目錄。看看這個目錄中:

dir .git/objects/2a 

你會看到一個名爲93d00994fbd8c484f38b0423b7c42e87a55d48。目錄名稱(2a)與文件名一起構成文件hello.txt(字符串「hello」,即)的內容的SHA1哈希。

現在,如果你鍵入:

git cat-file -p 2a93d00994fbd8c484f38b0423b7c42e87a55d48 

你會看到hello.txt內容!這是將存儲在裸倉庫中的對象,這就是爲什麼你不只看到文件hello.txt坐在那裏;它被賦予了一個特殊的名字,並被壓縮,並放入objects目錄中。

隨着存儲庫的增長,事情會變得更復雜一些,因爲隨着內容大小和提交數量的增加,Git開始將相似的文件打包在一起;所有的信息仍然存在,但爲了提高效率進一步壓縮。另一種方式是讓自己確信你的文件確實存儲在你的服務器上,你可以創建另一個克隆(而不是裸露的!),並且你將有一個包含你所有文件的工作樹。

+0

這是非常翔實的。非常感謝Ethan! – jaressloo

1

你需要真正提交你的文件!

$git add -A 
$git commit -m "First commit" 
+0

對不起,我確實提交併推送了我的代碼。我只是忘記提到我提交了代碼。 – jaressloo

4

您已初始化bare存儲庫。它沒有源代碼結構。它根本不包含「工作樹」。相反,它包含主目錄本身右側的.git子目錄的所有內容。

所以,如果你想在你的服務器上的工作副本,你必須clone你的代碼從裸回購。然後pull最新提交將其同步。

+0

我想我明白,但在同一時間 - 有點困惑。如果我的服務器沒有託管文件,那麼當我從不同的機器上「拉」時,代碼從哪裏「拉」? – jaressloo

+1

應該克隆服務器上的工作副本,並從裸回購中提取。仔細想想它是關於存儲庫,而不是工作副本或源代碼。 –

+0

@jaressloo我在這裏看到'github'標籤。所以,github是一個裸機。你改變你的本地代碼,提交它們,然後'push'到github倉庫。在此之後,您將'pull'提交給github的服務器工作副本。這就是全部工作流程。 8) –

相關問題