Как продублировать репозиторий git? (без разветвления)

117

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

Я новичок в git, и было бы здорово, если бы кто-нибудь мог мне с этим помочь.

ковбой Бибоп
источник
5
не уверен, но я думаю, вы могли бы просто клонировать его, а затем использовать git config remote.origin.url git: //new.url/proj.git, чтобы установить remote.origin для вашего нового представителя.
Rufinus
ya ссылка, которую я только что опубликовал, делает что-то в этом роде.
nbz 07
@rudinus Я так и сделал. Спасибо.
cowboybebop 07

Ответы:

205

См. Https://help.github.com/articles/duplicating-a-repository

Укороченная версия:

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

mkdir foo; cd foo 
# move to a scratch dir

git clone --bare https://github.com/exampleuser/old-repository.git
# Make a bare clone of the repository

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
# Mirror-push to the new repository

cd ..
rm -rf old-repository.git  
# Remove our temporary local repository

ПРИМЕЧАНИЕ: приведенное выше будет отлично работать с любым удаленным репозиторием git, инструкции не относятся к github

Вышеупомянутое создает новую удаленную копию репо. Затем клонируйте его на свою рабочую машину.

Ларри К.
источник
2
Что произойдет, если старый и новый репозитории будут иметь одно и то же имя (не один и тот же URL-адрес git). Я просто Jeremy.gitJeremy.git
клонируюсь
Это не будет точной копией. Вопросы не передаются.
Slam
Сохраняет ли это историю?
Thomas
@Thomas Я только что сделал это, и да, это сохранило всю мою историю в копии. Обратите внимание, что после того, как вы нажмете и cd в новое репо, там по-прежнему ничего нет, потому что вы нажали на пульт, поэтому вам нужно сделать pull
PfunnyGuy
7
Чтобы этот ответ работал с GitHub, нужно сначала создать новый репозиторий на GitHub.
Alex
23

Вы также можете использовать git-copy .

Установите его с помощью Gem,

gem install git-copy

затем

git copy https://github.com/exampleuser/old-repository.git \
    https://github.com/exampleuser/new-repository.git
Quanlong
источник
1
Как вообще установить гем? Это кажется наиболее простым решением. Upvoted!
saran3h
Обычно это часть установки Ruby. На Ubuntu делайте sudo apt install ruby.
вред
10

Если вы копируете на GitHub, вы можете использовать GitHub Importer, чтобы сделать это за вас. Исходное репо может быть даже из других систем контроля версий.

Матеус Гондим
источник
4
Это прекрасно работает и даже сохраняет историю - должно быть больше голосов
John D
1
Я согласен. Этот подход гораздо более интуитивно понятен, он может быть реализован полностью в графическом интерфейсе Github и не связан с этой запутанной чепухой командной строки. Шаги: 1) В графическом интерфейсе создайте новое репозиторий, но не устанавливайте флажок «Инициализировать этот репозиторий с помощью README». После этого Github представит вам новую страницу и опцию «… или импортируйте код из другой репозиторий ". Это оно!
Люк Ф.
5

Если вы просто хотите создать новый репозиторий, используя все или большую часть файлов из существующего (т. Е. Как своего рода шаблон), я считаю, что самый простой подход - создать новое репо с желаемым именем и т. Д., Клонировать его в свой рабочий стол, а затем просто добавьте на него нужные файлы и папки.

Вы не получите всю историю и т. Д., Но, вероятно, вам это не нужно в данном случае.

Тим
источник
-1

Откройте Терминал.

Создайте чистый клон репозитория.

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push to the new repository.

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git

Кундан Рой
источник
Я попробовал ваш подход. И я получил это сообщение об ошибке:! [удаленное отклонено] master -> master (отклонено pre-receive hook) и несколько других подобных сообщений. Последним было: ошибка: не удалось отправить несколько ссылок. Как я могу это исправить?
LND