Как мне создать новое GitHub репо из ветки в существующем репо? - PullRequest
143 голосов
/ 02 марта 2012

У меня есть master и new-project ответвлений.А теперь я хотел бы создать новое репо с его мастером на основе ветви нового проекта.

Справочная информация: у меня есть один репозиторий, который содержит три независимых приложения.Это не началось таким образом.Первоначально в репо было только одно приложение.Однако со временем потребности бизнеса изменились.Одно приложение стало двумя (устаревшая версия и переписывание). Был добавлен веб-сервис.Отдельные ветви были использованы для содержания трех проектов.Тем не менее, они не делятся ни одним кодом.И поэтому было бы проще разделить их на свои собственные репозитории.

Ответы [ 7 ]

253 голосов
/ 02 марта 2012

Я начал с идеи @ user292677 и усовершенствовал ее, чтобы решить мою проблему:

  1. Создайте new-repo в github.
  2. cd в вашу локальную копию старого репозитория, из которого вы хотите извлечь, который настроен для отслеживания ветки new-project , которая станет new-repo мастер.
  3. $ git push <a href="https://github.com/accountname/new-repo.git" rel="noreferrer">https://github.com/accountname/new-repo.git</a> +new-project:master

Новый репозиторий Github закончен. Результат:

  • новый репозиторий Github с именем new-repo ,
  • , чей master соответствует старому репо new-project , с
  • вся история сохранилась.

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

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

В результате ранее существовавшая ветка site3a теперь также перемещается в новый репозиторий и будет выглядеть как rails3 . Это работает очень хорошо: на схеме сети показаны новые master и rails3 с полной историей и в их правильном отношении друг к другу.

Обновление 2013-12-07: использовал это с другим проектом и проверил, что этот рецепт все еще работает.

Обновление 2018-01-11: обновлен шаг 3. для использования рекомендации GitHub для протокола https. Рецепт все еще работает.

21 голосов
/ 06 декабря 2016

Обновление:

cd для локального репо, содержащего old_branch и:

$ git push https://github.com/accountname/new_repo.git +old_branch:master
9 голосов
/ 02 марта 2012
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, и все готово!
4 голосов
/ 23 июня 2017
  1. Создайте NEW_REPOSITORY в github.
  2. cd OLD_REPOSITORY
  3. git push https://github.com/accountname/NEW_REPO + master: master

И этовсе.(Примечание: история git сохранена)

Я попробовал ответ выше и нашел его недостаточно конкретным, так как он не указал + master: master, который мне нужен, чтобы он работал.Это прекрасно работает.

Источник (с моими изменениями, чтобы избежать проблем с ssh с github): Маурисио Айелло, бывший старший разработчик Java, https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a-branch-in-an-existing-repository

2 голосов
/ 11 декабря 2013

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

2 голосов
/ 02 марта 2012

Не уверен, что это хороший способ, но в любом случае это просто:

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

Затем создайте новый репо на github и нажмите его.

0 голосов
/ 23 ноября 2016

Небольшое дополнение к правильному ответу:

$ git push git@github.com: accountname / new_repo + old_branch: master

"git@github.com: accountname / new_repo" => получить из github выпадающее меню "Clone or download"

...