1
1

Jeg er kommet ud i det private erhversliv og har fundet ud af at det somme tider er nødvendigt at samarbejde med mine kollegaer om kode.

Vi har aldrig været udsat for den problemstilling før, og har prøvet alle mulige ting for at kunne dele kildekode.

Vi har feks løbende sørget for at sende hinanden worddokumenter med kildekoden over email. Det fungerer rigtig godt indtil man har brug for at to personner må rette i den samme kode.

Hvis bare der fandtes et værktøj så man kunne arbejde på den samme kode flere personer samtidigt uden at træde hinanden over tæerne så ville det være fedt. Måske endda også noget hvor man kunne lave backups løbende, eller at kunne se sine ændringer over tid.

Hvordan løser I dette problem i jeres grupper/firmaer?

-- Edit -- Jeg så på #diku at nogen foreslog at dele kode via Facebook. Hvad er jeres erfaringer med det?

asked 11 Jan '12, 19:44

Munter's gravatar image

Munter
19615
accept rate: 100%

edited 11 Jan '12, 20:34

Sebastian%20Paaske%20T%C3%B8rholm's gravatar image

Sebastian Pa... ♦♦
86531133

This sounds like a troll...

(11 Jan '12, 22:36) IdolfHatler IdolfHatler's gravatar image

Revision control på DIKUs system

Mens der findes flere udmærkede frie og gratis hjemmesider til "source code management" med support for både git, bazaar, mercurial, svn osv., kan det måske være en fordel at køre nogle ting på DIKUs system.

git

Der findes to programmer der kan gøre det nemmere at sætte git repos op på servere: gitosis og gitolite. Dog virker begge vist bedst med root access (hvilket almindelige dødelige datalogistuderende af gode grunde ikke har). Med et lille script og nogle public ssh keys er det dog nemt at sætte et ikke-offentligt git repo op uden nogle ekstra programmer (det er nemmere at sætte et offentligt repo op, men i nogle tilfælde kan der måske være formelle krav om at koden tilhørende et projekt ikke må offentliggøres før projektet er bedømt? Er der nogen der ved om det er sådan?).

Trin 0

Gem følgende fil som "gs" i $HOME:

#!/bin/bash
cmd="$SSH_ORIGINAL_COMMAND" # <git command> '<path>'
if [ "$cmd" ] ; then
    dir=`echo "$cmd" | cut -d' ' -f2`
    allowed_dirs="$@"
    for d in $allowed_dirs ; do
        if [ "'~/git/$d'" = $dir ] ; then
            git-shell -c "$cmd"
            exit
        fi
    done
    git-shell -c "You do not have access to this git repo!"
else
    echo "You do not have shell access!"
fi

Trin 1

Kør chmod +x gs.

Trin 2

Kør mkdir -p ~/git ~/.ssh.

Lav et nyt repo

For at lave et nyt git repo, kør på serveren:

git init --bare ~/git/nytrepo

Fordi altsammen foregår på din bruger, vil du altid kunne clone, pull, og push til "nytrepo". For at andre skal kunne gøre det samme --- men intet mere end det --- skal du bruge scriptet "gs" fra før samt public keys fra de folk der skal have mulighed for at læse fra og skrive til repoet.

For hver public key, tilføj følgende linje til "~/.ssh/authorized_keys" (for hver public key skal der bruges netop én linje):

command="$HOME/gs <tilladt repo>..." <public key>

I tilfældet med "nytrepo" ville det fx kunne se sådan her ud:

command="$HOME/gs nytrepo" ssh-rsa AAAAB3Nzac2[...]= ole@komputer

Og hvis "ole@komputer" skal have adgang til flere repoer, kan command="$HOME/gs nytrepo" bare ændres til command="$HOME/gs nytrepo repo2 repo3" osv.

For at klone "nytrepo" ned på din lokale maskine, kør:

git clone <bruger>@ask.diku.dk:~/git/nytrepo

hvor <bruger> er den bruger hvorpå repoet ligger (og hvor din public key er blevet associeret med scriptet "gs"). Så hvis du er Ole og arbejder på et git repo der ligger på Hans' bruger, skal du altså køre

git clone hans@ask.diku.dk:~/git/nytrepo

selv om du er Ole.

Første gang du vil skubbe dit lokale repo til serveren skal du huske at køre git push origin master:refs/heads/master i stedet for git push som du kan køre resten af tiden. git pull kan køres uden argumenter.

Hvis du oprettede dit git repo lokalt og ønsker at skubbe det til serveren bagefter, kør git remote add origin "<bruger>@ask.diku.dk:~/git/<repo>" lokalt før du pusher for første gang.

Andet

SVN har svnserve som burde fungere på nogenlunde samme måde som git-shell. Mercurial og Bazaar har sikkert lignende programmer.

Gammelt

Der er en guide på dikutals wiki til hvordan man nemt kan sætte git op på sin bruger på DIKUs servere via ssh: http://dikutal.dk/wiki/revision-control-p%C3%A5-dikus-system

EDIT 1: Jeg har flyttet wiki-artiklen herover så der ikke længere er et behov for at gå til Dikutals wiki.

link

answered 12 Jan '12, 13:58

ngws's gravatar image

ngws ♦♦
2892613
accept rate: 43%

edited 27 Jan '12, 17:37

May I recommend git:

http://progit.org/book/

Everything else is not worth it if your code base grows beyond a certain point. Do note however that git historically has been weak when handling large binary blobs. For that, you may have to look at perforce or something else instead. Especially game projects with their large amounts of artwork and other multimedia tend to need some other kind of tool.

link

answered 12 Jan '12, 11:21

jlouis's gravatar image

jlouis
6163
accept rate: 50%

1

Hvad er fordelen ved git i forhold til f.eks. SVN eller mercurial?

(12 Jan '12, 19:01) Pilen Pilen's gravatar image
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×121
×9

Asked: 11 Jan '12, 19:44

Seen: 1,018 times

Last updated: 27 Jan '12, 17:37

powered by OSQA