GitHub: Как сделать вилку общего хранилища приватной?

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

Ответ 1

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

Вот полный рабочий процесс (мы сделали это до открытого источника React Native):


Во-первых, дублируйте репо, как говорили другие (подробнее здесь):

Создайте новое репо (позвоните ему private-repo) через Github UI. Тогда:

git clone --bare https://github.com/exampleuser/public-repo.git
cd public-repo.git
git push --mirror https://github.com/yourname/private-repo.git
cd ..
rm -rf public-repo.git

Клонирование частного репо, чтобы вы могли работать над ним:

git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master

Чтобы вытащить новую горячность из публичного репо:

cd private-repo
git remote add public https://github.com/exampleuser/public-repo.git
git pull public master # Creates a merge commit
git push origin master

Удивительно, ваше частное репо теперь имеет последний код из публичного репо и ваши изменения.


Наконец, для создания запроса на перенос private repo → public repo:

Единственный способ создать запрос на перенос - это получить доступ к публичному репо. Это потому, что вам нужно нажать на ветку там (вот почему).

git clone https://github.com/exampleuser/public-repo.git
cd public-repo
git remote add private_repo_yourname https://github.com/yourname/private-repo.git
git checkout -b pull_request_yourname
git pull private_repo_yourname master
git push origin pull_request_yourname

Теперь просто создайте запрос на перенос через пользовательский интерфейс Github для public-repo, как описано здесь.

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

Конечно, весь процесс можно повторить (просто оставьте шаги, когда вы добавляете пульты).

Ответ 2

Теперь есть еще один вариант (январь-2015)

  • Создайте новое частное репо
  • На пустом экране репо есть кнопка "импорт" /кнопка enter image description here
  • щелкните по нему и поместите существующий URL-адрес репозитория github Не упоминается опция github, но она также работает с репозиториями github. enter image description here
  • DONE

Ответ 3

Текущие ответы немного устарели, поэтому для ясности:

Короткий ответ:

  • Сделайте голый клон публичного репо.
  • Создайте новый закрытый.
  • Сделайте зеркальное нажатие на новый закрытый.

Это документировано на GitHub: duplicating-a-repository

Ответ 4

Вам нужно дублировать репо

Вы можете увидеть этот документ (из github)

Чтобы создать дубликат репозитория без наложения, вам нужно запустить специальную команду clone против исходного репозитория и нажать зеркало на новый.

В следующих случаях репозиторий, который вы пытаетесь нажать, например, exampleuser/new-repository или exampleuser/mirrorrored, должен уже существовать в GitHub. Подробнее см. "Создание нового репозитория".

Зеркалирование репозитория

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

Откройте командную строку и введите следующие команды:

$ 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 clone --mirror https://github.com/exampleuser/repository-to-mirror.git
# Make a bare mirrored clone of the repository

$ cd repository-to-mirror.git
$ git remote set-url --push origin https://github.com/exampleuser/mirrored
# Set the push location to your mirror

Как и в случае с голой клон, зеркальный клон включает все удаленные ветки и теги, но все локальные ссылки будут перезаписаны каждый раз, когда вы извлекаете, поэтому он всегда будет таким же, как исходный репозиторий. Настройка URL-адреса для push файлов упрощает нажатие на ваше зеркало. Чтобы обновить свое зеркало, выберите обновления и нажмите, которые можно автоматизировать, запустив задание cron.

$ git fetch -p origin
$ git push --mirror

https://help.github.com/articles/duplicating-a-repository

Ответ 5

GitHub теперь имеет опцию импорта, которая позволяет вам выбирать, что вы хотите, ваш новый импортированный репозиторий публичный или приватный

Github Repository import