Frage

Ich habe ein Repository, dass ich in Arbeit. Es gibt einen Ordner dort, wo ich das ganze Zeug lege ich auf Open-Source-wollen, so dass es von den privaten Teile getrennt ist. Gibt es eine Möglichkeit, automatisch git Push etwas in diesen Ordner zu einem Github-Repository begangen, ohne mich zu erinnern, die zu jeder Zeit, um die neu geänderten Dateien dort oben zu schieben? Ich möchte das ganze Repository zu einer anderen Github Lage drücken.

War es hilfreich?

Lösung

Wenn Sie ein einzelnes Repository haben, wo Teile sollen öffentlich sein und Teile sein sollen privat, dann müssen Sie sich grundsätzlich etwas ändern in Ihrem Repository-Setup. git Track komplette Repositories, so dass Sie entweder ein Repository öffentlich oder privat machen können, aber nicht Teil dieses und zum Teil des.

Wenn Sie sowohl ein Repo mit den „öffentlichen“ Dateien und ein Repo mit den „privaten“ Dateien haben, können Sie automatisch Push-Commits, einen git Haken zur „public“ Repo hinzuzufügen und so nur auf den privaten Repo privat.

Allerdings Sie schreiben, dass Sie eine einzelne Repo haben, die sowohl „öffentlich“ und „privat“ Dateien, so dass Sie teilen müssen, dass in etwas „public“ und etwas „private in gewisser Weise.

Sie haben eine Reihe von Optionen, um diese Situationen zu lösen:

  1. Split aus dem Ordner "public" in sein eigenes Repository die Sie drückt auf GitHub. Dies wird die Geschichte des „public“ -Ordner ein wenig umschreiben. Ich werde dies im Folgenden näher erläutern.

  2. einen Zweig erstellen, die nur den „public“ -Ordner betrifft, und nur diesen Zweig veröffentlichen. Das ist riskant in dem „zufällig stoßen, das heißt veröffentlichen, private Sachen“ Sinn, und geradezu unmöglich oder zumindest sehr schwer zu tun, wenn Sie alle Commits, die beide „öffentlich“ und „privat“ Dateien berühren, so würde ich abraten diese Option, und wird nicht schreiben mehr über sie.

Für Abspalten der Ordner „public“ in sein eigenes Repository, erstellen Sie eine neue „public“ abzweigen Ihre „kombinierten“ Zweig, und Verwendung git rebase -i .

  

Update: [Die anschließende Push von nur der "public" Zweig und nichts anderes wird wahrscheinlich keine weiteren Informationen übertragen, so dass diese Repo-Bereinigung ist wahrscheinlich nicht erforderlich. Wenn Sie] benötigt keine Schwärzungen zu tun, werden Sie die alten unredacted Umdrehungen aus dem Repo mit git gc . (wahrscheinlich mit den --prune=0 und --aggressive Optionen - aber ich kann nicht die SO Antwort finden, mit weiteren Informationen über das)

Jetzt ist Ihr „öffentlicher“ Zweig ist für die Veröffentlichung bereit. Um sicherzustellen, dass es nur die „öffentliche“ Informationen enthält, können Sie sie in eine neue leere lokalen nackten Repo drücken, prüfen den Inhalt, dass alle Refs zu überprüfen, haben keine privaten Informationen. Nachdem Sie zufrieden sind, können Sie den „Öffentlichkeit“ Zweig zu einem neuen leeren Repo auf Github schieben. Der Repo auf Github wird dann nur den „public“ Zweig enthält, die Sie wahrscheinlich „Master“ auf dem GitHub Repo nennen sollten.

Ihre lokale Repo mit dem „kombinierten“ Zweig enthält noch öffentliche und private Informationen direkt und hat keine Verbindung mit dem neuen „public“ GitHub Repo überhaupt.

Jetzt können Sie könnte schreiben die „kombinierte“ Geschichte der Filiale nur noch die nicht-öffentlichen Bits enthalten, aber das würde opfert alle Verbindungen zwischen dem Zustand der „öffentlich“ und „privat“ Dateien während all die Geschichte, so wiederholbar von alten Sachen baut unmöglich würde schließen. Deshalb schlage ich vor, die „kombinierte“ Zweiges der Geschichte allein zu lassen und nur den Ordner „public“ von ihm entfernen in eine neue begehen.

Wenn die Integration zwischen privaten und öffentlichen Ihren Dateien sehr eng und versionsabhängig ist, können Sie git submodule eine bestimmte Version der „public“ Repo von github in Ihr privates Repo hinzuzufügen. Ein neues Modul-Ordner wie dem ehemaligen „public“ Ordner mit dem Namen werden die Änderungen an Ihrem privaten Sachen minimieren, wie dann alle „public“ Dateien werden in ihrem alten Pfad sein. Beachten Sie, dass das Submodul Ordner nicht automatisch aktualisiert, wenn etwas auf die GitHub geschoben wurde. Sie arbeiten könnte um, dass durch einen git Haken zu Ihrem lokalen Submodul Ordner hinzugefügt, die das Submodul Informationen in der „kombinierten“ Repo aktualisieren würde.

Wenn die Integration zwischen privaten und Ihren öffentlichen Dateien mehr locker ist, können Sie auch die öffentlichen Dateien wie jedes externes Fremd Projekt behandeln und es in Ihre privaten Sachen in der Art und Weise jemanden integrieren es sonst integrieren würden, also wie jeder Außen Stück Software Ihre "private" Software abhängt.

Andere Tipps

Verwenden Sie ein githook vorzudringen zu begehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top