Як я можу роздрібнювати загальнодоступний сховище, але зробити свій форк приватним? У мене є підписка на підтримку приватних сховищ.
Як я можу роздрібнювати загальнодоступний сховище, але зробити свій форк приватним? У мене є підписка на підтримку приватних сховищ.
Відповіді:
Відповіді правильні, але не згадуйте, як синхронізувати код між загальнодоступним репо і вилкою.
Ось повний робочий процес (ми це зробили перед відкритим джерелом 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, як описано тут .
Як тільки власники проектів переглянуть ваш запит на витяг, вони можуть його об'єднати.
Звичайно, увесь процес можна повторити (просто залиште кроки, де ви додаєте віддалені).
git clone
налаштує відділення віддаленого відстеження і, можливо, якусь іншу конфігурацію в клонованому репо, яку ви насправді не хочете. Тоді як клон -bare просто копіює .git dir з пульта, як є.
git status
показує все сучасне, робоче дерево чисте, незалежно від того, що я змінюю. Отже, я нічого не можу здійснити і натиснути. Я видалив нове приватне репо, я зробив ще 2 рази, щоб спробувати це, але продовжував працювати в цій самій проблемі. Будь-які пропозиції?
Зараз є ще один варіант (січень-2015)
Поточні відповіді трохи застаріли, для наочності:
Коротка відповідь:
Це задокументовано на GitHub: дублювання-сховище
Ви повинні дублювати репо
Ви можете побачити цього документа (від 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
GitHub тепер має опцію імпорту, яка дозволяє вибирати все, що ви хочете, щоб ваше нове імпортне сховище було приватним чи приватним