Haben Sie eine private Filiale eines öffentlichen Repos auf GitHub?


126

Ich habe ein öffentliches PHP-Projekt in einem GitHub-Repo, das nur einen Zweig (Master) enthält.

Ich möchte eine separate Niederlassung / Gabel haben, die für mich privat ist (ich habe für private GitHub-Repos bezahlt). Ich möchte in der Lage sein, Änderungen von der privaten Niederlassung / Gabelung zum öffentlichen Repo und umgekehrt zusammenzuführen.

In diesem Sinne sind hier meine Fragen:

  1. Kann ich eine private Filiale in einem öffentlichen Repo haben?
  2. Kann ich mein eigenes öffentliches Repo in meine eigene Filiale / Gabel aufteilen?
  3. Wenn beides möglich ist, welcher ist der beste Weg nach vorne? Wenn nicht, wie soll ich vorgehen?

1
Ist es nicht die beste Idee, Ihr öffentliches Repository als privates Repository zu teilen, in dem Sie mehrere Zweige erstellen, die Sie nicht (zurück) in das öffentliche Repository verschieben (und umgekehrt)?
Legolas

1
Das ist, was ich frage, ich möchte in der Lage sein, eine Kopie des öffentlichen Repos zu erstellen, aber meine Updates sind privat (es sei denn, ich möchte bestimmte Dinge wieder in die öffentliche zurückschieben)
Lizard


@assylias, könntest du es als Antwort geben? Es ist meiner Meinung nach die beste Antwort, und ich habe Ihren Kommentar nicht beachtet, bevor ich den Artikel selbst gefunden habe.
mbh86

@ mbh86 Es ist nicht wirklich eine Antwort, ein Link zu sein, und ich habe keine Zeit, daraus eine Antwort zu machen. Aber wenn Sie den Inhalt dieser Seite verwenden möchten, um hier eine Antwort zu erstellen (mit einem Verweis auf die ursprüngliche Website), könnte dies sicherlich anderen Benutzern helfen, und Sie würden meine Gegenstimme erhalten :-)
assylias

Antworten:


69
  1. Dupliziere dein Repo .
  2. Machen Sie das duplizierte Repo zu einem privaten auf GitHub.
  3. Klonen Sie das private Repo auf Ihren Computer
  4. Fügen Sie Ihrem öffentlichen Repo eine Fernbedienung hinzu (git remote add public git@github.com: ...)
  5. Verschieben Sie Zweige mit Commits, die für Ihr öffentliches Repo bestimmt sind, auf diese neue öffentliche Fernbedienung. (Stellen Sie sicher, dass Sie nicht versehentlich nur privaten Code festschreiben.)
  6. Sie können Änderungen an Ihrem öffentlichen Repo mit 'git fetch public' vornehmen und diese dann lokal zusammenführen und auf Ihr privates Repo (Ursprungsfernbedienung) übertragen.

Das Duplizieren funktioniert für mich einwandfrei, obwohl ich es in umgekehrter Reihenfolge ausführen musste, indem ich zuerst ein privates Repo erstellte und dann das öffentliche Repo dort über die Befehlszeile duplizierte. Vielen Dank!
Joel

103

Ist es möglich, eine private Filiale in einem öffentlichen Repo zu haben?

Auf GitHub ist Ihr Repository entweder öffentlich oder privat. Sie können nicht selektiv nur eine Filiale "privatisieren".

Kann ich mein eigenes öffentliches Repo in meine eigene Filiale / Gabel aufteilen?

Sie können Ihr öffentliches Repo auf Ihren lokalen Computer klonen, nach Bedarf verzweigen und Ihre "privaten" Zweige einfach nicht in den Upstream verschieben (indem Sie angeben, welcher Zweig zum Ursprung verschoben werden soll : git push origin masteroder git push origin branch-i-want-to-be-public:master).

Welches ist der beste Weg nach vorne / wie soll ich vorgehen?

Um GitHub sowohl für Ihre öffentliche als auch für Ihre private Entwicklung zu nutzen, würde ich vorschlagen, Ihren öffentlichen Zweig in GitHub zu teilen, die Einstellungen der neuen Verzweigung in "Privat" zu ändern und dann die private Version auf Ihren lokalen Computer zu klonen. Wenn Sie bereit sind, Änderungen öffentlich zu machen, schieben Sie alles auf GitHub auf Ihre private Abzweigung und kopieren Sie dann mithilfe von Pull-Anforderungen selektiv Zweige in das öffentliche Repo.

Um ein Repository auf GitHub privat zu machen, müssen Sie über ein aktualisiertes (kostenpflichtiges) Konto verfügen . Wenn Sie nur das kostenlose Konto rocken, können Sie immer noch den ersten von mir vorgeschlagenen Prozess verwenden - öffentlich auf lokalen Computer klonen, verzweigen und bestimmte "öffentliche" Zweige zum Ursprung verschieben - ohne ein privates Repo zu benötigen.

Wenn Sie ein bezahltes GitHub-Konto haben oder einen anderen Dienst verwenden, der öffentliche und private Gabeln und Pull-Anforderungen anbietet (z. B. BitBucket ), können Sie einen der oben genannten Ansätze verwenden, um Ihren Code öffentlich zu machen.


32
Mit GitHub können Sie eine Gabel eines öffentlichen Repos nicht privat machen. Sie müssten das Repo duplizieren, um es privat zu machen, und dann würden Sie die Verbindung zum öffentlichen Repo verlieren. Ich frage mich, ob Sie das öffentliche Repo als separate Fernbedienung zu Ihrem lokalen Klon des privaten Repos hinzufügen können. Schieben Sie dann die Zweige zu dieser Fernbedienung.
mj1531

3
Dies hat leider zur Folge, dass es nicht möglich ist, Pull-Anforderungen zu verwenden, um Änderungen von einem privaten "Fork" in eine öffentliche Kopie des Repositorys zu ziehen.
Michael Mior

6
GitHub bietet jetzt unbegrenzt private Repositories für kostenlose Konten.
Nathan F.

1
Dies sollte wirklich nicht die beste Antwort sein, da der empfohlene Workflow (PR von einem privaten Fork) nicht funktioniert. Die Antwort von @ mj1531 ist ein besserer Workflow.
Eintopf Quadrat

2

Es gibt eine andere Lösung, die ich besser finde, da sie nicht zu doppelten Repos auf demselben Computer führt.

  • Machen Sie einen Zweig mit dem Zeug, das Sie privat wollen.
  • Erstelle ein neues Repo auf GitHub und setze es auf privat.
  • Fügen Sie Ihrem Repo auf Ihrem Computer ein neues GitHub-Repo als zweite Fernbedienung hinzu.
  • Schieben Sie den privaten Zweig auf die zweite Fernbedienung.

Das Endergebnis ist 1 Repository mit 2 Fernbedienungen. 1 öffentlich, 1 privat.
Sie müssen nur vorsichtig sein, welchen Namen Sie entsprechend drücken.


1

1.) Ist es möglich, eine private Filiale in einem öffentlichen Repo zu haben?

Soweit ich weiß, nein.

2.) Kann ich mein eigenes öffentliches Repo in meine eigene Filiale einteilen?

Nein, Sie können ein vollständiges Repo (1-n-Zweige) nicht in einen einzelnen Zweig aufteilen. Nun, eigentlich könnten Sie, wenn Sie nur den einen Zweig des vollständigen Repos teilen. Fügen Sie es einfach als Fernbedienung hinzu oder starten Sie von einem Klon.

Vielleicht interessieren Sie sich auch für Sparse Checkout .

3.) Wenn beide oben genannten möglich sind, ist dies der beste Weg nach vorne

n / a

4.) Wenn beides nicht möglich ist, wie soll ich vorgehen?

n / a

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.