Wie kann ich ein öffentliches Repository aufteilen, aber meine Abzweigung privat machen? Ich habe das Abonnement zur Unterstützung privater Repositorys.
Wie kann ich ein öffentliches Repository aufteilen, aber meine Abzweigung privat machen? Ich habe das Abonnement zur Unterstützung privater Repositorys.
Antworten:
Die Antworten sind korrekt, aber erwähnen Sie nicht, wie Code zwischen dem öffentlichen Repo und der Gabel synchronisiert wird.
Hier ist der vollständige Workflow (wir haben dies vor dem Open Sourcing von React Native durchgeführt ):
Dupliziere zuerst das Repo wie andere gesagt haben (Details hier ):
Erstellen Sie ein neues Repo (nennen wir es private-repo
) über die Github-Benutzeroberfläche . Dann:
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
Klonen Sie das private Repo, damit Sie daran arbeiten können:
git clone https://github.com/yourname/private-repo.git
cd private-repo
make some changes
git commit
git push origin master
So holen Sie neue Schärfe aus dem öffentlichen Repo:
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
Genial, Ihr privates Repo enthält jetzt den neuesten Code aus dem öffentlichen Repo sowie Ihre Änderungen.
Zum Erstellen einer Pull-Anfrage Private Repo -> Public Repo:
Verwenden Sie die GitHub-Benutzeroberfläche, um eine Abzweigung des öffentlichen Repos zu erstellen (die kleine Schaltfläche "Abzweigung" oben rechts auf der öffentlichen Repo-Seite). Dann:
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
Jetzt können Sie über die Github-Benutzeroberfläche eine Pull-Anfrage für Public-Repo erstellen, wie hier beschrieben .
Sobald die Projektbesitzer Ihre Pull-Anfrage überprüft haben, können sie sie zusammenführen.
Natürlich kann der gesamte Vorgang wiederholt werden (lassen Sie einfach die Schritte weg, in denen Sie Fernbedienungen hinzufügen).
git clone
Remote-Tracking-Zweige und möglicherweise eine andere Konfiguration im geklonten Repo einrichten, die Sie nicht wirklich wollen. Während ein --bare Klon das .git-Verzeichnis so wie es ist von der Fernbedienung kopiert.
git status
zeigt alles auf dem neuesten Stand, Arbeitsbaum sauber, egal was ich ändere. Folglich kann ich nichts festlegen und pushen. Ich habe das neue private Repo gelöscht, das ich noch zweimal erstellt habe, um dies zu versuchen, bin aber immer wieder auf dasselbe Problem gestoßen. Irgendwelche Vorschläge?
Es gibt jetzt eine weitere Option (Januar 2015)
Die aktuellen Antworten sind aus Gründen der Übersichtlichkeit etwas veraltet:
Die kurze Antwort lautet:
Dies ist auf GitHub dokumentiert: Duplizieren eines Repositorys
Sie müssen das Repo duplizieren
Sie können dieses Dokument sehen (von Github)
Um ein Duplikat eines Repositorys ohne Verzweigung zu erstellen, müssen Sie einen speziellen Klonbefehl für das ursprüngliche Repository ausführen und auf das neue Repository spiegeln.
In den folgenden Fällen sollte das Repository, in das Sie pushen möchten - wie exampleuser / new-repository oder exampleuser / Mirrored - bereits auf GitHub vorhanden sein. Weitere Informationen finden Sie unter "Erstellen eines neuen Repositorys".
Ein Repository spiegeln
Um ein genaues Duplikat zu erstellen, müssen Sie sowohl einen Bare-Clone- als auch einen Mirror-Push ausführen.
Öffnen Sie die Befehlszeile und geben Sie die folgenden Befehle ein:
$ 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
Wenn Sie ein Repository an einem anderen Speicherort spiegeln möchten, einschließlich Aktualisierungen vom Original, können Sie einen Spiegel klonen und die Änderungen regelmäßig übertragen.
$ 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
Wie bei einem nackten Klon enthält ein gespiegelter Klon alle Remote-Zweige und -Tags, aber alle lokalen Referenzen werden bei jedem Abruf überschrieben, sodass er immer mit dem ursprünglichen Repository identisch ist. Das Festlegen der URL für Pushs vereinfacht das Pushing auf Ihren Spiegel. Um Ihren Spiegel zu aktualisieren, rufen Sie Aktualisierungen und Push ab, die durch Ausführen eines Cron-Jobs automatisiert werden können.
$ git fetch -p origin $ git push --mirror
GitHub verfügt jetzt über eine Importoption, mit der Sie auswählen können, was Ihr neues importiertes Repository öffentlich oder privat sein soll