Питання Як клонувати певну гітську гілку? [дублікат]


На це питання вже є відповідь тут:

Ключ Git буде вести себе як копіювання дистанційного поточного робочого відгалуження на локальний.

Чи є спосіб клонувати окрему гілку самостійно, не перемикаючи гілки на віддалений сховище?


2100
2017-12-15 23:06


походження


@domokun Jorge додала свою відповідь через рік після Майкла. Тому часто трапляється, що найкраща відповідь додана після того, як інша відповідь вже була прийнята. (IOW, завжди хоча б скантуйте 3-4 відповіді на будь-яке питання.) - Ryan Ballantyne
@scud: якщо ви все ще перебуваєте, ви хочете виправити прийняту відповідь, щоб інші могли побачити її легше? - mikemaccana
Чому SO вимагає @Scud змінити відповідь? Після 5000 голосів загальне співтовариство має сказати те, що позначено як правильну відповідь. - gdbj
Змініть прийняту відповідь, будь ласка, так що модератори. - user1271772
Проголосуйте прийнятою відповіддю. Може, так, нарешті, зміниться, якщо це буде негативним. - user1271772


Відповіді:


Дивіться також інша відповідь що багатьом віддає перевагу.

Ви також можете захотіти переконатися, що ви розумієте різницю, на відміну від більшості розгніваних коментаторів і низьких частот. І різниця: закликаючи git clone -b branch url ти отримуєш все відгалужує і перевіряє один. Наприклад, це означає, що ваш репозиторій має документацію по 5кБ або гілку вікі та 5 гігабайтну інформацію. І всякий раз, коли ви хочете редагувати свою головну сторінку, ви можете завершити клонування 5 Гб даних.

Знову ж таки, це не можна сказати git clone -b це не спосіб досягти цього, це просто, що це не так завжди що ви хочете виконати, коли ви питаєте про клонування певної гілки.

Відповідь, яку я хотів би написати сьогодні, з огляду на сьогоднішній день

git clone --single-branch -b branch host:/dir.git

на момент написання оригінальної відповіді нижче, гіт не мав --single-branch варіант, але давайте збережемо це для повного задоволення злісних бджіл.

Відповідь настільки сильно не любив копірастерів:

git init
git remote add -t refspec remotename host:/dir.git
git fetch

240
2017-12-15 23:09



Дякую. Я зрозумів, використовуючи метод нижче. git clone <remote_repo> git checkout -b <wanted_branch> origin / <wanted_branch> git branch -D master - Scud
Я думаю так, і ви отримаєте [віддалене джерело] fetch = + refs / heads / (refspec): refs / remotes / origin / (refspec) instead of fetch = + refs / heads / *: refs / remotes / origin / * - Scud
цей простіше і доречніше stackoverflow.com/a/4568323/636762 - Syed Rakib Al Hasan
Хлопці, переконайтеся, що побачите реальну відповідь нижче. - BrainSlugs83
@Скуд, чи можете ви, будь ласка, приймати іншу відповідь, я трохи втомився від блискучих розумів, кожен намагався внести свою унікальну думку не на відміну від мільйонів перед ними. - Michael Krelin - hacker


git clone -b <branch> <remote_repo>

Приклад:

git clone -b my-branch git@github.com:user/myproject.git

З Git 1.7.10 і пізніше додайте --single-branch щоб запобігти вилученню всіх галузей. Наприклад, з гілкою OpenCV 2.4:

git clone -b opencv-2.4 --single-branch https://github.com/Itseez/opencv.git

6683
2017-12-31 05:36



pierr: Я не впевнений, чи відповідає це опис описаної вище проблеми, але це робить Відповідь на актуальне питання - як клонувати певну гілку сховища. Я проголосував за це, тому що це відповідь, я голубчав, коли я приїхав на цю сторінку. - Jaime Bellmyer
Це працює Вона вказує нову HEAD на вказану гілку, а не на HEAD-гілку у моєму проекті. Проте він все ж таки приносить все філії Див. Відповідь @ edmar-miyake. - cdunn2001
Дивіться цю відповідь для новин: stackoverflow.com/a/14930421/755257 - cbeleites
Він відповідає на опис проблеми, якщо додати команду --depth X. Якщо ви це зробите, він буде клонувати тільки вказану гілку та її останній вміст. - ramsvidor
Thx для --single-branch; git 2.5 знаходиться під час написання цього. Не турбуйтеся про старіші версії. - Bernhard Döbler


Клонувати гілку без отримання інших галузей:

mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH

222
2017-09-08 14:34



Гарне рішення. На старшій версії (у мене є 1.5.5.6), перед початком копіювання може знадобитися гітарний підрозділ - track $ ORGAN / $ BRANCH. - Johannes Thoma
Працює, а також витягує лише ті теги, що присутні на гілці, що я хотів. (Я дійсно хотів отримати багаторазовий філії, але лише вибрані; для цього цього вистачало неодноразово remote add і checkout як тут, то git remote rm origin очистити.) - Jesse Glick
Відповідь Хорхе Едуардо Кардони дає мені величезні сховища, за допомогою цього методу я отримую дуже чисті сховища. Дякую. - joshcomley
Ідеальне рішення для мілкого включення певного тегу git repo в інший проект. Рекомендую пропустити -f  з дистанційної команди git, потім використовуючи git fetch --depth=1 $BRANCH $TAG, потім git checkout FETCH_HEAD. Init нешкідливий, і міняючі теги автоматично оновлюють перевірені коди. - taranaki


Ось дуже простий спосіб зробити це :)

Клонувати сховище

git clone <repository_url>

Перерахуйте всі гілки

git branch -a 

Оформити замовлення на потрібну філію

git checkout <name_of_branch>

204
2017-07-14 09:42



Це переключило робочий каталог на правильну гілку, але я не можу натискати будь-які внесені зміни, тому що я не "в даний час в гілці". - Seppo Enarvi
Це було для мене рішення, оскільки я вже клонував "майстра". Я не знав, що зможу просто "виписати" віддалену гілку. - yazzer
Це, мабуть, правильний спосіб зробити це; найкраща практика - aaiezza
git checkout mybranchname, потім git getch done - Shohanur Rahaman
Таким чином, не клонувати лише вибрану гілку. Ця відповідь здається кращою: stackoverflow.com/a/7349740/3075243. Наприклад, якщо репо має багато філій, які є достатньо великими, ми не хочемо клонувати кожного з них. - Proustibat


git checkout -b <branch-name> <origin/branch_name>

наприклад, у моєму випадку:

 git branch -a
* master
  origin/HEAD
  origin/enum-account-number
  origin/master
  origin/rel_table_play
  origin/sugarfield_customer_number_show_c

Тому для створення нової філії, заснованої на моєму номері облікового запису номеру рахунку, я роблю:

git checkout -b enum-account-number origin/enum-account-number

Після натискання кнопки повернення відбувається наступне:

Branch enum-account-number set up to track remote branch refs/remotes/origin/enum-account-number.
Switched to a new branch "enum-account-number

"


69
2017-11-15 19:34



Зауважте, що це може бути корисно git pull origin перше, так що git branch -a може перелічити всі нові (поточні) віддалені галузі. - André Caron
Влучне зауваження. ймовірно git fetch краще, щоб автоматичне злиття не відбулося, однак. - dkinzer


Створіть гілку в локальній системі з таким іменем. наприклад, скажімо, ви хочете отримати назву гілки "філія-05142011"

git branch branch-05142011 origin/branch-05142011 

Це дасть вам повідомлення, як - "Філія гілка-05142011 налаштована для відстеження гілки віддаленої гілки-05142011 від походження".

Тепер просто перевірте філію, як показано нижче, і у вас є код -
git checkout branch-05142011


20
2018-05-15 19:20



Це також буде робити: git fetch origin [remote branch]: [new-local-branch] - PlanetUnknown
це правильно. Міяк (див. Нижче) показує, як це зробити, коли додано пульт дистанційного керування. - cdunn2001
Це має сказати: "PlanetUnknown має це право". - cdunn2001
@PlanetUnknown Дякуємо за git fetch origin [remote-branch]:[new-local-branch], Мені це подобається! - Jeaf Gilbert


git --branch <branchname> <url>

Але завершення bash не отримує цього ключа: --branch

Насолоджуйтесь.


11
2017-09-07 10:16