Как мне создать новое GitHub репо из ветки в существующем репо?
У меня есть мастер и новые проекты филиалов. А теперь я хотел бы создать совершенно новое репо со своим мастером на основе ветки нового проекта.
Фон: у меня есть один репозиторий, который содержит три независимых приложения. Это не началось таким образом. Первоначально в репо было только одно приложение. Однако со временем потребности бизнеса изменились. Одно приложение стало двумя (устаревшая версия и переписывание). Был добавлен веб-сервис. Отдельные ветви были использованы для содержания трех проектов. Тем не менее, они не делятся ни одним кодом. И поэтому было бы проще разделить их на свои собственные репозитории.
9 ответов
Я начал с идеи @user292677 и усовершенствовал ее, чтобы решить мою проблему:
- Создайте новый репо в github.
- Перейдите в вашу локальную копию старого репозитория, из которого вы хотите извлечь, который настроен для отслеживания ветки нового проекта, которая станет мастером нового репо.
$ 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
- Создайте NEW_REPOSITORY в github.
- cd OLD_REPOSITORY
- 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 и нажмите его.
Если вам нужна другая ветка вместо основной, просто сделайте это:
- Создать новый репозиторий на Github
- CD в старый репозиторий (в моем случае я нахожусь в старом репозитории и ветке, которую хочу скопировать)
- 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, просто сделайте несколько простых шагов
Проверьте бренд, который вы хотите клонировать, в качестве нового репозитория.
Откройте терминал этого бренда, нажав кнопку терминала на панели инструментов в SourceTree.
Дайте команду терминалу
$ git push https://github.com/accountname/new_repo.git
Команда git на основе ответа Алексея Кислицина . Благодарим Вас за отправку исправленного варианта.