Bruk av git for rpm-pakker

Introduksjon til bruk av Git til RPM-pakker, samt litt generell informasjon om Git-kommandoer.

1???Forberedelser

1.1???F? tilgang

Etter at godkjenningsprosessen har konkludert med at du kan vedlikeholde rpm-pakken m? det lages et git-repo for pakken. Vi bruker SSH-n?kler for ? gi tilgang til git-repoet. Slik gj?r du:

  1. Hvis du ikke har en RSA-n?kkel fra f?r, lag en ny slik:

    ssh-keygen -t rsa -b 4096
    
  2. Lag en kopi av den offentlige n?kkelen:

    cp ~/.ssh/id_rsa.pub <brukernavn>.pub
    

    Erstatt <brukernavn> med ditt brukernavn.

  3. Send <brukernavn>.pub til unix-drift slik at tilgang kan ordnes til riktig repo.

Vi vil legge inn n?kkelen i systemet og gi deg tilgang til det som du skal ha tilgang til.

1.2???Sette opp config for git

Git forventer ? finne en fil ~/.gitconfig som minst inneholder f?lgende:

[user]
        name = <ditt navn>
        email = <din e-postadresse>

Denne kan enten lages manuelt, eller man kan bruke git config, slik:

git config --global user.name '<ditt navn>'
git config --global user.email '<din e-postadresse>'

Se for ?vrig git-config(1).

2???Komme i gang

I den videre teksten refereres det til git-repoet minpakke. Bytt ut dette navnet med det egentlige navnet p? rpm-pakken.

Hent ned en lokal kopi av minpakke:

$ git clone gitolite@koji-git.uio.no:minpakke
Initialized empty Git repository in /usit/platon/bsd-u1/trondham/git/minpakke/.git/
warning: You appear to have cloned an empty repository.

N? er katalogen minpakke laget, og denne katalogen vil v?re tom siden det ikke lagt inn noe innhold forel?pig.

N? kan du begynne ? dytte inn innhold, la oss si at vi lager en fil til ? begynne med, kalt minpakke.spec. F?rst legge den til:

$ git add minpakke.spec

Deretter commit:

$ git commit -m 'Initial commit'
[master (root-commit) 1a2dcd1] initial commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 minpakke.spec

Push endringene til remote:

$ git push origin master
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 3.38 KiB, done.
Total 6 (delta 0), reused 0 (delta 0)
To gitolite@koji-git.uio.no:uio-app-sync
 * [new branch]      master -> master

Videre kan vi bruke git push uten ? spesifisere hvordan ting skal merges.

3???Enkel bruk av git

Her forutsettes det at aktiv katalog er minpakke.

3.1???Legge til en fil lokalt

For ? legge til en fil:

git add <filnavn>

Filen m? eksistere fra f?r.

Se for ?vrig git-add(1).

3.2???Sjekke inn endringer lokalt

For ? sjekke inn endringer:

git add [filer...]
git commit [filer...]

Hvis man ikke vil kontrollere hvilke filer det gjelder trenger man ikke spesifisere filer. Da vil git s?ke gjennom hele katalogen for ? finne ut hva som er endret. Det vil komme opp en editor der man skal skrive commit-melding. Man kan isteden angi denne p? kommandolinjen:

git commit -m '<melding>' [filer...]

Man kan ogs? velge ? gj?re "add" i samme prosess, dvs. at man slipper ? gj?re en egen "git add", men kun hvis filen finnes i git fra f?r:

git commit -a [filer...]

Ting kan kombineres:

git commit -a -m '<melding>' [filer...]

Se for ?vrig git-commit(1).

3.3???Pushe endringer til sentralt repo

En "git commit" vil kun sjekke inn endringer lokalt, i ditt lokale repository. For ? f? dette inn p? git-serveren m? man bruke push:

git push

Se for ?vrig git-push(1).

3.4???Hent endringer fra sentralt repo

Man kan oppdatere sitt lokale repo fra det sentrale ved ? bruke pull:

git pull

Se for ?vrig git-pull(1).

4???Enkel bruk av branching

For ? se hvilke grener som er tilgjengelig, og hvilken som er aktiv (angitt med stjerne "*"):

$ git branch
* master

For ? lage en ny branch:

$ git branch test

$ git branch
* master
  test

For ? endre aktiv branch:

$ git checkout test
Switched to branch 'test'

$ git branch
  master
* test

Man kan ogs? ta en snarvei og spesifisere ny branch ved checkout:

$ git checkout -b test2
Switched to a new branch 'test2'

$ git branch
  master
  test
* test2

4.1???Merging

Dersom man er forn?yd med endringene som er utf?rt i en branch, kan man gj?re merge av denne inn til en annen, f.eks. fra en test-branch til en prod-branch. I eksemplet gj?r vi merge av innholdet i test inn i master:

  1. S?rg for at aktiv branch er den som det skal merges inn i:

    $ git checkout master
    Switched to branch 'master'
    
  2. Kj?r git merge:

    $ git merge test
    Updating bdebdfc..10c644c
    Fast-forward
     minpakke.spec |    1 +
     1 files changed, 1 insertions(+), 0 deletions(-)
    

    Dersom du f?r en konflikt ser det slik ut:

    Auto-merging minpakke.spec
    CONFLICT (content): Merge conflict in minpakke.spec
    Automatic merge failed; fix conflicts and then commit the result.
    

    Ev. konflikter m? l?ses f?r en merge kan fullf?res.

  3. Til slutt gj?res commit:

    $ git commit -a -m 'melding'
    [el6 5ad8e86] melding
    

For mer informasjon, se git-merge(1).

4.2???Slette en branch

Dette gj?res slik:

$ git branch -d test
Deleted branch test (was 8f08040).

Dette forutsetter at man har gjort git merge f?rst. Dersom endringene i 'test' skal kastes uten videre, bruk git branch -D test.

For mer informasjon, se git-branch(1).

Av Trond Hasle Amundsen
Publisert 20. apr. 2013 17:26