Come posso fork un repository pubblico, ma rendere privato il mio fork? Ho l'abbonamento per supportare i repository privati.
Come posso fork un repository pubblico, ma rendere privato il mio fork? Ho l'abbonamento per supportare i repository privati.
Risposte:
Le risposte sono corrette ma non menzionate come sincronizzare il codice tra il repository pubblico e il fork.
Ecco il flusso di lavoro completo (lo abbiamo già fatto prima di open source React Native ):
Innanzitutto, duplica il repository come altri hanno detto (dettagli qui ):
Crea un nuovo repository (chiamiamolo così private-repo
) tramite l' interfaccia utente di Github . Poi:
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
Clonare il repository privato in modo da poter lavorare su di esso:
git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master
Per estrarre nuovo entusiasmo dal repository pubblico:
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
Fantastico, il tuo repository privato ora ha l'ultimo codice del repository pubblico più le tue modifiche.
Infine, per creare un repository privato di richiesta pull -> repository pubblico:
Utilizzare l'interfaccia utente di GitHub per creare un fork del repository pubblico (il piccolo pulsante "Fork" in alto a destra nella pagina del repository pubblico). Poi:
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
Ora puoi creare una richiesta pull tramite l'interfaccia utente di Github per il repository pubblico, come descritto qui .
Una volta che i proprietari del progetto hanno esaminato la tua richiesta pull, possono unirla.
Naturalmente l'intero processo può essere ripetuto (basta tralasciare i passaggi in cui si aggiungono i telecomandi).
git clone
imposti i rami di tracciamento remoto e forse qualche altra configurazione nel repository clonato che non vuoi davvero. Mentre un clone --bare copia semplicemente la directory .git dal telecomando così com'è.
git status
mostra tutto aggiornato, albero di lavoro pulito, indipendentemente da ciò che cambio. Di conseguenza non posso impegnarmi e spingere nulla. Ho eliminato il nuovo repository privato che ho effettuato altre 2 volte per tentare questo, ma ho continuato a riscontrare lo stesso problema. Eventuali suggerimenti?
C'è un'altra opzione ora (gennaio-2015)
Le risposte attuali sono un po 'obsolete, quindi, per chiarezza:
La risposta breve è:
Questo è documentato su GitHub: duplicating-a-repository
Devi duplicare il repository
Puoi vedere questo documento (da github)
Per creare un duplicato di un repository senza biforcazione, è necessario eseguire uno speciale comando clone sul repository originale e fare il mirroring su quello nuovo.
Nei seguenti casi, il repository a cui stai tentando di eseguire il push - come exampleuser / new-repository o exampleuser / mirrorato - dovrebbe già esistere su GitHub. Vedere "Creazione di un nuovo repository" per ulteriori informazioni.
Mirroring di un repository
Per fare un duplicato esatto, devi eseguire sia un clone nudo che un push speculare.
Apri la riga di comando e digita questi comandi:
$ 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
Se si desidera eseguire il mirroring di un repository in un'altra posizione, incluso ottenere aggiornamenti dall'originale, è possibile clonare un mirror e inviare periodicamente le modifiche.
$ 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
Come con un clone nudo, un clone con mirroring include tutti i rami e i tag remoti, ma tutti i riferimenti locali verranno sovrascritti ogni volta che si recupera, quindi sarà sempre lo stesso del repository originale. L'impostazione dell'URL per i push semplifica il push sul mirror. Per aggiornare il tuo mirror, scarica gli aggiornamenti e invia, che potrebbero essere automatizzati eseguendo un processo cron.
$ git fetch -p origin $ git push --mirror
GitHub ora ha un'opzione di importazione che ti consente di scegliere qualsiasi cosa tu voglia il tuo nuovo repository importato pubblico o privato