abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 21:44 | Nová verze

    Weston, referenční implementace kompozitoru pro Wayland, byl vydán ve verzi 15.0.0. Přehled novinek v příspěvku na blogu společnosti Collabora. Vypíchnout lze Lua shell umožňující psát správu oken v jazyce Lua.

    Ladislav Hagara | Komentářů: 0
    včera 21:11 | Nová verze

    Organizace Apache Software Foundation (ASF) vydala verzi 29 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.

    Ladislav Hagara | Komentářů: 3
    včera 18:22 | IT novinky

    Ústavní soud na svých webových stránkách i v databázi NALUS (NÁLezy a USnesení Ústavního soudu) představil novou verzi chatbota využívajícího umělou inteligenci. Jeho posláním je usnadnit veřejnosti orientaci v rozsáhlé judikatuře Ústavního soudu a pomoci jí s vyhledáváním informací i na webových stránkách soudu, a to i v jiných jazycích. Jde o první nasazení umělé inteligence v rámci webových stránek a databází judikatury českých soudů.

    Ladislav Hagara | Komentářů: 13
    včera 13:00 | Nová verze

    Byla vydána nová verze 10.1 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnuta je podpora NanoPi Zero2 a balíček WhoDB.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Komunita

    Konference Otvorený softvér vo vzdelávaní, výskume a v IT riešeniach OSSConf 2026 proběhne od 1. do 3. července 2026 na Žilinské univerzita v Žilině: "Cieľom našej konferencie je poskytnúť priestor pre informovanie o novinkách vo vývoji otvoreného softvéru a otvorených technológií, o možnostiach využitia týchto nástrojov vo vede a vzdelávaní a taktiež poskytnúť priestor pre neformálne priateľské stretnutie užívateľov a priaznivcov

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 12:22 | Pozvánky

    Korespondenční seminář z programování (KSP) pražského Matfyzu pořádá i letos jarní soustředění pro začátečníky. Zváni jsou všichni středoškoláci a starší základoškoláci, kteří se chtějí naučit programovat, lépe uvažovat o informatických úlohách a poznat nové podobně smýšlející kamarády. Úplným začátečníkům bude určen kurz základů programování a kurz základních algoritmických dovedností, pokročilejším nabídneme různorodé

    … více »
    skywalqer | Komentářů: 1
    22.2. 04:11 | Komunita

    Fedora je od 10. února dostupná v Sýrii. Sýrie vypadla ze seznamu embargovaných zemí a Fedora Infrastructure Team mohl odblokovat syrské IP adresy.

    Ladislav Hagara | Komentářů: 22
    22.2. 03:44 | Zajímavý projekt

    Ministerstvo zahraničí Spojených států amerických vyvíjí online portál Freedom.gov, který umožní nejenom uživatelům v Evropě přístup k obsahu blokovanému jejich vládami. Portál bude patrně obsahovat VPN funkci maskující uživatelský provoz tak, aby se jevil jako pocházející z USA. Projekt měl být původně představen již na letošní Mnichovské bezpečnostní konferenci, ale jeho spuštění bylo odloženo.

    NUKE GAZA! 🎆 | Komentářů: 29
    22.2. 03:33 | Komunita

    Byla vydána pro lidi zdarma ke stažení kniha The Book of Remind věnovaná sofistikovanému kalendáři a připomínači Remind.

    Ladislav Hagara | Komentářů: 1
    21.2. 23:55 | Nová verze

    Grafický editor dokumentů LyX, založený na TeXu, byl vydán ve verzi 2.5.0. Oznámení připomíná 30. výročí vzniku projektu. Novinky zahrnují mj. vylepšení referencí nebo použití barev napříč aplikací, od rozhraní editoru po výstupní dokument.

    |🇵🇸 | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (11%)
     (27%)
     (2%)
     (5%)
     (1%)
     (12%)
     (26%)
    Celkem 946 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    git-cd

    22.3.2014 19:50 | Přečteno: 977×

    Při prolézání cizího git repozitáře mě nedávno napadla jednoduchá myšlenka: mít tak příkaz git-cd, který by fungoval stejně jako cd, ale s cestami by pracoval relativně k samotnému repozitáři. A ukázalo se, že to jde (v bashi) poměrně přímočaře zařídit.

    První věc, co bylo potřeba zjistit je cesta k aktuálnímu git working tree, což se nechá vypsat "jednoduše" takto:

    $ git rev-parse --show-toplevel
    

    Btw přidal jsem si pro to v .gitconfig alias root, ale není to dál pro samotnou funkci git-cd třeba.

    Jelikož chceme měnit aktuální adresář shellu, není jiná cesta než jít cestou tvorby shell funkce (definované např, v ~/.bashrc):

    git-cd()
    {
      if ! GIT_ROOT=$(git rev-parse --show-toplevel); then
        return 1
      fi
      if [[ $# = 0 ]]; then
        cd ${GIT_ROOT}
      elif [[ "$1" = - ]]; then
        cd -
      else
        cd "${GIT_ROOT}/$1"
      fi
    }
    

    Funkce pak funguje tak, že volání git-cd bez parametrů změní aktuální pracovní adresář na root git repa (pokud se zrovna v nějakém nacházíme) a jinak se snaží přejít do zadaného adresáře v rámci repozitáře:

    $ cd /home/martin/projects/nitrate/trunk/nitrate/docs
    $ git root
    /home/martin/projects/nitrate
    $ git-cd design/Milestone
    $ pwd
    /home/martin/projects/nitrate/design/Milestone
    $ git-cd
    $ pwd
    /home/martin/projects/nitrate
    

    I když funkční, taková funkce není celá bez podpory doplňování. To ale taky není složité zařídit:

    # bash autocompletion for git-cd
    _git-cd()
    {
      if ! GIT_ROOT=$(git rev-parse --show-toplevel); then
        return 1
      fi
      # current word to complete
      local CUR=${COMP_WORDS[COMP_CWORD]}
      # remove absolute paths
      if [[ "$CUR" =~ ^/ ]]; then
        CUR=${CUR#"/"}
      fi
      COMPREPLY=($(cd $GIT_ROOT; compgen -S '/' -d $CUR))
    }
    complete -o nospace -F _git-cd git-cd
    

    A tím se dostáváme k použitelnému řešení :-)

    Menší problém by (pro někoho) mohlo být, že shell funkci není možně přímo volat přes git cd právě proto, že to není skript, ale jen shell funkce. Což mi ale osobně přijde jako nepodstatný detail. Teoreticky by se to sice dalo to obejít přes definici další shell funkce git, co by fungovala jako wrapper, např:

    git()
    {
      if [[ $1 = cd ]]; then
        git-cd "$2"
      else
        /usr/bin/git "$@"
      fi
    }
    

    Ale pak by přestalo fungovat doplňování v bashi. Možná by to i tak šlo nějak ohackovat, ale to mi vážně za tu námahu nestojí :)

    Jinak pochopitelně nejsem první, koho něco takového napadlo udělat, viz třeba:

    Ale na druhou stranu jsem nenašel, že by něco podobného bylo třeba v git/contrib nebo v bashrc nějaké distribuce.

           

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Josef Kufner avatar 22.3.2014 23:28 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: git-cd
    To je pěkné. Skok do kořene repositáře se občas hodí. Na procházení je lepší si to otevřít v mc nebo něčem takovém, na to je cd blbé.

    Dej to do samostatného skriptu, ten umísti do ~/bin a nastav si tam $PATH. Pak to bude fungovat správně.

    Asi by se hodil i git-pwd, který by ukázal cestu relativně ke kořenu repositáře.

    Jak to funguje se submoduly?

    Poslal jsi už patch do upstreamu?
    Hello world ! Segmentation fault (core dumped)
    23.3.2014 10:20 marbu | skóre: 31 | blog: hromada | Brno
    Rozbalit Rozbalit vše Re: git-cd
    Dej to do samostatného skriptu, ten umísti do ~/bin a nastav si tam $PATH. Pak to bude fungovat správně.
    No to právě nejde, protože cd je vnitřní funkce shellu, která mění přímo stav procesu, ve kterém ho spustíš. Neznám způsob, jak změnit aktuální adresář v shellu z jiného procesu (nějaký hnusný hack se nepočítá :)
    Asi by se hodil i git-pwd, který by ukázal cestu relativně ke kořenu repositáře.
    Díky. Ten git-pwd není špatný nápad, a fungoval by i jako obyčený skript.
    Jak to funguje se submoduly?
    Jako každý jiný git nástroj, tj. v submodulu ti git root vypíše cestu k kořenovému adresáři submodulu.
    Poslal jsi už patch do upstreamu?
    Ještě ne, ale mám v plánu se aspoň zeptat na mailing listu. Totiž to, že je to je jen obyčejná shellová funkce trochu komplikuje distribuci z upstreamu ke koncovým uživatelům.
    There is no point in being so cool in a cold world.
    Josef Kufner avatar 23.3.2014 13:08 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: git-cd
    No to právě nejde, protože cd je vnitřní funkce shellu, která mění přímo stav procesu, ve kterém ho spustíš. Neznám způsob, jak změnit aktuální adresář v shellu z jiného procesu (nějaký hnusný hack se nepočítá :)
    Oops... asi bych měl chodit spát dřív.
    Hello world ! Segmentation fault (core dumped)
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.