Как продублировать репозиторий 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

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.