Як створити нове репортаж GitHub з гілки в існуючому репо?


170

У мене є магістерські та новопроектні відділення. А тепер я хотів би створити абсолютно новий репо зі своїм майстром на базі галузі нового проекту.

Передумови: У мене є одне сховище, яке містить три незалежні програми. Це почалося не так. Спочатку в репо був лише один додаток. Однак з часом потреби бізнесу змінилися. Один додаток став двома (застаріла версія та переписування.) Додано веб-сервіс. Для утримання трьох проектів були використані окремі відділення. Однак вони не поділяють жодного коду. І тому було б простіше, щоб вони розділилися на власні репости.

Відповіді:


294

Я почав з ідеї @ user292677 і вдосконалив її, щоб вирішити свою проблему:

  1. Створіть new-repo в github.
  2. CD у вашу локальну копію старого репо, з якого ви хочете витягнути, яка створена для відстеження гілки нового проекту, яка стане майстром нового репо .
  3. $ git push https://github.com/accountname/new-repo.git +new-project:master

Нове ретро Github закінчено. Результат такий;

  • нове сховище Github з назвою new-repo ,
  • чий masterвідповідає новому проекту старого репо , с
  • вся історія збережена.

Насправді я виявив, що за допомогою цього методу я міг створити нове репо з ручним вибором гілок, перейменованих так, як я хотів:

$ git push git@github.com:accountname/new_repo +new-project:master +site3a:rails3

Результатом є те, що раніше існуюча гілка site3a тепер також переміщена до нового репо і буде відображатися як рейли3 . Це працює дуже добре: мережева схема показує нового ведучого та рейки3 з повною історією та правильним співвідношенням один з одним.

Оновлення 2013-12-07: Використовували це для іншого проекту та перевіряли, що цей рецепт все ще працює.

Оновлення 2018-01-11: оновлений крок 3. для використання рекомендації GitHub для протоколу https. Рецепт все ще працює.


Привіт @Dogweather, дякую за те, що поділився цим. чи можете ви пояснити, що відрізняється між вашим методом та змінити віддалений URL-адреса початківця, перейдіть до нового методу репо?
Вінсент

5
Догвезер, я використав ваше рішення більше, ніж я пам'ятаю. Дякую! Мені довелося спочатку перевірити old_branch, перш ніж це працювало для мене
Bjorn Theart

3
зауважте, що це не буде копіювати теги. Я вважаю, що вам може знадобитися --follow-tagsдля цього.
Фактор Містик

1
Зауважте, що вам не потрібно створювати репо в Github, ви можете просто pushперейти на локальну (тобто git initзамість Github> New> ...)
OJFord,

1
Я не хочу переносити всю свою історію фіксацій в нову репо-версію, я просто хотів скопіювати комітети, що належать до дочірнього сховища. Чи можливо це ??
Арбаз Різві


9
git clone -b new-project /path/to/repo /new/repo/path

Редагувати: У GitHub ви можете "роздрібнити" репо, а потім перейти на вкладку Адміністратор у своєму клоні. Під "Назва сховища" та "Видимість" стоїть "Відділення за замовчуванням" зі спадним меню гілок. Виберіть new-project.

Повторне редагування: я щойно зрозумів, що masterви хочете встановити гілку, а не просто гілку "за замовчуванням". Так…

  • На GitHub клонуйте them/repoдо you/repo.
  • Біжи git clone git@github.com:you/repo.git
  • Початок gitk.
  • [Можливо, ви захочете створити old-masterфілію, щоб не втратити слід від старих комісій.]
  • Знайдіть останню фіксацію у new-projectгілці, клацніть правою кнопкою миші повідомлення про фіксацію та виберіть "Скинути головну гілку до тут". (Ви також можете це зробити в командному рядку, використовуючи git-reset, але я не з'ясував правильного виклику.)

Наступне натискання на ваш репо GitHub потрібно буде виконати з --forceможливістю, але в іншому випадку ви все зробите.

Якщо це один із власних репостів, ви робите це для ...

  • Біжи git clone git@github.com:you/orig.git
  • Біжи git clone orig copy
  • Як я описав вище, але всередині місцевого copyрепо, скиньте masterгілку туди, куди вам потрібно.
  • Створіть порожній проект GitHub you/copy. Дотримуйтесь вказівок на GitHub, щоб налаштувати цей проект як віддалений для вашої локальної версії copy, натисніть master, і ви закінчили!

Хм! Я не впевнений, як зробити перший крок: клонування репо в github. Я не думаю, що це можливо.
Dogweather

@Dogweather, це називається "розщеплення" на GitHub; Я відредагував свою відповідь для наочності.
JC Salomon

Мені не вдалося розібрати репо в одному обліковому записі. Ви самі пробували це?
Dogweather

5
  1. Створіть NEW_REPOSITORY в github.
  2. cd OLD_REPOSITORY
  3. git push https://github.com/accountname/NEW_REPO + master: master

І це все. (Примітка: історія git збереглася)

Я спробував відповідь вище і виявив, що вона недостатньо конкретна, оскільки вона не вказала + master: master, що мені потрібно, щоб вона працювала. Це чудово працює.

Джерело (з моїми модифікаціями, щоб уникнути проблем із ssh з github): Mauricio Aiello, колишній розробник Java, https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a -розгалуження в існуючому сховищі


Це насправді корисніше, ніж прийнята відповідь. Це працює навіть у ситуаціях, коли Git скаржиться на помилки src refspec, коли не може натиснути старе на нове сховище.
Інформагік

2

Не впевнений, чи це хороший спосіб, але все одно це легко:

git clone -b new-project git@github.com:User/YourProject.git newProjcet

Потім створіть нове репо на github і натисніть його.


2

Пам’ятаючи, що коли ви просто створюєте нове репо, ви втрачаєте посилання на старе та ускладнюєте підтримувати будь-яке оновлення вихідного проекту, синхронізованого з новим. Можливо, не краще роздрібнити репо?


0

Невелике доповнення до правильної відповіді:

$ git push git@github.com: ім'я акаунта / new_repo + old_branch: master

"git@github.com: accountname / new_repo" => отримати з github "Клонувати або завантажувати" спадне меню

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