Wie können Binärdateien in ignoriert werden git
Verwendung der .gitignore
Datei?
Beispiel:
$ g++ hello.c -o hello
Die “Hallo”-Datei ist eine Binärdatei. dürfen git
diese Datei ignorieren?
Juan Pablo
Wie können Binärdateien in ignoriert werden git
Verwendung der .gitignore
Datei?
Beispiel:
$ g++ hello.c -o hello
Die “Hallo”-Datei ist eine Binärdatei. dürfen git
diese Datei ignorieren?
# Ignore all
*
# Unignore all with extensions
!*.*
# Unignore all dirs
!*/
### Above combination will ignore all files without extension ###
# Ignore files with extension `.class` & `.sm`
*.class
*.sm
# Ignore `bin` dir
bin/
# or
*/bin/*
# Unignore all `.jar` in `bin` dir
!*/bin/*.jar
# Ignore all `library.jar` in `bin` dir
*/bin/library.jar
# Ignore a file with extension
relative/path/to/dir/filename.extension
# Ignore a file without extension
relative/path/to/dir/anotherfile
Diese Lösung funktioniert wie ein Zauber! Ich verstehe nicht, warum durch Unignorieren aller Verzeichnisse “!*/” auch die Dateien von Unterverzeichnissen mit einer Erweiterung unignoriert werden können? (z. B. aaa/bbb.c), aber immer noch die Datei des Unterverzeichnisses ohne Erweiterungen ignorieren. (z. B. aaa/ccc)
– dragonxlwang
14. November 2015 um 21:21 Uhr
Scheint, dass diese Methode nicht wie erwartet funktioniert, nachdem ich festgestellt habe, dass bei mehreren Verzeichnisebenen …
– dragonxlwang
14. November 2015 um 22:02 Uhr
@dragonxlwang Ich bin neugierig, wo würde das nicht funktionieren? Die hier akzeptierte Lösung stackoverflow.com/a/19023985/1426932 ist etwas anders und verwendet !/**/
anstatt !*/
; was ist richtig? /cc @VonC
– Timotheecour
25. Januar 2019 um 10:17 Uhr
In der Unix-Kultur ist es ziemlich üblich, sowohl Shell-Scripts als auch ausführbare Binärdateien ohne Erweiterungen zu benennen, in diesem Fall führt diese Lösung dazu, dass Scripts ignoriert werden. Eine bessere Idee ist es, binäre ausführbare Dateien einfach manuell zu .gitignore hinzuzufügen, wenn sie dem Projekt hinzugefügt werden – das passiert normalerweise nicht allzu oft. Wenn das zu umständlich ist, dann ist die von vedantk vorgeschlagene Makefile-Lösung besser.
– Peter Helfer
14. Februar 2019 um 19:32 Uhr
Dadurch wird das Makefile ignoriert
– VMatrix1900
13. Februar 2020 um 1:36 Uhr
manojlds
Fügen Sie etwas hinzu wie
*.o
in der .gitignore-Datei und platzieren Sie sie im Stammverzeichnis Ihres Repos (oder Sie können sie in einem beliebigen Unterverzeichnis ablegen – es gilt ab dieser Ebene) und checken Sie sie ein.
Bearbeiten:
Bei Binärdateien ohne Erweiterung sollten Sie sie besser einfügen bin/
oder ein anderer Ordner. Schließlich gibt es kein Ignorieren basierend auf dem Inhaltstyp.
Du kannst es versuchen
*
!*.*
aber das ist nicht idiotensicher.
Bearbeiten hinzugefügt. Gibt es einen Grund, warum Sie nicht möchten, dass Ihre Binärdatei eine Erweiterung hat?
– manojlds
19. April 2011 um 3:20 Uhr
Ausführbare Dateien haben oft keine Erweiterungen. Ich versuche hier dasselbe für Dateien zu tun, die von erstellt wurden gcc
Vorbeigehen -o $@
.
– Nathan Lilienthal
11. September 2013 um 16:27 Uhr
*
ignoriert alles, auch Verzeichnisse, also !*.*
wird die Ignorierung innerhalb von Verzeichnissen nicht rückgängig machen, also fügen Sie hinzu !*/
zu .gitignore hinzufügen, um Verzeichnisse hinzuzufügen, dann wird `!*.* auch Dateien in Verzeichnissen mit Erweiterungen unignorieren
– Isaac Weingarten
14. Dezember 2021 um 21:10 Uhr
icks
Um alle ausführbaren Dateien an Ihre anzuhängen .gitignore
(was Sie Ihrer Frage nach wahrscheinlich mit “Binärdatei” meinen), können Sie verwenden
find . -executable -type f >>.gitignore
Wenn Sie sich nicht um die Reihenfolge der Zeilen in Ihrem kümmern .gitignore
Sie könnten auch Ihre aktualisieren .gitignore
mit dem folgenden Befehl, der auch Duplikate entfernt und die alphabetische Reihenfolge beibehält.
T=$(mktemp); (cat .gitignore; find . -executable -type f | sed -e 's%^\./%%') | sort | uniq >$T; mv $T .gitignore
Beachten Sie, dass Sie die Ausgabe nicht direkt weiterleiten können .gitignore
weil das die Datei vorher abschneiden würde cat
öffnet es zum Lesen. Vielleicht möchten Sie auch hinzufügen \! -regex '.*/.*/.*'
als Option zu finden, wenn Sie keine ausführbaren Dateien in Unterverzeichnisse einschließen möchten.
Eine mögliche Aktualisierung dieser Antwort könnte sein find . -executable -type f ! -name "*.*"
um nur die ausführbaren Dateien ohne Erweiterung zu erhalten.
– kellekai
4. Januar um 8:00 Uhr
Bei Binärdateien ist es am besten, ihnen entweder eine Erweiterung zu geben, die Sie einfach mit einem Standardmuster herausfiltern können, oder sie in Verzeichnisse zu legen, die Sie auf Verzeichnisebene herausfiltern können.
Der Erweiterungsvorschlag gilt eher für Windows, da Erweiterungen standardmäßig und grundsätzlich erforderlich sind, aber unter Unix können Sie Erweiterungen für Ihre ausführbaren Binärdateien verwenden oder nicht. In diesem Fall können Sie sie in einen bin/-Ordner legen und hinzufügen bin/
zu Ihrer .gitignore.
In Ihrem sehr spezifischen Beispiel mit kleinem Umfang können Sie einfach setzen hello
in deiner .gitignore.
Binärdateien sind oft ohne Erweiterungen. Wenn dies Ihr Fall ist, versuchen Sie Folgendes:
*
!/**/
!*.*
REF: https://stackoverflow.com/a/19023985/1060487
Sie können in Ihrem versuchen .gitignore
:
*
!*.c
Dieser Ansatz hat viele Nachteile, ist aber für kleine Projekte akzeptabel.
vedantk
Wenn Sie ein Makefile verwenden, können Sie versuchen, Ihre Make-Regeln zu ändern, um die Namen neuer Binärdateien an Ihre .gitignore-Datei anzuhängen.
Hier ist ein Beispiel-Makefile für ein kleines Haskell-Projekt;
all: $(patsubst %.hs, %, $(wildcard *.hs))
%: %.hs
ghc $^
grep -xq "$@" .gitignore || echo $@ >> .gitignore
Dieses Makefile definiert eine Regel zum Erstellen von ausführbaren Dateien aus Haskell-Code. Nachdem ghc aufgerufen wurde, überprüfen wir die .gitignore-Datei, um festzustellen, ob die Binärdatei bereits darin enthalten ist. Ist dies nicht der Fall, hängen wir den Namen der Binärdatei an die Datei an.
Das ist jetzt ein etwas anderer Ansatz.
– René Nyffenegger
18. Januar 2018 um 16:45 Uhr
mögliches Duplikat von Wie füge ich Dateien ohne Punkte in ihnen (alle Dateien ohne Erweiterung) zur gitignore-Datei hinzu?
– Verrückter Physiker
9. Juli 2015 um 21:13 Uhr
Ich bin sehr überrascht, dass es auf eine so alte und wichtige Frage keine richtige Antwort gibt. Ich bin noch mehr überrascht, dass die Antwort ein direkter ist
[^\.]*
.– TamaMcGlinn
3. Oktober 2018 um 15:13 Uhr
das geht nicht
– Timotheecour
23. April 2020 um 6:36 Uhr
Sie sollten wahrscheinlich ein anderes Verzeichnis als Ihre Quelldateien erstellen und das Build-Verzeichnis ignorieren.
– George
16. Juli 2021 um 8:51 Uhr