Git:"working directory"到底在哪里?



我正在学习一些Git教程。"工作目录"的概念不断被提及,然而,我读到的教程或文档都没有指出这个"workingdirectory是在哪里或什么。

我以为它实际上是.git的父目录,也就是我运行git init的目录。但我正在观看的视频教程谈到了无需提交和"工作目录清理"的状态:

事实上,您实际上可以制作存储库的副本复制,使其没有工作目录,这实际上是称为裸克隆。这实际上就是GitHub所使用的。

如果我对"工作目录"的理解是正确的,那么存储库怎么可能没有"working directory?"?当它说GitHub使用"裸克隆"时,这意味着什么?

这应该有望为我们澄清问题:

使用gitinit创建的存储库有什么区别命令和gitinit--bare命令?

使用gitinit命令创建的存储库称为工作目录。在存储库的顶级文件夹中,您可以找到两件事:

A .git subfolder with all the git related revision history of your repo
A working tree, or checked out copies of your project files.

使用gitinit--bare创建的存储库称为bare-repos。他们结构与工作目录有点不同。首先,它们不包含源文件的工作副本或签出副本。和第二,裸回购存储根目录中回购的git修订历史文件夹,而不是在.git子文件夹中。注意…裸露存储库通常具有.git扩展名。

取自约翰圣徒-什么是裸git存储库?

换句话说,裸git克隆不包含签出代码的工作目录
可以把它想象成.git目录(Git数据库),没有其他任何内容。

它就在您签出项目的任何地方。例如,您已在其中签出项目分支的目录。它通常是包含.git文件夹的文件夹。这是工作目录。更改签出分支中的文件时,将更改工作目录。此时,工作目录有未提交的更改。因此,最初,当您没有进行任何提交时,工作目录将是干净的,因为没有任何更改。

工作目录就是您正在处理的当前本地目录。例如,如果您有master、dev和yourname dev作为您的远程分支,如果您从devyourname dev签出,那么如果您从这个(yourname dev)工作目录签出到另一个(比如dev的name dev现在就是您的工作目录,dev现在是您的新工作目录

将另外两个答案结合起来:

如Git文档中所述:

工作目录是项目的一个版本的单个签出。

这本质上意味着,如果你签出了一个分支(例如master),并且坐在一个特定的提交(例如HEAD)上,你的工作目录就是你所有文件和文件夹的"伞式"术语。

它不是一个特定的目录/文件夹。工作目录涵盖所有目录、文件。。。一切
我之所以提到这一点,是因为当您想要提交一些文件时,这些文件将在工作目录中,并且在提交它们(使用git commit)之前,您需要暂存它们(使用git add)。

根据文档:

最后,您有了工作目录。另外两个树以高效但不方便的方式将其内容存储在.git文件夹中。工作目录将它们解压缩到实际文件中,这使您更容易编辑它们。将工作目录想象成一个沙箱,在将更改提交到您的暂存区域(索引),然后提交到历史记录之前,您可以在其中尝试更改。

回答OP的3个问题:

Q1:";工作目录"
A1:";Git项目通常由一个工作目录和一个位于顶层的".Git"子目录组成"(来源:https://git-scm.com/docs/git#_discussion)

Q2:一个存储库怎么可能没有一个";工作目录"
A2:Git";裸储存库";是一个例子(来源:https://git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server#_getting_git_on_a_server)

Q3:当它说GitHub使用";裸克隆"
A3:阅读git clone--bare选项的文档,此处:https://www.git-scm.com/docs/git-clone

您直接在本地repos工作吗?

当我遵循微软的指示[参考。https://learn.microsoft.com/en-us/azure/devops/repos/git/clone?view=azure-devops&tabs=visualstudio],这就是我打开.sln解决方案文件的地方。这对我来说似乎是错误的,也是不幸的,因为我更喜欢在我的大型D:驱动器(D:\dev)上编写代码,而不是在C:\Users\\source\repos中编写代码,在那里,repos默认保存(我不介意本地repos保存在那里——这并不理想——只要我能在D:\dev区域中工作)。

最新更新