Как создать новое репо 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