Blog: Versionskontrol med afhængige Git-projekter

Jeg har altid rodet meget med software versionskontrolsystemer, og for tiden er det Git jeg bruger tid på.
En af de ting med Git jeg ikke har set en god løsning på er håndtering af afhængigheder mellem Git-projekter.
Derfor vil jeg gerne høre jeres erfaring.

Ofte laver jeg forskellige programmerings-projekter, som afhænger af de samme grundfunktioner. Jeg nægter at starte de enkelte projekter med at kopiere grundfunktionerne ind.
Det er mere oplagt at strukturere min kode, så grundfunktioner samles i et eller flere Git-repositories, som så skal checkes ud sammen de egentlige projekter. Det giver langt bedre kontrol
med koden, og skal jeg tilføje flere grundfunktioner eller rette fejl, så er der kun et sted jeg gør det.

Min lomme-research (ca på niveau med den fineste forskning på området host) viser at der er mindst fire forskellige måder at håndtere dette på

Det jeg har set er, at Git submodule er “ok”, men ifølge dokumentationen er der flere begrænsninger der:

  • Afhænger Git-projektet Top.git af Sub.git så bliver den version af Sub,git man importerer (med git submodule add) ind også reelt den man fortsætter med. Jeg kan opgradere, men det er ikke “bare lige”.
    Egentlig kan jeg godt lide dette, men jeg vil gerne fra start bestemmer om underprojekter skal opdateres løbende mod en master-branch i underprojektets git-repository eller ej.
  • Jeg kan vist ikke klone mine hoved projekter f.eks. “Top.git” og automatisk få “Sub.git” ind. Det kræver at jeg efterfølgende kører “git submodule init” og “git submodule update”. Det er lidt kluntet.
  • “Sub.git” skal altid checkes ud inde i mine projekter. Det vil i nogle sammenhænge være smart hvis jeg f.eks. kunne checke “Sub.git” ud parallelt med “Top.git”.

Git subtree og Git-Repo har jeg ikke nået et se på endnu :-)

Jeg vil meget gerne høre jeres erfaringer med dem alle, og også om jeg har overset noget her.

/pto

Posted in computer.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>