2

警告:我是 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 的全部内容还是我做错了什么?

4

3 回答 3

4

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

因此,如果您想在服务器上获得工作副本,则必须clone从裸仓库获取您的代码。然后pull最新的提交同步它。

于 2012-09-10T19:53:00.510 回答
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的 SHA1 哈希值(即字符串“hello”)。hello.txt

现在,如果您键入:

git cat-file -p 2a93d00994fbd8c484f38b0423b7c42e87a55d48

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

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

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

于 2012-09-10T20:42:05.960 回答
1

您需要实际提交文件!

$git add -A
$git commit -m "First commit"
于 2012-09-10T19:49:59.410 回答