Як отримати лише одну гілку віддаленого сховища Git?


247

Я хотів би схопити одну гілку (не всі) віддаленого сховища та створити локальну гілку відстеження, яка може відслідковувати подальші оновлення цієї віддаленої гілки. Інші гілки у віддаленому сховищі дуже великі, тому я хотів би уникнути їх отримання. Як це зробити?

Редагувати: Я сам це зрозумів, але StackOverflow відмовляється мені дати відповідь як відповідь, тому я поставлю його тут у питанні.

Для git віддаленого додавання використовується опція -t, наприклад:

git remote add -t remote-branch remote-name remote-url

Ви можете використовувати кілька " -t branch" варіантів, щоб схопити кілька гілок.


3
Клон git отримує весь сховище, включаючи всі гілки. Ви можете робити неглибокі копії, але це дозволяє лише вказати кількість змін, а не які гілки.
Ікке

Впевнені, що можете відповісти на власне запитання, чому ви не можете?
CharlesB

2
Я думаю, що ОП означало, що він тоді не міг відповісти. StackOverflow встановлює мінімальний час, який повинен пройти, перш ніж ви зможете відповісти на власне запитання.
Ларс Нордін

1
Привіт ОП, може бути добре зараз додати свою відповідь. Таким чином ми можемо проголосувати за нього (і порівняти з іншими відповідями)
lulalala

3
Ваша команда git remote add - додавання віддаленої гілки, яка не має нічого спільного з отриманням гілки!
Кріс Халкроу

Відповіді:


220
git fetch <remote_name> <branch_name>

Працювали для мене.


14
Щойно дізналися, що отримана гілка доступна як FETCH_HEADпісля отримання. Дякую!
Крістоф

4
потім git checkout FETCH_HEADдо каси
d9k

Просто і легко.
gsumk

Як отримати <remote_name>?
mrgloom

@mrgloom у більшості випадків remote_nameє origin. наприклад:git fetch origin <branch_name>
Saahithyan Vigneswaran

67

Один із способів:

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

Однак це не налаштовує стеження.

Для отримання додаткової інформації дивіться документацію щодо отримання git .

EDIT : Як @ user1338062 зазначає нижче : якщо у вас ще немає локального клону сховища, куди ви хочете додати нову гілку, але ви хочете створити свіжий локальний сховище, тоді git clone --branch <branch_name> --single-branch <repo_url>це рішення пропонує коротше рішення.


1
Дякую, це робить те, що просив оператор. Щоб зробити відстеження гілки git checkout -t <віддалена гілка> / <назва гілки> <назва гілки>
ken

7
Якщо я просто це роблю git checkout <branchname>, я бачу, що git автоматично встановлює гілку відстеження, якщо єдиною гілкою з цим ім'ям є віддалена гілка.
bukzor

1
це було єдине, що працювало на мене. незважаючи на те, що конфігурація була встановлена ​​лише для отримання рефлексу для однієї гілки, вона все одно тягнула refs до всіх гілок, використовуючи отримання або витягнення. ця команда витягнула тільки гілку, яку я хотів, щоб репо було лише 500 кбіт, а не 5 Мб. Дякую.
herostwist

1
Ця відповідь, ймовірно, застаріла. git cloneтепер підтримує --branchі --single-branchваріанти, я розмістив відповідь з демонстрацією .
user1338062

3
@ user1338062 Це все-таки справедливо, якщо ви хочете отримати нову гілку (не всі гілки, що використовують git fetch) після клонування
rubyprince

35

Я знаю, що вже багато відповідей, але це кроки, які працювали для мене:

  1. git fetch <remote_name> <branch_name>
  2. git branch <branch_name> FETCH_HEAD
  3. git checkout <branch_name>

Вони ґрунтуються на відповіді @Abdulsattar Mohammed, коментарі @Christoph на цю відповідь, а також на інших запитаннях та їх відповідях:


1
Найкорисніша відповідь тут ІМО
Даніель Холмс

31

Щоб оновити існуючий віддалений для відстеження конкретних гілок, використовуйте:

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

Від git help remote:

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.

1
Дивно, що я був у --single-branchсховищі і не зміг завантажити додаткові гілки пізніше. Дякую!
Яджо

22

Один із способів зробити це:

в .git / config вилучення для віддаленого репо має бути встановлено для отримання будь-якої гілки:

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

для отримання віддаленої гілки:

git fetch origin branch-name

щоб створити локальну гілку 'ім'я гілки', встановлену для відстеження віддаленої гілки 'назва-гілка' від походження.

git checkout -b branch-name origin/branch-name

перерахувати всі галузі

git branch -a

16

Скопійовано з публікації автора:

Використовуйте -tопцію git remote add, наприклад:

git remote add -t remote-branch remote-name remote-url

Ви можете використовувати кілька -t branchваріантів, щоб захопити кілька гілок.


10
Чому ми говоримо, чому ти відповідаєш наявною відповіддю в тій самій нитці?
Боуен

13

Якщо ви хочете змінити типові параметри для "git pull" та "git fetch", щоб отримати лише певні гілки, тоді ви можете редагувати .git / config так, щоб віддалений конфігурація виглядав так:

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

Це за замовчуванням отримає лише майстер із походження. Докладніше: https://git-scm.com/book/en/v2/Git-Internals-The-Refspec

EDIT: Щойно зрозумів, що це те саме, що параметр -t робить для віддаленого додавання git. Принаймні, це хороший спосіб зробити це після додавання пульта, якщо ви не хочете видалити пульт та додати його знову за допомогою -t.


1
Посилання progit.org/book/ch9-5 перейшло на git-scm.com/book/en/Git-Internals-The-Refspec
тут

8

Для повноти, ось приклад команди для нового замовлення:

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

5

версія git: 2,74

Ось як я це роблю:

git remote add [REMOTE-NAME] [REMOTE-URL]
git fetch [REMOTE-NAME] -- [BRANCH]

4

версія git 2.16.1.Windows.4

Достатньо лише зробити git fetch remoteRepositoryName branchName (eg: git fetch origin my_local_branch) . Виконання буде зроблено, і буде створено нове місцеве відділення з такою ж назвою, а відстеження буде встановлено у віддаленому відділенні.

Потім виконайте git checkout branchName


1
філія не відображатиметься, git branchпоки ви не зареєструєтесь в ній
commonpike

3

Мої обхідні шляхи:

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

якщо у вас немає локального клону:

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

3
  1. Виберіть будь-яке, <remote_name>що хочете використовувати (сміливо використовуйте origin та пропустіть крок 1.)
  2. git remote add <remote_name> <remote_url>
  3. git fetch <remote_name> <branch>
  4. Виберіть будь-яке, <your_local_branch_name>що хочете використовувати. Може бути те саме, що <branch>.
  5. git checkout <remote_name>/<branch> -b <your_local_branch_name>

Сподіваюся, що це допомагає!


2

Відповідь насправді залежить від поточного переліку галузей відстеження у вас. Ви можете отримати певну гілку з віддаленого, git fetch <remote_name> <branch_name> лише якщо вона вже є у списку гілок відстеження (ви можете це перевірити git branch -r).

Припустимо, я клонував віддалений за допомогою опції --single-branch раніше, і в цьому випадку єдина в мене гілка відстеження - це "клонована". Мене трохи збивають з пантелику поради ради налаштувати git config вручну, а також набравши текстgit remote add <remote_name> <remote_url> команд. Оскільки "git remote add" встановлює новий віддалений, він, очевидно, не працює з існуючим віддаленим сховищем; надання опцій "-t гілка" мені не допомогло.

У випадку, якщо пульт існує, а гілка, яку ви хочете отримати, існує в цьому віддаленому:

  1. Перевірте, git branch -rчи можна бачити цю гілку як гілку відстеження. Якщо ні (як у моєму випадку з одним клоном гілки), додайте цю гілку до списку гілок відстеження за допомогою "git віддалених наборів гілок" з опцією --add:

    • git remote set-branches --add <remote_name> <branch_name>
  2. Тепер ви можете отримати конкретну гілку (дублюйте тут інші відповіді):

    • git fetch <remote_name> <branch_name>
  3. Створіть і оформить нову гілку з "checkout --track", якій буде надано таке ж "ім'я гілки", як і гілка відстеження:

    • git checkout --track <remote_name>/<branch_name>

0

Найпростіший спосіб зробити це

  git fetch origin <branch> && git checkout <branch>

Приклад: Я хочу отримати гілку uat від походження та перейти до цього як поточної робочої гілки.

   git fetch origin uat && git checkout uat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.