it-swarm.com.de

git - Ist es möglich, Dateien von `git Push` auszuschließen, aber im lokalen Repository zu belassen?

In meinem Ausgangsverzeichnis befinden sich Dateien in einem lokalen Git-Repository, da ich sie alle unter Versionskontrolle verfolgen möchte.

Die meisten dieser Dateien möchte ich in ein Remote-Repository verschieben, aber einige möchte ich nur in meinem lokalen Repository behalten (sie enthalten leicht vertrauliche Informationen).

Wie kann ich das mit git erreichen? Kann ich eine ".gitignore-for-Push" -Datei konfigurieren? Ich kann die lokale .gitignore-Datei nicht verwenden, da diese Dateien vollständig von der Verfolgung ausgeschlossen würden.

ps: Ich kenne die Frage Gibt es eine Datei-Äquivalenz zum Ausschließen ... , aber die Antwort folgt dem .gitignore-Pfad, den ich nicht verwenden kann. Die andere Frage Bestimmte Dateien beim Drücken von ausschließen ... beantwortet nur einen bestimmten Fall für git + heroku, nicht nur für git.

29
halloleo

Das ist nicht möglich. Wenn Sie eine Datei übergeben haben, wird sie gepusht. Die Push-Aktion wirkt sich nur auf Commits aus, nicht auf Dateibasis. 

Sie können jedoch ein Submodul für Ihre sensiblen Daten verwenden und dieses Submodul auf Ihrem lokalen Computer belassen, während Sie das reguläre git-Repository auf den Remote-Computer verschieben.

13
dunni

Sie können diese Dateien tatsächlich nachverfolgen (ohne die sensiblen Informationen), aber dann Folgendes verwenden:

git update-index --assume-unchanged <file>

in jeder Datei. Dann können Sie die vertraulichen Informationen zu jeder Datei hinzufügen. Git wird die Datei jedoch nicht als geändert betrachten und nicht versuchen, diese vertraulichen Informationen festzuschreiben (und somit Push).

Um Git dazu zu bringen, die Informationen erneut zu aktualisieren, verwenden Sie:

git update-index --no-assume-unchanged <file>

29
redhotvengeance

Ich bin letztendlich mit dem Problem umgegangen: Legen Sie die vertraulichen Informationen in einem Unterverzeichnis mit einem eigenen Git-Repository ab und verknüpfen Sie die Datei (en) wieder mit dem alten Speicherort. 

Z.B. In Ihrem Home-Ordner (~) befindet sich die Datei .creds, die Sie im öffentlichen Repository nicht wollen. Verschieben Sie diese Datei in einen Unterordner mit dem Namen protected, und erstellen Sie einen Symlink von ~ nach protected/.creds.. Fügen Sie diesen Ordner natürlich nicht in Ihr ~-Repository ein, sondern erstellen Sie ein new -repository in dem Ordner protected, um den Überblick zu behalten .creds. Wenn Sie dieses Repository überhaupt nicht öffentlich pushen, sind Sie festgelegt.

Ich weiß, dass diese Lösung eine Art Cop-Out ist: Meine Fragen besagen, dass sich die Datei im selben Verzeichnis befindet, aber das Symlinking funktioniert für mich.

5
halloleo

Hier git-update-index - Registrieren Sie den Dateiinhalt im Arbeitsbaum am Index.

git update-index --assume-unchanged <PATH_OF_THE_FILE>

Beispiel:-

git update-index --assume-unchanged somelocation/pom.xml

für mehr Details.

3

Übertragen Sie einfach nicht die Dateien, die Sie ausschließen möchten.

Wenn Sie beispielsweise zwei Dateien a und b haben, die sich im lokalen Repo befinden, Sie jedoch nur eine davon festschreiben möchten, verwenden Sie: git add a, um eine der Dateien hinzuzufügen. Dann mit git commit festschreiben (nicht das -a-Flag einfügen)

0
zjagannatha