Скопіюйте / розгалужте репозиторій git на github в ту ж організацію


84

У мене є репо на github, яке містить веб-програму, розгорнуту в двох різних доменах. Додаток має невеликі логічні розгалуження, щоб поводитися по-різному, залежно від того, в якому домені воно розгорнуто.

Дійшло до того, що я хочу розділити його на два окремих репозиторії, по одному для кожного домену.

Github не дозволить мені перенести його в ту ж організацію. Пошук "git duplicate repo" передбачає, що я повинен оголити клон і дзеркально натиснути на нього, але, схоже, це стосується синхронізації обох репо, що я не хочу робити.

Який найкращий спосіб це зробити? Я хотів би зберегти стару історію комітів у новій копії, якщо це можливо.


1
Насправді, параметри git clone --bareта git push --mirror- саме те, що ви хочете. Це не синхронізує обидва репозиторії. Але він зберігає все , включаючи всі гілки, теги тощо. Просто зробіть це у тимчасовому каталозі, щоб зробити копію. Потім клонуйте нову копію безпосередньо з пульта дистанційного керування у каталозі проекту.
neverlysuperiorman

Відповіді:


104

Просто створіть нове сховище та натисніть на нього зі своєї робочої копії:

git clone git@github.com:me/myrepo-original
cd myrepo-original
git remote set-url origin git@github.com:me/myrepo-new
git push origin master

Тепер у вас є нове сховище myrepo-new, яке є ідентичним myrepo-original.


3
Гаразд, і вони не будуть відстежувати одне одного, так? Це означає, що вони стають двома окремими відключеними репо? Це те, що я хочу.
jemminger

3
Жодне зі сховищ не оновлюватиметься, якщо ви pushдо нього не надійдете явно, і "нове" сховище не відображатиме жодного відношення до старого.
larsks

Дякую! Схоже, це те, що мені потрібно.
jemminger

3
Ви також можете підштовхнути всі гілки:git push --all origin
Маріус,

Це спрацювало для мене, але мені довелося змінити інший формат URL-адреси: $ git remote set-url github.com/me/myrepo-new.git
Enfors

15

Якщо вам не потрібне відношення fork (наприклад, ви хочете якось розв’язати альтернативне репо з будь-якої причини), дублювання репо як контури ваших знахідок Google і відповіді larsks є нормальним.

Якщо ви дійсно хочете , щоб зробити його виделкою, зверніться в службу підтримки Github (support@github.com або https://github.com/support ), і вони будуть створювати вилку в одній і тій же організації для вас. (Вони також не вибагливі до цього, вам потрібно буде просто вказати альтернативну назву для репо, оскільки імена репо в обліковому записі повинні бути унікальними.)


Оновлення : Користувач Стів Райс повідомляє в коментарях нижче, що служба підтримки GitHub заявила, що служба підтримки в даний час / більше не встановлюватиме другу форк у вашому акаунті.

GitHub нещодавно опублікував статтю про можливі альтернативи форкінгу репо на той самий рахунок. Ви можете прочитати цю статтю тут .


4
Зв’язалася зі службою підтримки та відповіла: "Наразі обліковий запис не може мати два репозиторії в одній мережі". Вони пропонують замість цього створити дзеркальний репо .
Steve Rice

ах, що смокче. вибачте, я не знав, що вони змінили свою політику :(
Невік Ренель

10

Скористайтеся опцією Імпорт сховища Github в меню + у верхній частині сторінки або просто відкрийте

https://github.com/new/import

Це створює нове сховище з точним вмістом скопійованого сховища. Недолік (такий самий, як для команд git, відповідь Iarsks ), полягає в тому, що він не вважається форком для Github.


Як ви не змогли змусити цю опцію працювати? Я просто перевірив її, і вона працює в два простих кроки. Або створіть локальний репо в github, а потім скористайтеся там функцією імпорту, наприклад github.com/sarob/mytest/import .
сароб

Може бути щось із нашим GHE проти github.com, але там це не працює.
serraosays

4

Іншим способом було б додати оригінальне репо, яке потрібно скопіювати, як віддалене для нашого поточного репо.

#create a new repo in the org1 organization called myrepo-new

У вашому локальному терміналі запустіть:

git clone git@github.com:org1/myrepo-new
cd myrepo-new
git remote -v #shows current repo link on github as origin
git remote add name-for-remote https://github.com/org1/repo-old
git remote -v #shows repo-old as name-for-remote
git fetch  name-for-remote
git merge name-for-remote/branch-to-get-from-remote
#Now fix any conflicts if present
#If number of files/commits is very high, the desktop client may hang when you try to commit your changes after merge. Try switching to Git Shell if this happens.
git status 
git commit -m "commit message"
git push origin master

1

Альтернативне рішення:

Створіть нову організацію та розгалужте її там. Якщо репо є приватним, воно залишатиметься приватним і в новій організації. Тоді ви можете надати доступ до зовнішніх розробників або до кого завгодно до розгалуженого репо, і вони можуть підвищити PR-файли до початкового репо.


-2

Не могли б ви просто дублювати локальну папку, видалити git:

rm -rf .git*

Тоді зробити нове сховище в цій папці? Здається чистішим і простішим.


2
Видалення ./.git/не допомогло б із заявленим наміром OP, "зберегти стару історію комітів у новій копії, якщо це можливо".
MarkHu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.