Клонировать только стабильную и еще одну ветвь в git?

Я только начинаю с git, и у меня есть вопрос. В моем приложении работают 10 других разработчиков, каждый из которых имеет свою собственную ветку, например dev_XXXXX. Итак, если я делаю клон репозитория, все его коды будут скопированы на мою машину? В таком случае я этого не хочу. Предположим, что моя ветка dev_swamy, как я тогда клонирую только стабильную ветвь и dev_swamy? Благодарю.

Ответы

Ответ 1

По умолчанию git clone будет извлекать все ветки, но эти ветки будут храниться как ветки удаленного отслеживания: например, ветка 'dev_XXXXX' будет храниться как 'origin/dev_XXXXX' (с 'refs/remotes/origin/dev_XXXXX 'как полное имя). Эти ветки удаленного отслеживания не будут отображаться в выводе git branch: вам понадобится git branch -r для отображения ветвей удаленного отслеживания (или git branch -a для отображения всех ветвей). Если эти ветки не слишком сильно расходятся с основной линией, они не занимают слишком много места на диске в репозитории. Поэтому я не понимаю, почему вы хотите клонировать только выбранные ветки.

Тем не менее, если вы хотите иметь клон с двумя выбранными ветвями, вы можете сделать это следующим образом:

  • Сначала создайте новый пустой репозиторий

    $ mkdir repoclone
    $ cd repoclone/
    $ git init
    Initialized empty Git repository in /home/user/repoclone/.git/
    
  • Затем добавьте свой репозиторий под именем "origin" (так же, как "git clone" назовет его), запрашивая отслеживание только двух ветвей: "master" и "dev_swamy", используя " git удаленная". Убедитесь, что он был добавлен правильно.

    $ git remote add -t master -t dev_swamy origin [email protected]:repo.git
    $ git remote 
    origin
    $ git remote show origin
    * remote origin
      Fetch URL: [email protected]:repo.git
      Push  URL: [email protected]: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)
    

    Если стабильная ветвь называется "стабильной", а не "хозяином", вы, конечно, должны изменить вышеприведенный пример. Также есть опция -m <branch>, если вы хотите, чтобы указанная ветка была ветвью по умолчанию на удаленном компьютере.

  • Извлечь из "origin" (вы можете сделать это также, используя опцию -f для "git удаленный добавление" выше):

    $ 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 [email protected]:repo.git
     * [new branch]      master     -> origin/master
     * [new branch]      dev_swamy -> origin/dev_swamy
    From [email protected]:repo.git
     * [new tag]         v1.0       -> v1.0
     * [new tag]         v1.0.1    -> v1.0.1
     * [new tag]         v1.1       -> v1.1
    
  • Настройте локальную ветвь "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.

  • Теперь вы можете увидеть, как выглядит файл конфигурации. Вы можете получить точно такой же результат, отредактировав файл .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 = [email protected]: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', обычно в конфигурационном файле для каждого пользователя)!

Ответ 2

Если вы клонируете, все ревизии во всех ветвях клонируются, но клонированный репозиторий по умолчанию проверяет мастер.

Просто удаление выбранных ветвей сложнее, так как git действительно не думает, что вы должны работать таким образом. Вы должны вручную вывести ветки:

mkdir repoclone
cd repoclone
git init
git remote add origin git://remote/url
git fetch origin master:master
git fetch origin dev_XXX:dev_XXX

Выше было то, что я знал. Однако, если вы хотите настроить репозиторий git, который работает нормально, просто имеет более узкое представление о его удаленных ветких? Вы можете сделать это довольно легко:

mkdir repoclone
cd repoclone
git init
git remote add origin git://remote/url

# now open .git/config for editing in your editor
# replace the following line (grab all remote branches)
fetch = +refs/heads/*:refs/remotes/origin/*

# replace with lines listing exactly which branches you want
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/dev_XXX:refs/remotes/origin/dev_XXX

# save the file, now run

git fetch

Ответ 3

Я думаю, что более важным вопросом является то, что другие будут настаивать, а не то, что вы будете клонировать или тянуть. Поскольку каждый разработчик работает над своей собственной веткой, возникает вопрос, как вы получаете общую базу кода. Разве разработчики объединяют свои ветки для освоения? И затем они толкают свою измененную ветвь мастера в центральный репозиторий? Если это так, у вас нет возможности вытащить ветки других разработчиков.

Если это не так, я не вижу, как вы можете создать действующую команду.

И как я наконец подумал: мне было бы интересно узнать, почему вы не захотите клонировать ветки других разработчиков в свой репозиторий?

Ответ 4

Другой способ сделать это - избежать прямого клона, но вместо этого вручную добавить удаленный доступ с помощью специального набора исправлений refetch.

например.

mkdir myclone
cd myclone
git init

git remote add origin url://origin.repo

# Add fetch rules for the branches that we want to track
git config remote.origin.fetch +refs/heads/master:+refs/remotes/origin/master
git config --add remote.origin.fetch +refs/heads/dev_swamy:+refs/remotes/origin/dev_swamy

# fetch now fetches just what we need, subsequently it will do incremental fetches
git fetch

# Creating local branches tracking the remote branches
git checkout -b master origin/master
git branch dev_swamy origin/dev/swamy