Как создать новое репо GitHub из ветки в существующем репо?

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

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

Ответ 1

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

  • Создайте new-repo в github.
  • cd к вашей локальной копии старого репо, из которого вы хотите извлечь, которое настроено для отслеживания ветки нового проекта, которая станет новым-репо мастер.
  • $ git push [email protected]:accountname/new-repo +new-project:master

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

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

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

$ git push [email protected]:accountname/new_repo +new-project:master +site3a:rails3

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

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

Ответ 2

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

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

Перередактировать: я только что понял его ветвь master, которую вы хотите установить, а не только ветвь "default". Так что...

  • В GitHub клон them/repo - you/repo.
  • Выполнить git clone [email protected]:you/repo.git
  • Запустите gitk.
  • [Возможно, вы захотите создать ветвь old-master, чтобы не потерять контроль над старыми коммитами.]
  • Найти последнюю фиксацию в ветке new-project, щелкните правой кнопкой мыши сообщение фиксации и выберите "Reset master branch to here". (Вы также можете сделать это в командной строке, используя git-reset, но я не понял правильный вызов.)

Следующее нажатие на ваш репозиторий GitHub необходимо выполнить с помощью параметра --force, но в противном случае вы сделали.

Если это ваш собственный репозиторий, вы делаете это, чтобы...

  • Запустить git clone [email protected]:you/orig.git
  • Запустить git clone orig copy
  • Как я описал выше, но из локального copy repo, reset ветвь master туда, где вы этого хотите.
  • Создайте пустой проект GitHub you/copy. Следуйте инструкциям в GitHub, чтобы настроить этот проект как удаленный для локальной версии copy, нажмите master, и вы сделали!

Ответ 3

Update:

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

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

Ответ 4

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

git clone -b new-project [email protected]:User/YourProject.git newProjcet

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

И это все. (Примечание: 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