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


84

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

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

Github не позволит мне разделить его на одну и ту же организацию. Поиск по запросу «git duplicate repo» предполагает, что я должен использовать только клонирование и зеркальное нажатие, но, похоже, это сделано для того, чтобы синхронизировать оба репозитория, чего я не хочу делать.

Как лучше всего это сделать? Я бы хотел по возможности сохранить старую историю коммитов в новой копии.


1
На самом деле параметры git clone --bareи git push --mirror- это именно то, что вам нужно. Это не обеспечивает синхронизацию обоих репозиториев. Но он сохраняет все , включая все ветки, теги и т. Д. Просто сделайте это во временном каталоге, чтобы сделать копию. Затем клонируйте новую копию прямо с вашего пульта в каталог вашего проекта.
superiorman

Ответы:


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

Если вам не нужно отношение вилки (например, вам нужно какое-то развязанное альтернативное репо по какой-либо причине), дублирование репо в соответствии с контурами ваших находок Google и ответа larsks в порядке.

Если вы действительно хотите сделать его форком, обратитесь в службу поддержки Github (support@github.com или https://github.com/support ), и они создадут для вас форк в той же организации. (Они тоже не придирчивы к этому, вам просто нужно указать альтернативное имя для репо, поскольку имена репо в учетной записи должны быть уникальными.)


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

GitHub недавно опубликовал статью о возможных альтернативах разветвлению репо в той же учетной записи. Вы можете прочитать эту статью здесь .


4
Обратился в службу поддержки, их ответ: «В настоящее время учетная запись не может владеть двумя репозиториями в одной сети». Вместо этого они предлагают создать зеркальное репо .
Стив Райс,

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

10

Используйте опцию Github Import Repository в меню + вверху страницы или просто откройте

https://github.com/new/import

Это создает новый репозиторий с точным содержимым скопированного репозитория. Обратной стороной (как и в случае с ответом Iarsks на команды git ) является то, что он не считается вилкой для Github.


Как вам не удалось заставить этот вариант работать? Я просто повторно протестировал его, и он работает в два простых шага. В качестве альтернативы создайте локальное репо в github, а затем используйте там функцию импорта, например github.com/sarob/mytest/import .
sarob

Может быть что-то с нашим GHE vs github.com, но там это не работает.
говорит serraos

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.