Ich arbeite an einem C-Projekt, das viele Binärdateien generiert. Ich versuche, die Quelle unter Kontrolle zu halten. Ich möchte jedoch, dass die Binärdateien ignoriert werden, ohne sie der Datei gitignore hinzufügen zu müssen, wenn ich eine neue erzeuge. Dies ist eine Art Sandkasten, und deshalb erstelle ich viele neue Binärdateien, während ich neue Dinge ausprobiere. Ich könnte alle meine Binärdateien in einem einzigen Verzeichnis erstellen oder ihnen ein Suffix geben, aber ich mag diese Gründe nicht. Da GCC das Executable-Bit automatisch auf die Binärdateien setzt, die es erzeugt, kann ich dieses Flag verwenden, um sie zu ignorieren?gitignore basierend auf Unix-Dateiberechtigungen
Antwort
Ich empfehle dies. Was passiert, wenn Sie ein Skript in Ihrem Build-Prozess oder zur Laufzeit verwenden müssen, aber es wurde versehentlich gitignored, weil es das ausführbare Bit hat? Dies könnte vor allem Verwirrung stiften, wenn andere Leute zu Ihrem Projekt beitragen, ohne etwas über den Gitignore zu wissen. Es empfiehlt sich, Dateien manuell hinzuzufügen (oder ein bin-Verzeichnis zu verwenden), um dieses Problem zu lösen.
Das gesagt, gitignore scheint nicht Modus-basierte Datei ignoriert, aber Sie können den Prozess des manuellen Hinzufügens von Dateien, die ausführbar sind, zu unterstützen.
Wenn Ihre .gitignore
Datei überschrieben werden:
Run dies Ihr ignoriert Dateien zu aktualisieren: find -type f -executable | sed 's#^.##' > .gitignore
Wenn Ihre .gitignore
Datei intakt gehalten werden sollte:
- -Setup ein Neue Ignorierdatei (Ihre vorhandene
.gitignore
sollte noch funktionieren):git config core.excludesfile .auto_gitignore
- Run dies Ihr ignoriert Dateiliste erstellen/aktualisieren:
find -type f -executable | sed 's#^.##' > .auto_gitignore
- Commit Ihre
.auto_gitignore
, wenn Sie es mit anderen teilen möchten, oder.auto_gitignore
-.git/info/exclude
hinzufügen, wenn Sie nicht tun. Beachten Sie, dass Ihre Mitarbeiter Schritt 1 auch einzeln ausführen müssen, wenn Sie sie teilen.
Hinweis: Wenn Sie eine Fehlermeldung erhalten, dass Ihre Version von find nicht -executable
nicht unterstützt, ersetzen Sie es durch -perm /111
.
Dies löscht alle anderen Einträge von '.gitignore' im aktuellen Zustand. Wenn wir '' 'anstelle von' '' jedes Mal verwenden, wird es die Größe von Gitignore aufblähen. Wenn '.gitignore' eingecheckt ist, könnte es eine bessere Lösung sein, zu' .git/info/exclude' umzuleiten, wodurch Dateien nur lokal ausgeschlossen werden. –
Sie haben Recht, aber das ist nur ein Problem, wenn das vorhandene .gitignore leer ist oder nicht erstellt wurde (oder Sie müssen nur die Teile, die neu geschrieben wurden, manuell wiederherstellen). Auch wenn du 'benutzt hast.git/info/exclude ", diese Datei würde nicht mit jedem im Repo geteilt werden, und Sie hätten das gleiche Problem, wenn sie mit'> 'umgeschrieben oder mit' >> 'angehängt würde. Ich würde stattdessen empfehlen, '' .gitignore' 'zu verwenden und Duplikate manuell aus der Datei zu entfernen, bevor Sie sie übergeben. –
Angenommen, ich habe 20 ausführbare Dateien erstellt, dann jedes Mal, wenn ich den Befehl mit '>>' für jeden neuen Eintrag ausgeführt habe, werde ich auch die älteren 20 Einträge hinzufügen. Ich denke nicht, dass dies manuell gelöst werden kann. –
Nicht direkt, aber Sie können find
verwenden, um Programme zu finden, mit Berechtigungen ausführen:
find . -type f -perm +0111 -print
Run je nach Bedarf neue .gitignore
Einträge zu erstellen. (Beachten Sie, dass dies mit Vorsicht zu verwenden ist; es findet ausführbare Shell-Skripte, die Quelldateien sind, sowie ausführbare Binärdateien.)
Warum nicht einfach die ausführbaren Dateien in 'bin /' oder ähnlichem erstellen, dann gitignore 'bin/*'? (Funktioniert das nicht?) – Izkata
Alles in den bin/funktioniert gut. Ich will einfach nicht aus rein irrationalen Gründen und bin gespannt auf die Fähigkeiten von .gitignore, also hoffte ich, dass ich zwei Fliegen mit einer Klappe schlagen könnte. – azani