GitHub: Як зробити вилку публічного сховища приватним?


247

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

Відповіді:


394

Відповіді правильні, але не згадуйте, як синхронізувати код між загальнодоступним репо і вилкою.

Ось повний робочий процес (ми це зробили перед відкритим джерелом React Native ):


Спочатку дублюйте репо, як говорили інші (деталі тут ):

Створіть нове репо (назвемо його private-repo) через інтерфейс Github . Тоді:

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:

Використовуйте інтерфейс GitHub, щоб створити виделку публічного репо (маленька кнопка "Fork" у верхньому правому куті сторінки загальнодоступного репо). Тоді:

git clone https://github.com/yourname/the-fork.git
cd the-fork
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
Чому не можна просто додати порожнє приватне репо як новий пульт до звичайного клону публічного репо, а потім натиснути на пульт? Яка була б різниця?
Falko Menge

@FalkoMenge У мене те саме питання. Читаючи git-scm.com/docs/git-clone , це здається, що звичайна git cloneналаштує відділення віддаленого відстеження і, можливо, якусь іншу конфігурацію в клонованому репо, яку ви насправді не хочете. Тоді як клон -bare просто копіює .git dir з пульта, як є.
bennlich

1
Чи це також підштовхне приватну історію збору до публічної гілки?
Sukhjinder Singh

1
@Sukhjinder Singh Так, останній крок підштовхне історію приватних комісій до публічного репо. Якщо ви цього не хочете, ви можете скинути свої зобов’язання, об'єднавши їх у загальнодоступне репо, та надіслати єдине зобов’язання зі всіма своїми змінами. Див , наприклад , stackoverflow.com/questions/5308816/how-to-use-git-merge-squash
Martin Koníček

1
Я мушу зробити крок, де я клоную своє приватне репо, а потім вношу зміни та натисніть. Будь-які зміни, які я вніс, залишилися непоміченими git git statusпоказує все сучасне, робоче дерево чисте, незалежно від того, що я змінюю. Отже, я нічого не можу здійснити і натиснути. Я видалив нове приватне репо, я зробив ще 2 рази, щоб спробувати це, але продовжував працювати в цій самій проблемі. Будь-які пропозиції?
Буде

92

Зараз є ще один варіант (січень-2015)

  1. Створіть нове приватне репо
  2. На порожньому екрані репо є опція / кнопка "імпорт" введіть тут опис зображення
  3. клацніть по ньому і поставте існуючий URL-адресу github repo. Немає згадки про варіант github, але він також працює і з github repos. введіть тут опис зображення
  4. Зроблено

19
Це працює, хоч трохи інакше. (Я спробував у серпні 2015 року). Я не знайшов опцію / кнопку імпорту, тому погуглив її і потрапив у цю URL-адресу. import.github.com/new Тут ви можете ввести існуючу URL-адресу github і натиснути кнопку Перевірити . Після перевірки ви можете ввести ім'я нового репо і натиснути кнопку Приватне, а потім натиснути Почати імпорт
Шива

2
Я вважаю, що @MattvanAndel означає, що коментар правильний, а не оригінальна відповідь. Я теж слідкував за коментарем Шиви, і це спрацювало. Зауважте, що НЕ слід спочатку створювати локальне приватне сховище!
David H

Якщо я створити приватний "виделка" таким чином і хочу знову зробити його загальнодоступною виделкою, чи можу я це зробити?
Anders Lindén

2
@Shiva Я схвалюю заявку, якщо ви зробите відповідь із коментаря.
bebbi

36

Поточні відповіді трохи застаріли, для наочності:

Коротка відповідь:

  1. Зроби голий клон громадського репо.
  2. Створіть нову приватну.
  3. Зробіть дзеркальний поштовх до нового приватного.

Це задокументовано на GitHub: дублювання-сховище


4
Чи є спосіб витягнути зміни за течією? Це важливо для РЕПО, що має ліберальну ліцензію - я зробив своє репо приватне, але все одно хотів би об'єднати зміни вгору.
amarprabhu

2
Так. Ви повинні мати змогу додати інше репо як новий (відслідковуючий) віддалений (наприклад, 'other-repo'), а потім періодично отримувати та об'єднувати зміни з нього (наприклад, 'git merge other-repo / stable').
стефано

26

Ви повинні дублювати репо

Ви можете побачити цього документа (від github)

Щоб створити дублікат сховища без розгортання, потрібно запустити спеціальну команду клонування проти оригінального сховища та дзеркальне натискання на нове.

У наступних випадках репозиторій, на який ви намагаєтеся натиснути, як-от exampleuser / new-repository або exampleuser / zrrror, вже повинен існувати на 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-адреси для натискань спрощує натискання на дзеркало. Щоб оновити дзеркало, знайдіть оновлення та натисніть, які можна автоматизувати, запустивши завдання cron.

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

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


Це створює клон репо, але не створює вилку в сенсі GitHub. Коли ви створюєте фактичну вилку в GitHub, вона відображає текст "роздвоєний з exampleuser / репозиторія до дзеркала" під назвою fork. Він також показує дерево всіх інших вил, коли ви переходите до github.com/exampleuser/new-repository/network/members.
апааціо

20

GitHub тепер має опцію імпорту, яка дозволяє вибирати все, що ви хочете, щоб ваше нове імпортне сховище було приватним чи приватним

Імпорт сховища Github


Імпорт все ще працює у великому сховищі (5 днів), перевірка їх відбувається набагато швидше, але, можливо, це більше кроків, щоб оновити його. Повільність зрозуміла. Я гадаю, оскільки вона імпортує все, а не лише головну галузь, але хочеться, щоб це було швидше ...
Ліам Мітчелл

1
Я збирався додати ту саму відповідь, але дякую, що зробив це спочатку. Радий, що приватні репости Github Free доступні з січня минулого року. : D
OBL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.