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

У меня есть мастер и новые проекты филиалов. А теперь я хотел бы создать совершенно новое репо со своим мастером на основе ветки нового проекта.

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

9 ответов

Решение

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

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

Шаг 3. использует рекомендуемый протокол https. В качестве альтернативы, если у вас настроены ssh-ключи, вы можете сделать: $ git push git@github.com:accountname/new-repo +new-project:master

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

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

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

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

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

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

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

Обновить:

перейдите в локальный репозиторий, содержащий old_branch и:

$ git push https://github.com/accountname/new_repo.git +old_branch:master
  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

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, и вы сделали!

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

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

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

Если вам нужна другая ветка вместо основной, просто сделайте это:

  1. Создать новый репозиторий на Github
  2. CD в ​​старый репозиторий (в моем случае я нахожусь в старом репозитории и ветке, которую хочу скопировать)
  3. git push https://github.com/your_username/new-repo.git +branch_from_the_old_repo:the_main_or_whatever_branch_from_the_new_repo

Я скопировал ветку из моего старого репозитория в новый репозиторий (она была перенесена в другую ветку вместо основной, это зависит от того, что вы вводите после двоеточия (ЖИРНАЯ часть на шаге 3))

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

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

$ git push git@github.com: имя учетной записи / new_repo + old_branch: master

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

Если вы влюблены в SourceTree, просто сделайте несколько простых шагов

  1. Проверьте бренд, который вы хотите клонировать, в качестве нового репозитория.

  2. Откройте терминал этого бренда, нажав кнопку терминала на панели инструментов в SourceTree.

  3. Дайте команду терминалу$ git push https://github.com/accountname/new_repo.git

Команда git на основе ответа Алексея Кислицина . Благодарим Вас за отправку исправленного варианта.

Другие вопросы по тегам