当您克隆一个 git 存储库时,您将获得主分支的完整副本,并在克隆时检索其他分支的所有元数据(存储在您的存储库的 .git 目录中)。当您在本地签出/切换分支时,Git 使用此元数据构建分支。如果有人在您克隆存储库后或自您上次从远程获取数据后已推送到远程分支,则分支将过期。
您需要在线才能执行提取,并且每个分支(默认情况下)单独管理。因此,如果您在“master”中执行“pull”,则不会自动更新其他分支 - 尽管 git 将(同样,默认情况下)提取所有其他分支的元数据,以便您可以在它们之间切换并根据需要执行合并至。
获取的分支提交处于休眠状态,直到您在该分支中指定要对它们执行的操作。这样做的原因是,您可能有本地分支的不同/工作副本,您还不想与远程更改合并 - 因此您必须在准备好时手动执行此操作。想象一个场景,你有以下分支:
您目前正在feature/my-feature
与另一位开发人员合作——你们俩都在定期推送代码并进行协作。然后要求您为 LIVE 进行错误修复;在这种情况下,您将存储或提交您的更改feature/my-feature
,可能会推送(如果更改已准备好供其他开发人员使用),切换到master
,执行拉取并创建另一个错误修复分支来修复 LIVE 问题 - 您不会不希望您的feature/my-feature
代码被覆盖......当您准备好远程分支更改时,您希望手动控制它。
“拉”是“获取”和“合并”的组合。“获取”从服务器中提取分支元数据,“合并”获取当前远程跟踪的分支提交,并将它们合并到您的本地分支中。
git 中的“浅克隆”仍然可以获取最新的代码快照,但不会克隆整个历史图。这是唯一的区别 - 它与分支无关。该depth
参数允许您指定应该为每个分支拉回多少次提交。就个人而言,除了在 CI / CD 服务器上拉回存储库时,我从不需要使用它。
Git 与 TFS 等 VCS 非常不同,这不仅仅是因为您必须一直在线。它非常灵活 - 并且允许您作为开发人员在工作方式上非常灵活(只要您根据需要选择了正确的分支策略) - 但它确实 - 不幸的是 - 需要重新学习,尤其是当它谈到术语(git checkout
例如,它不会从远程提取代码 - 它只是在本地分支之间切换)。