Git:"工作目录"究竟在哪里?

she*_*wen 22 git github working-directory

我正在阅读一些Git教程." 工作目录 " 的概念不断被提及,但是,我读过的任何教程或文档都没有指出这个" 工作目录 "的位置或内容.

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

实际上,您实际上可以制作存储库的副本,并制作该副本以使其没有工作目录,这实际上称为裸克隆.这实际上是GitHub使用的.

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

jac*_*moe 13

这应该有希望为我们解决问题:

使用git init命令创建的存储库和git init --bare命令之间有什么区别?

使用git init命令创建的存储库称为工作目录.在存储库的顶级文件夹中,您将找到两件事:

A .git subfolder with all the git related revision history of your repo
A working tree, or checked out copies of your project files.
Run Code Online (Sandbox Code Playgroud)

使用git init --bare创建的存储库称为裸存储库.它们的结构与工作目录略有不同.首先,它们不包含源文件的工作或签出副本.第二,裸存储库将存储库的git修订历史存储在存储库的根文件夹中,而不是存储在.git子文件夹中.注意......裸存储库通常被赋予.git扩展名.

摘自John Saints - 什么是裸git存储库?

换句话说,一个裸git克隆不包含已检出代码的工作目录.
可以把它想象成只有.git目录(Git数据库)而没有别的东西.

  • 谢谢。我开始明白了。如果Github使用裸克隆并且裸克隆就像`.git`目录,为什么Github的repo中没有`head`,`index`,`hook`? (2认同)

Har*_*dic 8

结合其他两个答案:

正如 Git 文档中所述

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

这本质上意味着,如果您签出一个分支(例如 master)并位于特定的提交(例如 HEAD)上,那么您的工作目录就是所有文件和文件夹的“伞”术语。

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


Som*_*yya 6

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


Bab*_*ata 6

工作目录很简单,就是您正在处理的当前本地目录。例如,如果你有master、dev 和 yourname-dev作为你的远程分支,如果你从dev结帐yourname-dev,如果你从这个(yourname-dev)工作目录结帐到另一个说devyourname-dev现在是你的工作目录, dev现在是你的新工作目录