Як я можу "скасувати" клон - єдину гілку?


102

Я клонував репо за допомогою

git clone -b <branch name> --single-branch <github url> <target directory>

Це клонувало ТІЛЬКО цю гілку, але тепер я хочу перейти до майстра та інших гілок. Чи є якийсь спосіб, крім того, щоб очистити його і почати клонувати решту репо, що я можу скасувати налаштування --sele-гілка?

Відповіді:


147

Ви можете сказати Git витягнути всі гілки так:

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

Якщо ви заглянете все .git/config, це буде виглядати приблизно так:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = false
[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true

Я порівняв це з повним клоном, і побачив, що єдиною різницею був "підбір" під [remote "origin"].

Примітка. У мене працює версія Git 1.8.2. Параметри конфігурації можуть бути змінені, якщо ви використовуєте старішу версію Git. Якщо мої команди не працюють, я б рекомендував переглянути, .git/configщоб побачити чи щось подібне.


2
Просто хотів запропонувати вам особливу подяку, тому що я дуже багато читав і гугла, і не зміг натрапити на щось подібне.
danieltalsky

2
Радий допомогти. Інструмент gitкомандного рядка неймовірно потужний (насправді більшість команд реалізовані в плані інших команд), тому ви можете виконати з ним багато всього, як тільки зрозумієте, як складається сховище (в основному, як .gitпрацює папка ).
sarahhodne

Це не спрацювало для мене - після запуску цих команд git show-ref tagsвсе одно не виходить.
felixfbecker

1
Зауважте, що це рішення також буде працювати, якщо гілка була дрібно клонована, використовуючи також такий синтаксис, який відчуває той же недолік, описаний ОП:git clone --depth=1 --branch branchname git@github.com:foobar/repo.git destinationpath
danemacmillan

1
Ого, це далеко не інтуїтивно! Як це не дивно, Git не має команди для цього. Так, у мене це працює ... і тепер я знаю і про конфігураційний файл int he .git каталог!
kashiraja

61

Якщо ви хочете додати одну гілку, ви можете зробити наступне:

git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]

Працює з git версії 1.9.1


1
Я закоханий у тебе
користувач1760150

4
Це додає кілька fetch =рядків до .git / config, дуже зручно, коли ви хочете перемикатися між двома гілками на віддаленому, але не отримувати цілу купу інших гілок. Дякую!
Террі Браун

4

Щоб додати ще одну віддалену гілку до мого локального сховища, клонованого за допомогою --single-branch, для мене працює наступне:

git remote set-branches --add origin [remote-branch]
git fetch
git checkout [remote-branch]

Ви також можете використовувати символи для [remote-branch], наприклад,

git remote set-branches --add origin release-1.*
git fetch
git checkout release-1.5

Це працює за допомогою git версії 2.21.1 . Інші відповіді, які пропонують зробити git fetch origin [remote-branch]:[local-branch], не спрацювали, оскільки це створює локальну гілку в нерозглянутому стані. Під час запуску git pullспершу спробував ще раз об'єднати всі документи віддаленої гілки з моєю локальною.


2
Вдруге я повертаюся до цієї відповіді. дуже корисний. Дякую!
хрест

1
Найкорисніша відповідь
Денис Іцкович

1
третій раз lol
бог


1

Просто додайте оригінал репо як новий пульт і працюєте там?

git remote add path/to/myrepo myNewOrigin
git fetch myNewOrigin

Ви навіть можете видалити свій поточний пульт 'origin' та перейменувати 'myNewOrigin' на 'origin', якщо ви цього хочете.

Звідти можна витягнути / злити / відновити.


0

Просто змінити .git/configфайл вашого локального сховища, рядок fetchз [remote origin] section.

Перед тим, як щось подібне

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master

Після буде так

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

0

Я спочатку застосував відповідь Домініка Павлака, і це спрацювало. Але я не зміг здійснити будь-яких подальших змін, після того як я вніс більше коду у свою нову гілку.

Існує ще один спосіб скидання single-branch, який повністю не згадується тут:

git remote remove origin
git remote add origin git@gitlab.com:{yourProject}/{yourRepo}.git
git branch --set-upstream-to=origin/{yourBranch}  {yourBranch}
git pull

Це скидає все до оригіналу.


0

Для мене працювали:

git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.