Ich habe eine Reihe von Dateien in einem Änderungssatz, möchte jedoch eine einzelne geänderte Datei ignorieren. Sieht danach so aus git status
:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
Gibt es eine Möglichkeit git add
, die eine Textdatei, die ich nicht berühren möchte , einfach zu ignorieren? Etwas wie:
git add -u -except main/dontcheckmein.txt
main/*
Sie--
davor hinzufügen , um git wissen zu lassen, dass es sich um einen Pfad handelt. Die beiden anderen Varianten funktionieren ohne die beiden Striche. (Getestet in der Eingabeaufforderung unter Windows 7 mit msysGit)git reset
für diese Ordner funktioniert weiterhin, aber das Hinzufügen der großen Ordner dauert lange.1) Um Änderungen an einer einzelnen bereits versionierten Datei zu ignorieren
und das rückgängig zu machen
git update-index --no-assume-unchanged "main/dontcheckmein.txt"
Github-Dokumente zum Ignorieren von Dateien
2) Um eine bestimmte einzelne Datei vollständig zu ignorieren und zu verhindern, dass sie im Repository erstellt wird
Schauen Sie sich zunächst diesen Stackoverflow-Beitrag an: Git Global Ignorieren funktioniert nicht
In
.gitignore
, fügen Sie den relativen Pfad zur Datei ohne führende./
.Wenn sich Ihre Datei also in
MyProject/MyFolder/myfile.txt
befindet (wo.git
sich auch imMyProject
Ordner befindet), fügen SieMyFolder/myfile.txt
sie Ihrer at-.gitignore
Datei hinzu.Sie können bestätigen, welche Regeln mit Ignorieren über verknüpft sind
git check-ignore "MyFolder/myfile.txt"
Über globales Ignorieren
Dieser Link spricht darüber
~/.gitignore_global
, aber die Datei bezieht sich auf Ihr Projekt. Also, wenn Sie das setzen ausschließen MusterMyFolder/myfile.txt
in~/.gitignore_global
, es wird funktionieren , aber nicht viel Sinn machen ...Auf der anderen Seite, wenn Sie Setup - Projekt mit
git config core.excludesfile .gitignore
dem.gitignore
ist inMyProject
, wird die lokale Datei überschreiben~/.gitignore_global
, die haben sehr nützliche Regeln ...So, jetzt, ich denke , es ist am besten, einige Skript machen Sie Ihren mischen
.gitignore
mit~/.gitignore_global
bei.gitignore
.Eine letzte Warnung
Wenn sich die Datei, die Sie ignorieren möchten, bereits im Repository befindet, funktioniert diese Methode nur, wenn Sie dies tun: Sichern Sie
git rm "MyFolder/myfile.txt"
sie jedoch zuerst, da sie auch lokal entfernt wird! Sie können es später wieder kopieren ...quelle
git rm --cached MyFolder/myyfile.txt
die Datei verwenden , um sie aus dem Repository zu entfernen, aber lokal aufbewahren. Erklärung auf help.github.comFür eine Datei
Für einen Ordner
quelle
git add . && git reset -- main/*
?git push origin master
Ihren nächsten Push nicht mehr eingeben, nurgit push
und Git wird wissen, dass es sich um einen Master-Zweig handelt. Ich hoffe es hilft.git
Unterstützt jetztexclude certain paths and files
durch Pathspec Magic:(exclude)
und seine Kurzform:!
. So können Sie es einfach mit dem folgenden Befehl erreichen.Eigentlich können Sie mehr angeben:
quelle
:!...
Klauseln zitieren müssen , damit sich die Shell nicht beschwert. So zum Beispiel :git add --all -- ':!path/to/file1' ':!path/to/file2' ':!path/to/folder1/*'
.:!/path/to/(file1|file2)
?Während Ben Jackson Recht hat, dachte ich, ich würde hinzufügen, wie ich diese Lösung auch verwendet habe. Im Folgenden finden Sie ein sehr einfaches Skript, das ich verwende (das ich gitadd nenne), um alle Änderungen hinzuzufügen, mit Ausnahme einiger weniger, die ich in einer Datei mit dem Namen
.gittrackignore
(gitignore) aufgelistet habe.Und so
.gittrackignore
sieht meine Strömung aus.Ich arbeite an einem Android-Projekt, das ich bei der Bereitstellung über die Befehlszeile kompiliere. Dieses Projekt hängt von SherlockActionBar ab, daher muss es in project.properties referenziert werden, aber das beeinträchtigt die Kompilierung. Jetzt tippe ich einfach
gitadd
alle Änderungen an git ein und füge sie hinzu, ohne jedes Mal project.properties entfernen zu müssen.quelle
--
bis zu Ihrem Kommentar nicht, was war. Laut den Manpages ist es optional und ändert das Ergebnis des Befehls nicht (zumindest in diesem Fall). Diese Frage scheint dies zu unterstützen: stackoverflow.com/questions/17800994/… . Korrigieren Sie mich, wenn ich falsch liege, aber es scheint, dass es bedeutet, "alles danach--
als Argumente zu behandeln, nicht als Optionen / Schalter"--
ingit checkout
sehe ich in dieser Frage. Ich wusste nicht, was der doppelte Strich war, bis auch dieser Austausch von uns. Ich frage mich, ob sich diegit checkout
Mehrdeutigkeit zwischen Zweigen und Dateien auch in dieser oder einer anderen Form auswirken könntegit reset
.Um die Änderung in der Datei zu behalten, aber nicht zu verpflichten, habe ich dies getan
git add .
git reset -- main/dontcheckmein.txt
git commit -m "commit message"
um zu überprüfen, ob die Datei ausgeschlossen ist, tun Sie
git status
quelle
Verwenden Sie
git add -A
diese Option , um alle geänderten und neu hinzugefügten Dateien gleichzeitig hinzuzufügen.Beispiel
quelle
quelle
Versuche dies:
quelle
Für den speziellen Fall in der Frage wäre es am einfachsten, alle Dateien mit der Erweiterung .c hinzuzufügen und alles andere wegzulassen :
Von git-scm (oder / und
man git add
):Beachten Sie, dass dies bedeutet, dass Sie auch Folgendes tun können:
um alle Dateien (die nicht ignoriert werden) hinzuzufügen, die sich im
main
Ordner befinden. Sie können sogar mit ausgefeilteren Mustern wild werden:Oben werden alle Dateien hinzugefügt, die sich im
s(any char)c
Ordner befinden undService
irgendwo in ihrem Dateinamen enthalten sind.Offensichtlich sind Sie nicht auf ein Muster pro Befehl beschränkt. Das heißt, Sie könnten git bitten, alle Dateien mit der Erweiterung .c und .h hinzuzufügen :
Über diesen Link erhalten Sie möglicherweise weitere Ideen für Glob-Muster.
Ich finde es besonders nützlich, wenn ich viele Änderungen vornehme, aber dennoch möchte, dass meine Commits atomar bleiben und schrittweise Prozesse widerspiegeln, anstatt eine Vielzahl von Änderungen, an denen ich gerade arbeite. Natürlich überwiegen irgendwann die Kosten für die Erstellung ausgefeilter Muster die Kosten für das Hinzufügen von Dateien mit einfacheren Methoden oder sogar jeweils einer Datei. Die meiste Zeit bin ich jedoch leicht in der Lage, genau die Dateien, die ich benötige, mit einem einfachen Muster zu lokalisieren und alles andere auszuschließen.
Übrigens müssen Sie möglicherweise Ihre Glob-Muster zitieren, damit sie funktionieren, aber das war bei mir nie der Fall.
quelle
Ich benutze
git add --patch
ziemlich viel und wollte so etwas, um zu vermeiden, dass ich dständig durch dieselben Dateien schlagen muss . Ich habe ein paar sehr hackige Aliase zusammengestellt, um die Arbeit zu erledigen:In meinem Fall wollte ich nur bestimmte minimierte Dateien die ganze Zeit ignorieren, aber Sie könnten dafür sorgen, dass eine Umgebungsvariable wie
$GIT_EXCLUDE_PATTERN
für einen allgemeineren Anwendungsfall verwendet wird.quelle
Zu übernehmende Änderungen: (Verwenden Sie "git reset HEAD ...", um die Bühne zu verlassen)
quelle
Sie können dies versuchen:
git add * && git reset main/dontcheckmein.txt
quelle