как создать новый репозиторий git из существующего - PullRequest
65 голосов
/ 23 марта 2012

У меня есть удаленный репозиторий git, который действительно заменил все, что у нас было в другом старом SCM.За эти годы в репозиторий было добавлено много проектов и продуктов.

В этом репо есть ветка, соответствующая продукту, который меня интересует. Я хочу создать новый репозиторий git из этой веткитолько, не очень обеспокоены потерей истории.

Является ли Git Remote добавить решение?Я хочу, чтобы оба этих хранилища находились на одном сервере.

Мысли?

Ответы [ 3 ]

66 голосов
/ 19 февраля 2013

Чтобы создать новый репозиторий Git из существующего репозитория, обычно нужно создать новый репозиторий bare и перенести одну или несколько веток из существующего в новый репозиторий.

Следующие шаги иллюстрируют это:

  1. Создать новый репозиторий. Он должен быть голым , чтобы вы могли нажать на него.

    $ mkdir /path/to/new_repo
    $ cd /path/to/new_repo
    $ git --bare init

    Примечание : убедитесь, что ваш новый репозиторий доступен из существующего репозитория. Есть много способов сделать это; давайте предположим, что вы сделали его доступным через ssh://my_host/new_repo.

  2. Нажмите ветку из вашего существующего хранилища. Например, скажем, мы хотим вытолкнуть ветку topic1 из существующего хранилища и назвать ее master в новом хранилище.

    $ cd /path/to/existing_repo
    $ git push ssh://my_host/new_repo +topic1:master

Этот прием позволяет сохранить историю от существующей ветви.

Примечание: новый репозиторий фактически является новым удаленным репозиторием. Если вы хотите работать с новым хранилищем, вы должны клонировать его. Следующее будет клонировать новое хранилище в локальный рабочий каталог с именем new_repo:

$ git clone ssh://my_host/new_repo

В этом примере, когда вы клонируете новый репозиторий, вы увидите, что ветвь master является копией ветки topic1 старого репозитория.

17 голосов
/ 23 марта 2012

Потяните ветку, как обычно, а затем переместите ветку в новый репозиторий, который вы создали с помощью git init.Вы бы использовали код, который выглядит примерно так:

git push url:///new/repo.git TheBranchFolder

Этот метод также сохраняет все ваши предыдущие изменения, если это плюс для ситуации.

17 голосов
/ 23 марта 2012

Если вы не беспокоитесь о потере истории, выполните git checkout mybranch, а затем скопируйте содержимое каталога в другую папку.В этой папке удалите папку .git и затем:

git init; git commit -a -m "Imported from project Y"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...