2012-03-23 4 views
48

У меня есть удаленный репозиторий git, который действительно заменил все, что у нас было в другом более старом SCM. На протяжении многих лет в хранилище было добавлено много проектов и продуктов.Как создать новый репозиторий git из существующего

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

Является ли git удаленным решением? Я хочу, чтобы оба этих репозитория были на одном сервере.

Мысли?

ответ

54

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

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

  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

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

+6

Если вы будете регулярно нажимать на удаленное репо, это, вероятно, хороший совет для «git remote add origin ssh: // my_host/new_repo'. Таким образом, вы просто выполняете «git push origin [branchname]». При использовании UNC-файлов (например, для windowsshares) введите имя удаленного источника для них следующим образом: 'git remote add origin" // имя_сервера/myapp/"' –

+1

спасибо: 'bare' был тем, что мне нужно было заставить его работать. –

13

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

git init; git commit -a -m "Imported from project Y" 
+1

сохранит ли он историю фиксации исходного репо? –

+11

@MikeGraf: Нет, как указано в первой части первого предложения в ответе: * «Если вас не беспокоит потеря истории ...» * –

+1

Возможно, вам придется удалить/изменить .gitignore, иначе указанная выше команда оставит потенциально важные файлы во время фиксации. – Dave

15

СВЕСТИ ветвь, как нормальный, а затем подтолкнуть отрасль на новый репозиторий, который вы создали с помощью git init. Вы должны использовать код, который выглядит примерно так:

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

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

+0

Я использую доступ ssh к моему репо, могу ли я использовать это вместо URL-адреса в вашем ответе? – reza

+0

Вы должны уметь, да. – JustinDoesWork

+0

reza: да, подумайте о URL-адресе ssh как о другом типе URL-адреса. – amcnabb