我需要澄清git local和git remote

时间:2018-05-17 11:24:38

标签: git

我正在处理的git存储库为每个版本的软件都有分支。 3.1.1,3.1.5,3.5.2等。还有一些分支,如开发,也有原产地对应的原产地/开发。

我注意到版本分支(在其他分支中)没有原始对应物。

根据我的理解,起源是偏远的,非起源是本地的。但是,我也可以从回购中提取非原始分支。所以看起来我的理解是缺乏的。

我注意到这一点的原因是我正在对本地版本进行rev-parse并与remote进行比较。但是,如果没有原点,我不能这样做。

所以我的问题是,与没有原点对应的分支有什么交易。我可以使用git push origin <branch>将它们推向原点,但在此之前我想了解它们之间的区别。

1 个答案:

答案 0 :(得分:2)

origin是一个远程(位置)的名称,它就像一条路径。它是您克隆的“原始”存储库的默认名称。但这个名字相当随意。这个和分支名称“master”成为标准名称,但它们也可以命名为“default-repo”和“default-branch”。

分支(本地或远程)是指向提交的指针。实际上,在.git文件夹中,每个分支都有一个文件,其分支名称为文件名,并且它指向的哈希提交为文件内容。您可以在.git/refs/heads/找到所有本地分支。

当您将分支推送到远程(例如origin)时,它将在远程的.git文件夹中创建此指针文件,并将在您的克隆中创建一个类似的文件来表示你的克隆人对遥控器的了解。远程分支的这种表示存在于.git/refs/remotes/<remote-name>/

然后,关于您正在讨论的“对应方”,您的任何本地分支都可以(但不必)与另一个分支(远程或非远程)链接。当本地分支链接到远程时,您可以在克隆的.git/config文件中看到它,例如:

[branch "test-padawin"]
    remote = origin
    merge = refs/heads/test-padawin

将分支与遥控器相关联可以轻松拉动和推动,因为它可以让您只需运行git pushgit pull,而无需提及从哪里拉或推送到。

简而言之,分支是特定提交的书签,为了简化仓库克隆之间的工作和沟通,他们可以跟踪其他克隆/回购中的“等效”。