Interaktiivinen Git rebase Emacsissa onnistuu näin



Innokas Emacs– sekä Git-käyttäjä on todennäköisesti havainnut että Emacs ja git rebase -i eivät noin vaan toimi hyvin yhdessä. Tämä on harmi koska Gitin interaktiivinen rebase on aivan mainio toiminnallisuus versionhallintajärjestelmässä.

Missä ongelma on? Se on siinä, että rebase-komento haluu käynnistää tekstinmuokkaimen (engl. editor) muokkaamaan väliaikaista tiedostoa, joka määrittää rebase-komennon toimet. Mutta:

  • Kun jo olet Emacsissa, et halu käynnistää uutta Emacsia pelkästään rebase-komentoa varten.
  • Et myöskään halu poistua Emacsista (käyttäen shellin job
    control
    -toiminnallisuutta tai muuten), koska silloin menetät ympäristösi kuten esim. nykyisen työhakemistosi.
  • Etkä halu käynnistää terminaaliemulaattoria Emacsin sisällä (“M-x term”) rebase-komennon ajoa varten, koska sekin vain aiheuttaisi rekursiivisen tekstinmuokkaimen käynnistämisen tekstinmuokkaimen sisällä.

Ihanne olisi että voisi ajaa rebase-komennon samoin kuin muut shell-komennot suoraan Emacsista (“M-x shell-command”), ja että väliaikaisen tiedoston sisältö ilmestyisi nykyisen Emacsin puskuriin muokattavaksi. Miten saavuttaa tämän?

Koska Gitin rebase-komento käyttää EDITOR-ympäristömuuttujassa määriteltyä tekstinmuokkainta, sille pitäisi tässä ympäristömuuttujassa saada syötettyä jonkun kommennon jolla edellä mainittu saisi saavutettua. Tämä voisi onnistua esim. “emacsclient”-apuohjelmalla. Ratkaisu koostuu seuraavasta:

  1. Valmista asettamalla tarvittavat ympäristömuuttujat Emacsissa: (setenv “EDITOR” “emacsclient”). Seuraavaksi mahdollista emacsclientin ottaa yhteyttä nykyiseen Emacsiin ajamalla “M-x server-start”.
  2. Suorita sitten rebase-komento: “M-x shell-command” + git rebase
    -i &
    . Muista &-merkki jotta komento ajetaan asynkronisesti — muuten komento jää lukkoon.
  3. Voila! Rebase-komennon tuottama väliaikainen tiedosto ilmestyy nykyisen Emacsin uuteen puskuriin muokattavaksi. Muokkaa sitä toiveidesi mukaan, ja lopeta kirjoittamalla “C-x #” joka päättää muokkaamisen ja antaa rebase-komennon jatkaa suorittamista.

Tämä mahdollistaa git rebase -i -komennon käyttöä Emacsin sisältä, mikä on tarpeellista, jos haluaa Gitistä irti täyden tehon.

Tämän artikkelin on kirjoittanut Markus Holmberg  ja sitä ovat sittemmin muokanneet muut Codenton työntekijät.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *