在GitHub存储库中,分支如何与文件夹不同?

时间:2015-06-16 07:00:47

标签: git github git-branch

我是GitHub的新手,我并不完全明白分支是什么。我感觉它就像一个文件夹。请解释一下:文件夹和分支之间究竟有什么区别?

4 个答案:

答案 0 :(得分:4)

到目前为止答案很好;我加两分钱。您已经知道文件夹是什么,因此接下来我们必须考虑提交的内容。提交是文件夹的快照 - 特别是某个时间点的存储库的根文件夹。分支只是提交的指针。请查看优秀Git book

中的以下图片

enter image description here

在这张图片中,灰色框是提交。您可以看到每个都有自己的主文件夹快照。橙色框是分支 - 请注意它们如何只是提交的指针。在这种情况下,有两个分支(v1.0master),它们都碰巧指向同一个提交。 HEAD指向您当前所在的分行。因此,如果您要在上述情况下进行新的提交,master将指向新的提交,其父级将为f30abv1.0仍会指向f30ab

因此,虽然分支可以在某种程度上像文件夹一样,不同的分支可以包含"不同的(版本)文件,实际上它是包含这些不同(版本)文件的不同提交,而分支只是指向提交。

正如其他人所提到的那样,你应该真正阅读Git book。当你了解基本原理时,与Git合作会更加愉快。

答案 1 :(得分:1)

在某种程度上,它们都是文件集。但是,它们的概念来自不同的环境,使用方式也大不相同。

文件夹是文件系统的一项功能。我希望我不必解释更多,因为它是一个基本的计算概念。您可以嵌套文件夹,它们没有关于版本控制系统的特殊功能(主要是历史记录)。

分支是版本控制系统的一项功能。它允许您一次管理更多的开发任务。它们包含历史记录,您可以随时检查它们转移的提交。但是,你不能将它们嵌套在Git中。

我将开始学习如何在https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging上使用Git中的分支。

答案 2 :(得分:0)

阅读article以了解github的工作原理。

分支就像正在进行的工作,你制作主代码(或其中的一部分)的副本进行更改(添加新功能或修复错误),当你测试它时它完全合适你合并它回到主要分支。因此,整个想法基本上都有一个开发分支和一个稳定的工作分支,如果在更改过程中出现问题,您可以使用它。

答案 3 :(得分:0)

正如Melebius所说,它们都是保留两个不同版本代码的方法。

文件夹是文件系统的功能。

分支是版本控制系统的功能,这意味着Git会跟踪您在版本历史中创建它的时间。

Git使您可以将分支合并回到主线,并将其合并。您可能会创建一个分支来处理可能会解决或无法解决的问题,进行几次提交,直到将其恢复为工作状态为止。

或者将单个提交从主线移到分支,反之亦然。当您对分支进行了错误修复后,您可能会使用此功能,后来您意识到该分支也适用于主线。

所有这些好处随文件夹消失。


另一方面,文件夹有其自身的优点,例如:

  • 您已经知道如何使用它们。
  • 如果要差异两个文件夹,则存在递归差异工具。但是要区分两个Git分支,您需要一个为Git制作的工具,您可能没有。
  • 您可以在IDE的两个窗口中的两个文件夹中打开项目,然后手动进行比较,或者将更改从一个文件夹一个接一个地应用于另一个文件夹。
  • 使用分支,有时我会意外地提交到错误的分支。使用文件夹,我学会了检查要提交到哪个文件夹。
  • 您可以在Mac上使用Spotlight或在命令行上使用grep来搜索某些内容,例如类名,它将在所有文件夹中找到,但不能在所有分支中找到。
  • 分支要求您遵循Git特定的过程来跟踪远程分支,或在您推送创建新的本地分支的提交时创建远程分支。
  • 如果您的仓库太大,则很容易查看哪些文件夹占用了空间。