Windows上的Git:我的文件在哪里?
警告:我是GIT新手 我在本地机器上安装了git。我还将其安装在我们网络上的服务器上。在服务器上,我创建了Windows上的Git:我的文件在哪里?,git,version-control,github,Git,Version Control,Github,警告:我是GIT新手 我在本地机器上安装了git。我还将其安装在我们网络上的服务器上。在服务器上,我创建了C:\git来存放我的代码,并共享了该目录。所以,我做到了: $cd C:\git $git init --bare 我在本地机器上设置了一个新的远程服务器,指向“git服务器”的共享目录 所以,现在我已经完成了所有这些,当我回到服务器时,我希望在那里看到我的源代码的服务器副本,但我没有看到。我是否错过了git的全部要点,还是我做错了什么?您需要实际提交您的文件 $git add -A $
C:\git
来存放我的代码,并共享了该目录。所以,我做到了:
$cd C:\git
$git init --bare
我在本地机器上设置了一个新的远程服务器,指向“git服务器”的共享目录
所以,现在我已经完成了所有这些,当我回到服务器时,我希望在那里看到我的源代码的服务器副本,但我没有看到。我是否错过了git的全部要点,还是我做错了什么?您需要实际提交您的文件
$git add -A
$git commit -m "First commit"
您初始化了
bare
存储库。它没有源代码结构。它根本不包含“工作树”。相反,它包含主目录中.git子目录的所有内容
因此,如果您想在服务器上创建一个工作副本,您必须从裸repo克隆您的代码。然后pull
latest提交来同步它 Git将源代码存储为“二进制大对象”(blob,简称“objects”)。与服务器上的存储库类似,裸存储库只包含这些blob,而不包含克隆存储库所具有的“工作树”,这就是为什么无法在服务器上正常查看文件的原因。它们在objects
目录中,根据其内容进行唯一命名。试试这个实验:
git init
echo "hello" > hello.txt
git add hello.txt
dir .git/objects
您将看到一个名为2a
的子目录。查看该目录:
dir .git/objects/2a
您将看到一个名为93d00994fbd8c484f38b0423b7c42e87a55d48
的文件。目录名(2a
)与文件名一起构成文件内容的SHA1哈希值hello.txt
(即字符串“hello”)
现在,如果您键入:
git cat-file -p 2a93d00994fbd8c484f38b0423b7c42e87a55d48
您将看到hello.txt的内容!这就是将存储在裸存储库中的对象,这就是为什么您不只是看到文件hello.txt
在那里;它被赋予了一个特殊的名称,经过压缩,并放在objects
目录中
随着存储库的增长,事情变得更加复杂,因为随着内容的大小和提交的数量的增长,Git开始将类似的文件打包在一起;所有的信息仍然存在,但是为了提高效率,它被进一步压缩了
另一种方法是,您可以保证您的文件确实存储在您的服务器上,您可以创建另一个克隆(不是裸克隆!),这样您就有了一个包含所有文件的工作树。对不起,我确实提交并推送了我的代码。我只是忘了提到我提交了代码。我想我理解了,但同时——有点困惑。如果我发现服务器没有托管文件,那么当我从不同的机器上进行“拉”操作时,代码“拉”从哪里来?服务器上的工作副本应该被克隆并从裸repo中拉。将其完全视为存储库,而不是工作副本或源代码。@jaressloo我在这里看到github
tag。因此,github是一种纯粹的回购。进行本地代码更改,提交它们,然后将其推送到github repo。在此之后,pull
this从github提交到服务器工作副本。这就是所有的工作流程。8) 为了澄清这一点,服务器实际上只存储历史记录,而没有实际保存最新文件的副本。
git cat-file -p 2a93d00994fbd8c484f38b0423b7c42e87a55d48