GIT - 跟踪分支与克隆之间的区别

12

我在各种网站上看到了这个命令:

git checkout --track -b <...>

如果我在远程服务器上创建了一个裸库并且从两个不同的位置工作,最快和“官方”的完成方法是什么?

我做的是,我在我的笔记本电脑上创建了初始的repo,然后将更改推送到“origin”,即我的VPS repo(裸库)。现在,在我的桌面上,我应该克隆我的repo吗?我问这个问题是因为我有两个分支,“dev”和“master”。一旦我在我的桌面上,我不确定是否应该“跟踪”这个repo,或者是否应该先克隆。如果我想在dev分支上工作怎么办?那我使用--track指令检出吗?

以下是我到目前为止所做的。

在笔记本电脑上:

cd devproject
git init
git add .
git commit -m "My first commit"

关于 VPS Repo

mkdir /home/sam/devproject.git
cd /home/sam/devproject.git
git --bare init
exit

回到笔记本电脑

cd devproject
git remote add origin ssh://myserver.com/home/sam/devproject.git

在桌面上(??)

git clone <..>
3个回答

9

您可以 克隆 一个代码库,但是需要 跟踪 一个分支。您发布的checkout命令不完整:

git checkout --track -b new_local_branch_name origin/remote_branch_name

因此,所需步骤如下:
  1. 克隆远程存储库。
  2. 跟踪远程分支。

注意:请保留HTML标记。

好的,我是有意删除它的。那么,如果我有两个分支(主分支/开发分支),我必须同时跟踪它们吗?每次我克隆一个仓库,我都必须跟踪这些分支。然后在我的克隆中进行更改,并相应地进行git push/pull。是这样吗? - sdot257
基本上是的。但你不必明确地跟踪主分支。 - innaM
3
为了澄清Manni的评论,当代码库被克隆时,它会自动设置主分支进行跟踪。(确切地说,它会设置最初检出的分支,即你从远程代码库中克隆的HEAD分支,但通常这是主分支。) - Cascabel

4

如果您不在存储库中,上述命令将无法工作。要使用git,您必须首先创建一个存储库,可以通过克隆已存在的存储库或使用git-init从头开始创建。

git checkout --track -b <branch> <remote-branch>
git checkout --track <remote-branch>

这两个命令可以创建一个新的本地分支以追踪<remote-branch>。第一个手动命名为<branch>,第二个使用与远程相同的名称。
请记住,追踪并不意味着自动更新 - 它只是指定分支应从哪里推送/拉取,并让git状态给出"您的分支比origin/master落后5个提交,可以快进"等消息。

在我的桌面上,我应该运行 git init .(它将是空的),然后运行 git checkout 吗?还是应该克隆? - sdot257
你已经在某个仓库中拥有所需的内容了吗?克隆它。如果是第一次创建,请使用git init。再次强调,git-checkout仅仅是检出(并可能创建)已经存在于仓库中的一些内容。 - Cascabel
无论如何,我的回答的重点是git-initgit-clone是创建存储库的两种方式,并描述了git checkout --track的功能。 - Cascabel

0

当你使用时

git checkout --track -b local_branch_name origin/remote_branch_name

通常情况下,使用“git checkout -b --track origin/branch_name”命令创建一个本地分支,其中'local_branch_name'与'remote_branch_name'相同,因为已经存在快捷方式。这意味着你创建了一个名为'local_branch_name'的本地分支,你可以在该分支上创建提交,其上游分支将是名为'remote_branch_name'的远程跟踪分支(它跟踪/遵循此远程跟踪分支)。

需要记住的是,你不能直接在'origin/remote_branch_name'上进行提交;这个远程跟踪分支是用来跟踪远程'origin'中'remote_branch_name'分支的进展的('origin'是你克隆的默认远程名称)。


说实话,我应该从我的笔记本电脑上(一切都是从那里开始的)进行这项操作吗?我不明白在我的台式机和笔记本电脑上存在什么差异。在我的笔记本电脑上,我创建了本地 repo,然后将其推送到远程服务器上的bare repo。您的意思是我应该从bare repo上跟踪我的笔记本电脑上的repo吗? - sdot257
哎呀...尽管Git的文档在描述两个不同的概念(远程跟踪分支和跟踪其他分支的分支)时使用“跟踪”一词,但是在描述存储库之间的关系时,并没有使用这个词。一个存储库可以是另一个存储库的克隆。您可以从某个存储库获取(fetch),也可以将内容推送到某个存储库(push)。 - Jakub Narębski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接