Angenommen, ich versuche, einen bestimmten Satz von Git-Dateien auszuchecken, z app/*^(.tmpl).html
,
wie man diese Regex hineinwirft git checkout branch -- (regex)
Benutzer2167582
Angenommen, ich versuche, einen bestimmten Satz von Git-Dateien auszuchecken, z app/*^(.tmpl).html
,
wie man diese Regex hineinwirft git checkout branch -- (regex)
VonC
Wie in “Gibt es eine Möglichkeit, Platzhalter mit zu verwenden git checkout
?”
Git behandelt den Platzhalter nicht, Ihre Shell jedoch schon.
Wie unten angemerkt, müssten Sie das Platzhalterzeichen maskieren, damit Git es interpretieren kann: afile\*
oder verwenden Sie einfache Anführungszeichen.
Das Beispielabschnitt von git checkout
zeigt eine Wildcard-Verwendung:
rm hello.c
git checkout -- '*.c'
Beachten Sie die Anführungszeichen um
*.c
.
Die Dateihello.c
wird ebenfalls ausgecheckt, obwohl es sich nicht mehr im Arbeitsbaum befindet, da das Dateiglobbing verwendet wird, um Einträge im Index (nicht im Arbeitsbaum von der Shell) abzugleichen.
Eine Alternative wäre zum Beispiel die Verwendung von find (wie in „“git add *.js
” habe die Dateien nicht in Unterverzeichnisse hinzugefügt”)
find . -name '*js' -exec git checkout {} \;
Sie können Ihre Regex mit ausprobieren find -regex
Zum Beispiel verwendet Tukaz (aus den Kommentaren):
find ./packages/* -maxdepth 1 -name 'package.json' \ -exec git checkout {} \;
um nur die Kasse zu machen
package.json
von jedem Projekt, das ich habe und weglassedist
odernodemodules
Unterordner.
Der modernere Befehl (seit 2014) wäre Git 2.23+ (Q3 2019) git restore
:
git restore -s=aBranch -- '*.c'
Mit ‘*.c’ nach dem in beschriebenen Glob-Muster pathspec
.
MaxTiefe funktioniert gut! Danke
– Tukaz
14. Januar um 16:21 Uhr
@Tukaz Großartig! Was war das voll find
Befehl, den Sie verwendet haben, mit -maxdepth
?
– VonC
14. Januar um 16:23 Uhr
find ./packages/* -maxdepth 1 -name ‘package.json’ -exec git checkout {} \; um nur die package.json jedes Projekts auszuchecken, das ich habe, und zum Beispiel die Unterordner dist oder nodemodules wegzulassen
– Tukaz
15. Januar um 20:23 Uhr
@Tukaz Vielen Dank für das Feedback. Ich habe Ihren Kommentar zur besseren Sichtbarkeit in die Antwort aufgenommen.
– VonC
15. Januar um 20:49 Uhr
Ich habe diese Antwort nur aktualisiert, aber ich konnte es git checkout
mit einem Platzhalter, also glaube ich, dass dies jetzt möglich ist. Ich verwende Git-Version 1.9.3.
Beachten Sie jedoch, dass das Sternchen maskiert werden muss: git checkout foo\*
– Jamie Schembri
28. Juli 2015 um 20:51 Uhr
Ich verwende eine solche Kombination von Befehlen.
Falls Sie eine Remote-Zweigstelle benötigen:
git checkout $(git branch -a | grep "your-key-words-here" | grep remotes)
Und falls Sie nur eine lokale Niederlassung benötigen:
git checkout $(git branch | grep "your-key-words-here")
Anwendungsbeispiel
Hauptsächlich Entwickler benennen Zweige nach Aufgabennummer von JIRA oder was auch immer, also können Sie mit diesen Befehlen schneller zu dem Zweig wechseln, den Sie brauchen.
(1) Alle verfügbaren Filialen vor Ort:
Einschalten feature/CAN2-1035_new_calculation_for_internal_transfer
branch, sollten Sie den Befehl eingeben:
git checkout $(git branch | grep CAN2-1035)
git branch
– gibt alle lokalen Niederlassungen zurück (1)grep CAN2-1035
– Filterergebnis von (1) und geben Sie nur diejenigen zurück, die CAN2-1035 enthaltenDiese Befehle könnten auch in einen Bash-Befehl extrahiert werden, um die Verwendung zu vereinfachen.
Gits Pfadspez Specials werden schlecht beworben, aber sie sind durchaus fähig:
git checkout ':!*.tmpl.*' app/\*.html
Welchen Befehl haben Sie aus meiner Antwort unten verwendet? a
find --regex
?– VonC
22. Juli 2014 um 13:35 Uhr