Получить конкретную ветку, используя git


19

Я хочу скачать исходный код из ветки master-next, используя git, как описано в вики Xilinx .

Я попробовал это:

#git clone git://github.com/Xilinx/u-boot-xlnx/tree/master-next.git

Initialized empty Git repository in /home/Hannan/master-next/.git/
fatal: remote error:
Xilinx/u-boot-xlnx/tree/master-next is not a valid repository name
Email support@github.com for help

Даже это не удалось

# git clone git://github.com/Xilinx/tree/master-next/u-boot-xlnx.git
Initialized empty Git repository in /home/Hannan/u-boot-xlnx/.git/
fatal: remote error:
Xilinx/tree/master-next/u-boot-xlnx is not a valid repository name
Email support@github.com for help

Команда, которая работает:

 git clone git://github.com/Xilinx/u-boot-xlnx.git

Но как я узнаю, что это действительно вызовет ветку master-next, а не master ? Как правильно выбрать конкретную ветку, используя git?

Я использую RHEL 6, доступ через PuTTY.

Ответы:


16

Как сообщается в сообщении об ошибке, git cloneожидается git-репозиторий. Вы не можете «добавить» название ветви в путь, как это. Смотрите ветки в git .

Вы можете клонировать одну ветку (и ее историю): git clone <url> --branch <branch> --single-branch

См git help clone.

Но команда клонирования, которую вы выполнили, дала вам копию всего хранилища, вы можете увидеть существующие ветки с ними git branchи более подробную информацию о них git show-branch.

Переключитесь на нужную вам ветку git checkout branch-name.

Первые главы книги Pro Git (доступны онлайн) содержат более подробную информацию об основных командах.


«Команда клона, которую вы выполнили, дала вам копию всего хранилища». Все хранилище означает, что обе ветви объединены?
user2799508

Нет, они не объединены. Ветвь в git не является копией всего каталога, как описано здесь .
Лейаз

Я сделал следующее: «git clone -b master-next github.com/Xilinx/u-boot-xlnx.git » не так ли?
user2799508

Вам больше не нужен клон. Команда, которую вы указали в своем вопросе, дала вам хранилище со всеми ветками. Но это тоже правильно. Это эквивалентно выполнению git checkout master-nextпосле клонирования.
Лейаз

13

Эта команда должна работать:

$ git fetch origin [branch]

Приведенная выше команда извлекает только метаданные из удаленного хранилища, но не объединяет источники.

Если вы хотите получить и объединить источники, команда будет:

$ git pull origin [branch]

Будьте осторожны с веткой, в которой вы выполняете команду слияния. Это будет где источники сливаются.


Ваш ответ технически правильный, но я думаю, что он мог бы извлечь пользу из некоторой грамматической проверки / переписывания.
Сами Лейн

это работает хорошо
THX

4

Репозитории git содержат все ветки (но сжатые и имеют только различия, поэтому редко имеют размер).

Таким образом, вы можете клонировать весь проект, как вы сделали успешно. Это стандартный способ получить хранилище, даже если вас интересует только одна ветка.

Структура .git будет включать все ветки, сделанные в этом хранилище.

Чтобы использовать определенную ветвь, сделайте. git checkout [branch_name] Если ветвь существует, файлы будут доступны локально ( точнее , текущие файлы в каталогах проекта).

git status затем покажет, какая ветвь является текущей веткой, например:

Согласно Лейазу, можно клонировать конкретную ветку. На практике я никогда не делал этого или видел, как другие используют это. Что касается дальнейшего исследования, я вижу, что оно относительно новое, добавлено в git 1.7.10 (апрель 2012 г.): опция 'git clone learn --single-branch' для ограничения клонирования одной ветвью (сюрприз!); теги, которые не указывают на историю ветки, не выбираются. Например:

git clone -b master-next --single-branch git://github.com/Xilinx/

введите описание изображения здесь Здесь, для моего приложения "компоновщик" я проверяю филиал v3.0.10


1
Я никогда этого не делал, я вспомнил, видел вариант. Я предполагаю, что это редко используется, поскольку дополнительные ветви являются "дешевыми" по размеру.
Лейаз
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.