Windows上的Git:我的文件在哪里?

时间:2012-09-10 19:48:00

标签: git version-control github

警告:我是GIT的新手!!

我在本地计算机上安装了git。我还将它安装在我们网络上的服务器上。在服务器上,我创建了C:\git来存放我的代码并共享该目录。所以,我做了:

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

我在本地计算机上设置了一个新的远程指向“git服务器”的共享目录

$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 个答案:

答案 0 :(得分:4)

您已初始化bare存储库。它没有源代码结构。它根本不包含“工作树”。相反,它包含主目录本身右侧的.git子目录的所有内容。

因此,如果您需要在服务器上使用工作副本,则必须使用来自裸仓库的clone代码。然后pull最新提交同步它。

答案 1 :(得分: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内容的SHA1哈希值(字符串“hello”,即)。

现在输入:

git cat-file -p 2a93d00994fbd8c484f38b0423b7c42e87a55d48

您会看到hello.txt的内容!这是将存储在裸存储库中的对象,这就是为什么你不只是看到文件hello.txt坐在那里;它被赋予一个特殊的名称,压缩,放在objects目录中。

随着您的存储库的增长,事情会变得复杂一些,因为随着内容的大小和提交次数的增加,Git会开始将类似的文件打包在一起;所有信息仍然存在,但为了提高效率而进一步压缩。

另一种方法是你可以放心,你的文件确实存储在你的服务器上,你可以创建另一个克隆(不是一个克隆!),你将拥有一个包含所有文件的工作树。

答案 2 :(得分:1)

您需要实际提交文件!

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