Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上的Git:我的文件在哪里?_Git_Version Control_Github - Fatal编程技术网

Windows上的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 $

警告:我是GIT新手

我在本地机器上安装了git。我还将其安装在我们网络上的服务器上。在服务器上,我创建了
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