LibreOffice fejlesztés

Git használata LibreOffice fejlesztéshez

2020. április 09. - christo161

Jó eséllyel mindenki hallott már a gitről, aki idetéved. Mivel nagyon jó tananyagok vannak róla ([1], [2], [3]), így ebben a leírásban csak a LibreOffice fejlesztésével kapcsolatos gyakorlatról ejtenék szót. A commitolásról és a pusholásról egy másik leírásban lesz szó, de ahhoz kapcsolódó műveletek ebben a leírásban is szerepelnek.

A letöltés/fordítás Windowson vagy Linuxon leírásokban már meg lett említve, hogy nem kell git init parancsot futtatni a git clone után, viszont fontos, hogy a gerritben beállított név és email cím legyen beállítva lokálisan is, melyről a git, gerrit regisztráció, helyi beállítások leírásban ejtettem szót.

Patchenként külön branch

Amikor letöltjük (leklónozzuk) a LibreOffice forráskódját, egyetlen alap branch (ág) jön létre, ezt pedig masternek hívják. Ha nem hozunk létre másik branchet, hanem csak a masterben dolgozunk, és onnan küldjük be a módosításainkat (patcheinket), akkor előállhat olyan eset, hogy van mondjuk egy félig kész patchünk, de közben elkezdünk egy teljesen más patchen dolgozni, és amikor azt be akarnánk küldeni, észrevesszük, hogy az előzőleg félbehagyott módosítások is érvényesek még.
Az ugyebár nyilván logikus, hogy egy patch egy commit, azaz külön küldjük be a módosításokat az áttekinthetőség érdekében (pl. ha van egy vonalstílusos és egy diagramtengelyes javításunk, akkor a kettőt külön commitoljuk, mert akkor jól látszik, hogy melyik javítás esetén milyen forrásfájlok lettek módosítva). Ahhoz, hogy egy félbehagyott patch ne kerüljön bele egy új patch commitjébe, érvényteleníteni kéne azt (pl. erre való a git checkout fájlnév parancs), aztán később, amikor újra visszatérünk a félbehagyott patchre, újra vissza kéne másolni azokat a fájlokat (már ha kimentettük őket).
Ehelyett a macera helyett jobb, ha külön branchet használunk minden egyes patchez/commithoz (kivéve persze, amikor már egy meglévő commitot akarunk módosítani a git commit --amend paranccsal).

(A parancsok futtatásához be kell lépni a LibreOffice könyvtárába).

Egy új branch létrehozásához ezt a parancsot használjuk (ekkor egyúttal át is lépünk ebbe a branchbe):

git checkout -b branchnév
git checkout -b tdf#bugszám

Például:

git checkout -b tdf#114181

Amikor létrehozunk egy új branchet, az új branch pontosan az alapján a branch alapján fog létrejönni, amiben éppen benne vagyunk. Ha tehát a masterben vagyunk, és ott már módosítottunk valamit, akkor az új branchben is érvényesek lesznek azok a módosítások (ezért érdemes a master ágat érintetlenül hagyni).

Ezzel a paranccsal íratjuk ki, hogy milyen branchben vagyunk épp, és hogy milyen egyéb branchek léteznek:

git branch

Egy már meglévő branchbe váltáshoz ezt a parancsot használhatjuk:

git checkout master
git checkout tdf#114181

Ezzel a paranccsal törölhetünk egy branchet:

git branch -d tdf#114181

Ekkor minden módosítás törlődik, amit ebben a branchben végeztünk. A többi branchre ez értelemszerűen nem lesz hatással.

Törlés, változtatások visszavonása

A legutóbbi commit óta elkövetett összes módosítás törlése (csak az aktuális branchen belül):

git reset --hard

Egy adott fájlon végzett módosítások elvetése (a legutóbbi commit óta). Ha régebben beleírtunk valamit egy adott fájlba, és most vissza szeretnénk hozni az eredeti (a beleírás előtti) állapotát, ezt a parancsot használjuk:

git checkout elérésiút/fájlnév
git checkout ./writerfilter/source/ooxml/model.xml

???Ez nyilván csak az aktuális branchben lévő fájlt fogja érinteni, a többi branch azonos nevű fájljai nem módosulnak.

A git checkout (paraméter nélküli) parancs futtatásával a módosított fájlokat listázhatjuk ki, vagyis azokat, amiket paraméterül adhatunk a git checkout parancsnak ahhoz, hogy a legutóbbi commit óta.

git checkout

Változtatások megtekintése, mentése

Egy adott branchben ezzel a paranccsal tudjuk megnézni, hogy mit módosítottunk (a legutóbbi commit óta):

git diff

Ha nem fér ki egy képernyőre, akkor a le-fel nyilakkal görgethetünk, és a q billentyűvel léphetünk ki, azaz térhetünk vissza a további parancsok futtatásához.

Ezt akár egy fájlba is lementhetjük, például:

git diff > ./fajlnev.patch
git diff > ~/eddigi_patcheim/114181.patch

A git diff paranccsal elmentett módosítások alkalmazása (az aktuális branchben):

git apply valami.patch

patch -p1 < valami.patch

Állapotlekérdezések

A git status paranccsal tudjuk megnézni, hogy milyen már meglévő fájlokat módosítottunk, és milyen új fájlokat hoztunk létre a LibreOffice könyvtárán belül:

git status

legutóbbi módosítások (csak a commitok fejléce)

git log

legutóbbi módosítások (commitok fejléce + módosított fájlok tartalma)

git log -u

legutóbbi módosítás

git log -u -1

egy adott fájl esetén

git log -u -1 elérési_út/fájlnév

például:

git log -u -1 ./chart2/source/model/template/ChartType.cxx

Legutóbbi események, tevékenységek (pl. commitolás):

git reflog

egy branchben:

git pull -r origin master

nem megy, ha van nem kommitolt változtatás

figyelem: ha merge conflict van, akkor fel kell oldani a történetet

aztán pedig: git rebase --continue!!!!!

maserben:

git pull

git cherry-pick 

fájlok eltávolítása a commitból:

hozzuk az adott fájlt olyan állapotba, mint a commit előtt, git add fájl, git commit --amend
nem baj, ha a git diff mutatja a különbségeket

 

git format patch ^HEAD

 

Ez nem a végleges változat, át lesz majd dolgozva, csak azért lett közzétéve, hogy addig is elérhető legyen, hátha valakinek jól jöhet.

A bejegyzés trackback címe:

https://libreoffice.blog.hu/api/trackback/id/tr1614554412

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása