Hello,
azzal próbálkozom, hogy '#<ticket>-<leírás>' nevű git brancheket használjak egy új projektben. A branchet meg is tudom csinálni ezzel a paranccsal:
$ git checkout -b \#1431-gui_prototype
Viszont ha átváltok egy másik branchre és vissza akarok váltani így:
$ git checkout \#1431<TAB>
akkor a branch név kiegészül ugyan, de a '\' eltűnik, és ezt kapom:
$ git checkout #1431-gui_prototype
Ami természetesen nem vált át a branchre. Próbálkoztam az idézőjelekkel is (egyszeres és kettős), a tabra szépen kiegészítette a branch nevet, és le is zárta az idézőjelet, de a záró elé odabiggyesztett egy szóközt:
$ git checkout '#1431-gui_prototype '
ami persze tönkrevágta az egészet.
Van valakinek ötlete?
Köszi
Miklós
- 5253 megtekintés
Hozzászólások
Ez egy eleg regi bugja a bash completion-nek, en leszoktam a specialis karaktert tartalmazo nevu branchekrol/fajlokrol/whateva.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
A vicc, hogy fájlnevekre tökéletesen megy.
- A hozzászóláshoz be kell jelentkezni
Rövid válasz: ne csinálj ilyesmit ;)
A \-t a Bash, pontosabban a compgen nyeli le:
$ compgen -W '#1432-gui_prototype' -- "\#"
#1432-gui_prototype
Nem tudom, hogy ez bug-e vagy feature, se azt, hogy hogyan lehetne megkerülni.
A záró szóköz szándékos, mert a userek egy opció/ref/akármi kiegészítése után sokszor még folytatni akarják a parancssort további opciókkal/refekkel/akármikkel, amihez az automatikusan hozzáfűzött szóköz jól jön. Annyit mondjuk lehetne javítani a helyzeten, hogy ha a kiegészítendő szó egyszeres vagy kétszeres idézőjelekkel kezdődik, akkor ezt a záró szóközt el lehet hagyni, az idézőjelet meg majd a Bash bezárja.
Quick'n'dirty patch alant,
git checkout '#<TAB>
működni látszott, de fogalmam sincs, hogy milyen nem kívánt, feltehetően káros mellélhatása lehet. De továbbra is azt mondom, hogy ne csinálj ilyet.
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 9f56ec7a..790f684b 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -509,7 +509,13 @@ __gitcomp ()
__gitcomp_nl ()
{
local IFS=$'\n'
- COMPREPLY=($(compgen -P "${2-}" -S "${4- }" -W "$1" -- "${3-$cur}"))
+ local suffix="${4- }"
+ if [ "$suffix" = " " ]; then
+ if [ -z "${cur%%\'*}" -o -z "${cur%%\"*}" ]; then
+ suffix=""
+ fi
+ fi
+ COMPREPLY=($(compgen -P "${2-}" -S "$suffix" -W "$1" -- "${3-$cur}"))
}
__git_heads ()
- A hozzászóláshoz be kell jelentkezni
Köszi a patchet!
Próbáltam módosítani egy picit, hogy a szóközt a záró idézőjel után rakja, de minden naiv próbálkozásom elbukott. Nagyon kínai ez nekem. :)
Az a furcsa, hogy ugyanez tökéletesen működik a fájlnevekre, pl. az ls paranccsal. Ha idézőjelet használok, lezárja és a szóközt a záró *után* teszi. Megy a backslash is, sőt, ha nem teszem ki, akkor a kiegészítés után odarakja. Ahogy azt kell.
- A hozzászóláshoz be kell jelentkezni
Biztos voltam benne, hogy lesz nem kívánt káros mellékhatás... Dehát valamit valamiért ;)
A fenti patch által hozzáadott
suffix=""
után egy
compopt +o nospace
orvosolni látszik a problémát, feltéve, hogy olyan kellően új Bash-ed van, ami már tud compopt-ot (Linuxon jó eséllyel, ellenben msysgit nem tud).
- A hozzászóláshoz be kell jelentkezni
Ezt ki nem találtam volna, de működik.
Köszi szépen!
Ja, ahogy látom, a compopt a bash4-ben jelent meg, az msysgitben meg hármas van. Mondjuk csak egy Windows fejlesztő van, a többi Mac vagy Linux. :)
- A hozzászóláshoz be kell jelentkezni
Van egy tippem, de nem tudom kipróbálni:
A \ karakter ugye escape karakter, lehet, hogy valahol valaki azért nyeli le, mert úgy gondolja, hogy a \# az a #. Szóval ha így van, akkor \\-ből pedig \ lesz. Szóval én a helyedben kipróbálnám, hogy mi történik, ha \\#-ot írsz az elejére...
- A hozzászóláshoz be kell jelentkezni
Túl szép lenne. :)
Akkor nem ajánl fel semmit.
- A hozzászóláshoz be kell jelentkezni