我想获取远程存储库的单个分支(不是所有分支),并创建一个本地跟踪分支,该分支可以跟踪对该远程分支的进一步更新。远程存储库中的其他分支非常大,所以我希望避免获取它们。我怎么做呢?


当前回答

我的解决方法:

git fetch --depth=1
git checkout <branch_name>

如果您没有本地克隆:

git clone --depth 1 -b <branch_name> <repo_url>

其他回答

为了完整起见,这里有一个新签出的示例命令:

git clone --branch gh-pages --single-branch git://github.com/user/repo

正如在其他回答中提到的,它设置remote.origin.fetch如下所示:

[remote "origin"]
        url = git://github.com/user/repo
        fetch = +refs/heads/gh-pages:refs/remotes/origin/gh-pages

要更新现有的远程跟踪特定的分支,只使用:

git remote set-branches <remote-name> <branch-name>

从git帮助远程:

set-branches
    Changes the list of branches tracked by the named remote. This can be used to track a subset of the available remote branches
    after the initial setup for a remote.

    The named branches will be interpreted as if specified with the -t option on the git remote add command line.

    With --add, instead of replacing the list of currently tracked branches, adds to that list.

我知道已经有很多答案了,但下面这些步骤对我来说是有效的:

Git获取<remote_name> <branch_name> git branch <branch_name> FETCH_HEAD . git Git checkout <branch_name>

这些是基于@Abdulsattar Mohammed的回答,@Christoph对这个回答的评论,以及其他堆栈溢出问题和他们的答案:

如何签出远程Git分支? Git中的FETCH_HEAD是什么意思?

一种方法是:

git fetch <remotename> <remote branch>:refs/remotes/<remotename>/<local branch>

但这并没有设置跟踪。

要了解更多信息,请参阅git获取的文档。

编辑:正如@user1338062所指出的:如果你想添加新分支的地方还没有存储库的本地克隆,但你想创建一个新的本地存储库,那么git clone——branch <branch_name>——single-branch <repo_url>提供了一个更短的解决方案。

如果你想改变默认的“git pull”和“git fetch”只获取特定的分支,那么你可以编辑.git/config,使远程配置看起来像这样:

[remote "origin"]
  fetch = +refs/heads/master:refs/remotes/origin/master

默认情况下,这只会从原点获取master。 查看更多信息:https://git-scm.com/book/en/v2/Git-Internals-The-Refspec

编辑:刚刚意识到这和-t选项对git远程添加所做的事情是一样的。至少,如果你不想在远程添加后删除远程并使用-t再次添加远程,这是一个很好的方法。