git - 只克隆 git 中的稳定分支和另一个分支?

标签 git git-clone

我刚开始使用 git,我有一个问题。我的应用程序有 10 个其他开发人员在开发它,每个开发人员都有自己的分支,例如 dev_XXXXX。因此,如果我克隆存储库,他们的所有代码都会复制到我的机器上吗?在那种情况下,我不想要那样。假设我的分支是 dev_swamy,那么我如何只克隆稳定分支和 dev_swamy?谢谢。

最佳答案

默认 git clone将获取所有分支,但这些分支将存储为远程跟踪分支:例如分支“dev_XXXXX”将存储为“origin/dev_XXXXX”(全名为“refs/remotes/origin/dev_XXXXX”)。那些远程跟踪分支在 git branch 中是不可见的输出:你需要 git branch -r列出远程跟踪分支(或 git branch -a 列出所有分支)。如果这些分支与主线的分歧不大,它们就不会在存储库中占用太多磁盘空间。因此,我不明白您为什么只想克隆选定的分支。

不过,如果你想要一个只有两个选定分支的克隆,你可以这样做:

  1. 首先,创建一个新的空仓库

    $ mkdir repoclone
    $ cd repoclone/
    $ git init
    Initialized empty Git repository in /home/user/repoclone/.git/
    
  2. 然后使用“git remote”命令在名称“origin”下添加您的存储库(就像“git clone”为其命名),请求仅跟踪两个分支:“master”和“dev_swamy” .检查它是否已正确添加。

    $ git remote add -t master -t dev_swamy origin user@example.com:repo.git
    $ git remote 
    origin
    $ git remote show origin
    * remote origin
      Fetch URL: user@example.com:repo.git
      Push  URL: user@example.com:repo.git
      HEAD branch: master
      Remote branches:
        master          new (next fetch will store in remotes/origin)
        dev_swamy new (next fetch will store in remotes/origin)
    

    如果稳定分支被称为“stable”而不是“master”,你当然需要修改上面的例子。还有-m <branch>如果您希望指定的分支成为远程中的默认分支,请选择此选项。

  3. 从 'origin' 获取(您也可以通过对上面的“git remote add”使用 -f 选项来做到这一点):

    $ git fetch
    remote: Counting objects: 282, done.
    remote: Compressing objects: 100% (193/193), done.
    remote: Total 282 (delta 82), reused 0 (delta 0)
    Receiving objects: 100% (282/282), 81.30 KiB | 135 KiB/s, done.
    Resolving deltas: 100% (82/82), done.
    From user@example.com:repo.git
     * [new branch]      master     -> origin/master
     * [new branch]      dev_swamy -> origin/dev_swamy
    From user@example.com:repo.git
     * [new tag]         v1.0       -> v1.0
     * [new tag]         v1.0.1    -> v1.0.1
     * [new tag]         v1.1       -> v1.1
    
  4. 设置本地分支“master”(您将在其中工作)跟随“origin/master”(将“origin/master”作为上游),就像“git clone”一样:

    $ git checkout -t origin/master
    Branch master set up to track remote branch master from origin.
    Already on 'master'
    

    您可以为分支“dev_swamy”重复此操作。

  5. 现在您可以看到配置文件的样子。 您可以通过编辑 .git/config 得到完全相同的结果文件如下所示,然后执行“git fetch”

    $ cat .git/config  # or just open this file in your editor
    [core]
            repositoryformatversion = 0
            filemode = true
            bare = false
            logallrefupdates = true
    [remote "origin"]
            url = user@example.com:repo.git
            fetch = +refs/heads/master:refs/remotes/origin/master
            fetch = +refs/heads/dev_swamy:refs/remotes/origin/dev_swamy
    [branch "master"]
            remote = origin
            merge = refs/heads/master
    

在开始处理存储库之前,不要忘记向 Git 介绍自己(即设置“user.name”和“user.email”配置变量;通常在每个用户的配置文件中)!

关于git - 只克隆 git 中的稳定分支和另一个分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1615488/

相关文章:

git rebase squash 搞乱了分支历史记录

php - 将 Git 与 Wordpress 结合使用

git - 如何读取 git-ls-tree 输出的模式字段

git - 将一个特定的 svn 分支单独克隆到 git 中,并单独使用该分支的版本历史记录

git - 机器人/蜘蛛会克隆公共(public) git 存储库吗?

Git分支文件位置

git - git branch、fork、fetch、merge、rebase 和 clone 有什么区别?

git - 可以配置 Composer 使用 http 而不是 git clone git@

git - 获取任意 git 工作副本并制作与远程分支完全相同的副本

linux - `git remote add` 抛出 fatal error