2016-08-26 30 views
2

刚开始学习git,我喜欢它的概念。到目前为止,有一件事对我来说有点奇怪,我似乎无法在搜索中找到它。当我输入git checkout branchName更改为我想要的任何分支时,当我查看Finder窗口时,我可以通过视觉看到文件/文件夹出现或在回购中消失,基于我在哪个分支。Git - 当您更改分支时,文件在哪里?

下面的2张图片展示我如何在一个分支中,然后转到不同的分支(这是从做Lynda.com课程开始的)。左侧显示Finder以及文件夹_fonts如何消失,因为它不在其他分支中。

但究竟在哪里(和其他文件有变化)?从我在这里看到的情况来看,我无法同时查看来自不同分支的文件,但我只是很好奇当我更改分支时他们实际上在系统中进入的位置。

Inside one branch with a _fonts folder

Inside a different branch that does not have the _fonts folder

回答

5

从我在这里看到的情况来看,我无法一次实际查看来自不同分支的文件,但我只是好奇他们在系统中实际进入分支时的位置。

是的,你可以做到这一点

你只需要按照这样的:

Git有名字git workdir下暴露这一功能早在2007年。它位于git contrib文件夹下多年。

在git 2.5版中,它被公开为git worktree。它允许你在多个分支上同时工作。

如何做到这一点?

# create a new working directory 
# the path will be added and the given branch name will be checkout out 
git worktree add <path to the new working directory/ branch name> 

# now you have 2 folders with different branches in each one of them. 
# if you used something like `git worktree /tmp/aaa` than you will have 
# branch aaa checked out in the new folder and you can switch to any branch 
# you wish 

每个worktree都有自己的3-状态,以便你不能多个worktrees同一个分支。

例如:

git worktree add <second path> 

将创建您的电脑,让你可以使用不同的分支同时工作在另一个文件夹。

git worktree将创建2个单独的工作文件夹,指向同一个存储库时彼此分开。

这将允许您对新工作树执行任何实验,而不会对存储库本身产生任何影响。在附加图片中,您可以看到有2个独立的工作文件夹,但它们都使用单个回购并共享内容。

下面是关于如何创建新worktree样本,什么是它的结果:

enter image description here

2

Git的电话,你可以看到 “working tree” 的文件。除了这个工作树之外,Git还创建了一个名为.git/的文件夹,它存储了几乎所有的repo配置和数据。如果您好奇,可以使用open命令打开此文件夹以便在OS X上使用Finder进行查看,或者使用终端(protip:通过-als命令以列出隐藏文件)仔细阅读该文件夹。立即git的一些内部工作变得明显,所以我绝对鼓励你自己检查一下。

在这个文件夹中,有一个文件夹objects/其中Git存储文件,对文件,提交和关系的更改。您可以使用git cat-file浏览其内容。有关这些对象的更多信息,请参阅本书中的章节; https://git-scm.com/book/en/v2/Git-Internals-Git-Objects

git命令提供了一个很好的前端来处理这些对象和此文件夹的其他内容,以便您可以轻松评估和管理工作树状态。

如果您仍然好奇并想了解更多信息,我强烈建议花时间阅读我已经链接到的整本书。最后一节标题为“Git Internals”,详细介绍了Git的内部工作原理。

+1

我认为这个问题是*“你在哪里的文件走” *但只提到的文件夹包含哈希快照,这很简单。还有更多......魔术发生在这个过渡的幕后,这将会产生更好的答案。 –

+0

是的,你说得对。这是一个粗劣的答案。我花了更多的精力来解释'.git /'中还有哪些内容,以及如何深入了解对象。你认为还有什么可以使用改进? – pnovotnak

+0

@pnovotnak阅读'Git Internals'是许多问题的最佳答案。 – ElpieKay