git工作目录在哪里?

时间:2011-03-12 18:14:26

标签: git macos

同事们,今天是我第一次使用Mac上的Tower进入git - 生命太短暂而无法使用命令行;)

我确实阅读了一些介绍和教程,但没有一个解决我正在撰写的问题。我在git与SVN中理解工作目录概念时遇到了一些麻烦。

我做了什么:

  1. 我创建了一个本地仓库并将其指向我的项目文件所在的文件夹。
  2. 添加并提交了文件夹中的所有文件。
  3. 编辑了一个文件。显示为已修改。
  4. 添加并提交了该文件。
  5. 这些步骤有效。

    到目前为止,我还没有被问到工作目录的位置,我无法检查主HEAD(该选项被禁用)。我的问题是:我的原始文件夹是否作为结帐工作目录? checkout命令何时起作用?当我有多个分支时,它才会发挥作用吗?

    希望有人能在我再继续之前澄清这一点。

3 个答案:

答案 0 :(得分:9)

当从一个源控制系统切换到另一个源控制系统时,人们经常会发现有许多共同的术语,除了一些“常见”术语在两个系统中实际上具有不同的含义。它变得更加混乱,因为git的分支模型与SVN的分支模型完全不同。 (警告:我的SVN有点生锈,所以随时纠正任何错误。)

工作目录具有相同的含义:它是您检出存储库的目录(或您创建本地存储库的目录),以及您直接使用的文件驻留位置。但是,SVN调用签出(即复制远程存储库的内容并将存储库“链接”到远程存储库)在git中称为 cloning 。在git中,签出意味着切换到另一个分支或修订版。

在SVN中,分支的工作原理是将整个存储库“复制”到另一个文件夹(在服务器上),在本地,您可以签出分支(如果您愿意,可以到另一个工作目录)。所以从某种意义上说,分支本身就是一个完整的存储库。

在git中,只有一个存储库,其中包含整个开发历史记录作为修订的非循环图。修订版有一个或两个父级,并且给定修订版,任何数量的修订版都可以将其作为父级(因此许多修订版可以从一个修订版中分出,修订版可以是两个修订版序列的合并)。在任何时间点,您都可以结帐特定修订版。此操作将使工作目录内容等于指定修订时的内容(换句话说,它将“重放”从初始修订到指定修订的所有修订。)

git中的分支是什么?它只是附加到修订版的标签。如果你签出一个分支,你会得到与直接签出分支修订版一样的效果,但是当你提交时,标签会自动转到新版本。

最后:在SVN中,HEAD指的是“主”分支;在git中,它指的是您当前签出的提交或分支。

答案 1 :(得分:5)

对您的问题稍微简短的回答:

  • 是的,您的原始文件夹充当当前分支的工作目录
  • 你可能习惯了没有结账命令;而git checkout用于在分支之间切换
  • 您可以切换到 master 分支,这是默认创建的分支 - 这将是与SVN相比的头部(但它不称为HEAD)

答案 2 :(得分:1)

Subversion使用(隐藏)'。svn'文件夹来填充您的工作副本,其中包含元数据和结帐原始数据的副本。 Git将它的数据放入项目根目录下的单个“.git”文件夹中。

如果您使用git init创建一个新的git存储库,您应该能够看到这个带有ls -al命令行魔法的'.git'文件夹(我确信Mac OS也可以图形化)

使用git(除了fetch,pull,pull)之外的所有操作都使用隐藏在“.git”文件夹中的 local 存储库。这是其中一个原因,这使得git如此之快。如果您是从另一个存储库克隆的,那么您首先要在本地提交更改,然后将它们(在任何您喜欢的位置)推送回“origin”。