Mit zwei Sternchen hinzufügen einer Datei in git
Möchte ich hinzufügen, dass eine Datei mit einem eindeutigen Dateinamen, aber ein langer vorhergehenden Pfad (z.B. a/b/c/d/filename.java). Normalerweise würde ich dies zu meinem repository zu tun
git add *filename.java
.
Allerdings habe ich auch schon mal gemacht haben:
git add a/b/c/d/filename*
Also versuchte ich die beiden zu verbinden:
git add *filename*
dieser sieht aber etwas seltsam. Es fügt jede nicht verfolgte-Datei. Ich kann sehen, mögliche Gründe für Fehler aber sollten Sie alle treten in einer der beiden vorherigen Befehle, also ich weiß nicht, warum dies geschieht.
Meine Frage ist nicht so sehr darum, wie Sie eine Datei in einem git-repository nur mit Ihrem Dateinamen (obwohl das hilfreich wäre).
Meine Frage ist, was mein Unverständnis der *
operation, die macht mich denken, dass die oben genannten funktionieren sollte.
Info:
Ich bin mit Git Bash für Windows, die auf minGW.
- Ist der Dateiname, den Sie verwenden tatsächlich den string
filename
oder verwenden Sie, dass als Beispiel? - Das ist nur ein Beispiel.
- Wenn Sie beziehen sich auf den letzten Befehl, dann ist das nicht das, was passiert ist. In der Tat denke ich, dass das Gegenteil passiert: es passt alles. Wenn ich Typ
git add
dann nichts Hinzugefügt wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Suchen Sie in globs
(nicht reguläre Ausdrücke, die sind in einer anderen pattern-matching-Sprache), und Sie sind erweitert, die von Ihrer shell aus, nicht von git.
Wenn Sie möchten, um zu sehen, wie Sie sich entsprechen, geben Sie nur den gleichen glob zu einem anderen Befehl, zB.
vs
(Ich habe soeben das
-d
damit ls nicht zu zeigen, den Inhalt von beliebigen Verzeichnissen übereinstimmen)Da bist du mit git bash, und es ist möglich, dass glob expansion verhält sich anders als eine regelmäßige shell, versuchen
zum Beispiel: das soll dir zeigen, wie es wirklich erweitert die glob und welche Auswirkung das hat.
Hinweis: die
--
... wenn Sie mit den Einheiten, die könnte match ein Dateiname mit einem führenden-
, ist es wichtig, um sicherzustellen, git weiß, dass es einen Namen und nicht eine option.Leider, dieser zeigt dir nur die Dateien, die beide übereinstimmen glob, und haben einige Unterschiede zwischen den index und die working copy.
Antwort vom Autor:
Der Testlauf hat mir sehr geholfen, hier ist was ich gefunden habe:
War ich zu vergessen, über den bin-Ordner, die ich noch nicht Hinzugefügt, so, wenn ich durchgeführt, die trocken laufen merkte ich, es war die Suche nach zwei matches: filename.java und filename.class. Wenn ich änderte die glob zu
*filename.j*
es funktionierte.Mein Nächster Schritt war, um die zu entfernen .Klasse, und versuchen Sie den Befehl erneut aus: es hat funktioniert! Es ist noch unerklärt, warum git bash Hinzugefügt alles, wenn es fanden zwei Spiele... da die trocken laufen, verhält sich anders als das tatsächliche ausführen ich denke, es muss ein Fehler sein, aber ich denke, die Diskussion ist an einem anderen Ort abgehalten (es sei denn, jemand glaubt, es ist ein Fehler nicht).
*.class
zu einem.gitignore
Datei, vorausgesetzt, Sie wollen nie begingen.'*filename*'
), oder wenn es keine mit dem Namen passend zu den glob auf der Kommandozeile angegeben. Seltsam, aber es scheint zu interpretieren'*filename'
im Sinne von "alles endet mitfilename
in einem beliebigen Verzeichnis", es heißt aber nicht, dass mit'*/*filename'
oder'**/*filename'
, als ich erwartet hätte.