GIT server

12 views
Skip to first unread message

Andi

unread,
May 5, 2012, 4:59:19 AM5/5/12
to lug...@googlegroups.com
Salut,

am de rezolvat o problema si poate imi poate da cineva o idee sau chiar o solutie.

Problema: instalare si configurare server GIT care sa permita lasarea rapida a proiectelor.

Ce am faut pana acum:
- instalat Ubuntu Server 10.04 (imaginea de 12.04 nu era disponibila pe Rackspace in momentul respectiv)
- instalat si configurat LAMP;
- instalat git-core si gitweb;

Ce trebuie sa faca sistemul:
- git repos in /opt/git
- exista in opt/git/core un repo care contine codul de baza cu care fiecare proiect va fi initializat;
- paginile web pentru fiecare proiect in /var/www

Workflow:
1) se lanseaza proiectul "Project1"
2) automat se va crea un nou repo in /opt/repos/project1
3) se creaza vhost-ul corespunzator;
4) se creaza repo in /var/www/project1
5) /opt/repos/project1 si /var/www/project1 sunt interconectate (adica in momentul in care programatorul preia repo din /opt/repos/project1 si face modificari, pagina web va fi automat updatata si va contine modificarile) - am folosit pentru asta scripturile din /hooks, respectiv post-commit si post-receive;

Problema mea e:
- am facut pasii 1-5 si e ok; pagina se updateaza automat;
- am facut scriptul bash care automatizeaza chestia asta;
- configurarile DNS pentru noile domenii/subdomenii le adaug (inca) manual , atat A cat si CNAME;

Intrebare:
- cum pot face ca atunci ca atat /opt/repos/core, op/repos/project1 si /var/www/project 1 sa fie interconectate? Daca de exemplu se modifica ceva in core (update de securitate sau patch) sa pot face un push catre toate proiectele din /opt/repos/project1..../opt/repos/projectX , adica sa implementaz un fel de mass-update?

Am atasat si o imagine care sper sa lamureasca mai mult situatia despre care vorbesc.

Va multumesc
Andy.


workflow.png

Alin Rus

unread,
May 5, 2012, 6:24:09 AM5/5/12
to lug...@googlegroups.com
2012/5/5 Andi <isale...@gmail.com>:
> Salut,

Salut

>
> Intrebare:
> - cum pot face ca atunci ca atat /opt/repos/core, op/repos/project1 si
> /var/www/project 1 sa fie interconectate? Daca de exemplu se modifica ceva
> in core (update de securitate sau patch) sa pot face un push catre toate
> proiectele din /opt/repos/project1..../opt/repos/projectX , adica sa
> implementaz un fel de mass-update?
>

Un commit/push din projX modifica sau nu ceva din core?

Daca da, naspa. O sa fie practic imposibil sa le sincronizezi din
cauza posibilelor conflictelor si nu o sa poti folosi commit-uri de
git, doar patch-uri.
Ai mai putea sa faci si git fetch si apoi git rebase la master pe
origin/core in fiecare proiect. Daca vrei sa faci asa o sa trebuiasca
sa ai grija de conflicte.
Daca te poti intelege cu userii de la ProjX, le spui sa faca tot
timpul rebase pe core.

Daca nu, fa-l un git submodule in fiecare projX.

Spor


> Va multumesc
> Andy.
>




--
Alin Rus
O< ascii ribbon campaign - stop html mail - www.asciiribbon.org

Andi

unread,
May 5, 2012, 6:53:34 AM5/5/12
to lug...@googlegroups.com

Nu, niciun commit din projectX nu va afecta /core.
El va afecta doar /var/www/projectX care va fi updatat automat.

Dar, in acelasi timp vreau ca /opt/repos/projectX sa fie constiend de eventualele modificari care apar in /opt/core.

In monetul de fata am asa:

/opt/repos project1                                 /var/www/project1
                                                          
                                                            git init
                                                            git add .
                                                            git commit
git --bare init
                                                            git --bare init
                                                            git add .
                                                            git commit -m "initialise"
                                                            git push /opt/repos/project1 master


Pasii descrisi imi creaza ce am nevoie initial , apoi ma ocup sa setez /hooks, atat in /opt/repos/project1 cat si in /var/www/project1 ca atunci cand modifica programatorii ceva in /opt/repos/project1, modificarile sa fie trimise automat catre /va/www/project1 si astfel sa fac update automat la pagina web.

Cum pot controla mai mult de 2 locatii astfel incat ,in principal, /opt/repos/project1 sa primeasca update-uri din /opt/repos/core dar si sa faca update, la randul sau , in /var/www/project1?

Andy

Andy

unread,
May 5, 2012, 7:10:10 AM5/5/12
to lug...@googlegroups.com
Cred va cel mai dificil va fi sa stabilesc care e master pentru restul

Adica da fac in /opt/repos/project1
git clone file:///opt/repos/core

atunci /core va fi master pentru /project1
si orice fecth din /project1 va aduce update-urile din /core.

Dar /opt/repos/project1 trebuie sa fie master pt /var/www/project1

Cum post stabili relatiile astea intre mai multe foldere?

/opt/repos/project1 nu va face push niciodata in /opt/repos/core.

Andy.


Alin Rus

unread,
May 5, 2012, 7:11:14 AM5/5/12
to lug...@googlegroups.com
2012/5/5 Andi <isale...@gmail.com>:
>
> Nu, niciun commit din projectX nu va afecta /core
> El va afecta doar /var/www/projectX care va fi updatat automat.
>
> Dar, in acelasi timp vreau ca /opt/repos/projectX sa fie constiend de
> eventualele modificari care apar in /opt/core.
>

Nu is inca lamurit de legatura dintre core si projectX.

Core contine un subset de fisiere din projectX?


> Cum pot controla mai mult de 2 locatii astfel incat ,in principal,
> /opt/repos/project1 sa primeasca update-uri din /opt/repos/core dar si sa
> faca update, la randul sau , in /var/www/project1?

Daca is asa similare de ce nu ii core branch-ul master si toate
proiectele alea branch-uri separate bazate pe master, de ce e nevoie
de repo-uri diferite?

Locatii diferite adaugi cu git remote add sau folosesti git modules in
functie de workflow-ul tau.

Sa zicem ca ai un core care contine doar

/doc
README

Si projectX care contine
/include
/src

Chestiile astea nu se suprapun asa ca folosesti in projectX git
submodules. Trebuie doar sa-ti amintesti sa updatezi.

Daca projectX e un fork de core. Prin urmare toate commit-urile din
projectX au parinti prin core n-ai ce face decat sa folosesti git
rebase si fiecare utilizator de projectX isi rezolva conflictele dupa
rebase.


>
> Andy

Alin Rus

unread,
May 5, 2012, 7:19:09 AM5/5/12
to lug...@googlegroups.com
2012/5/5 Andy <isale...@gmail.com>:
deci ai file:///opt/repos/core
dupa ai file:///opt/repos/project1
si file:///var/www/project1

?

Ultimele doua nu-s acelasi lucru? De ce ai nevoie de amandoua? Un link
simplu nu te ajuta (ln)?

ori pur si simplu git clone file:///opt/repos/project1 si o sa ai o
clona a /opt/repos/project1 in /var/www/project1

Acum mergi in /opt/repos/project1 si adaugi un remote sa-i zicem www

git remote add www file:///var/www/project1

Dupa fiecare commit adaugi un hook care pe langa ce mai faci tu acolo
mai face un push la www.

git push www master

Asta o sa-ti updateze /var/www/project1 cu ce mai e nou in /opt/repos/project1.

Andy

unread,
May 5, 2012, 7:22:08 AM5/5/12
to lug...@googlegroups.com
"Daca is asa similare de ce nu ii core branch-ul master si toate
proiectele alea branch-uri separate bazate pe master, de ce e nevoie
de repo-uri diferite?"

Pentru ca nu vreau ca cineva sa poate face push in /core.
Acesta va fi modificat doar de lead programmer.

In momentul de fata el contine o instalare minimala de Drupal...deci sute de fisiere.

Dara /care va ramane neschimbat pentru o perioada destul de lunga.

Eu trebuie sa creez un nou proiect care sa fie bazat pe /core si care trebuie sa aiba locatia in /opt/repos/project

Deci sa fac /project ca un nou branch din /core e exclus. Daca fac branch fisierele se vor regasi , pentru acel branch tot in /opt/core, corect?

Deci am nevoie de cone sau ceva.

Ok. Acuma sa zicem ca am /opt/repos/project la locul lui. rebuie sa am in /var/www/project un alt repo care sa se automatizeze cu /opt/repos/project. Partea asta o am deja facuta.

Acum.....ssh://git@.....pe PC local imi va aduce repo din /op/repos/project

si orice

git push origin master

va updata /var/www/project ----- pana aici merge.

Nu stiu cum pot face mai mult de 2 locatii/foldere/repos sa interactioneze...asta e...

Andy




Alin Rus

unread,
May 5, 2012, 7:36:03 AM5/5/12
to lug...@googlegroups.com
2012/5/5 Andy <isale...@gmail.com>:

>
> Acum.....ssh://git@.....pe PC local imi va aduce repo din /op/repos/project
>
> si orice
>
> git push origin master
>
> va updata /var/www/project ----- pana aici merge.
>
> Nu stiu cum pot face mai mult de 2 locatii/foldere/repos sa
> interactioneze...asta e...
>

Adaugi remotes. Catre cealalta locatie si faci push/fetch cu numele
remote-ului ala.

http://git-scm.com/book/ch3-5.html

Andy

unread,
May 5, 2012, 7:43:06 AM5/5/12
to lug...@googlegroups.com
http://git-scm.com/book/ch3-5.html

Orice idee e binevenita.
Ma uit peste link si fac cateva test in VirtulaBox.

Revin dupa aia sa vad cum merge. Intre timp poate mai gasesc ceva. In orice caz o sa pun la final o posibila solutie cat si scriptul care sa automatizeze chestia asta.

Andy.


Andy

unread,
May 5, 2012, 8:08:32 AM5/5/12
to lug...@googlegroups.com
Am atasat scriptul pe care il am pana acum. Poate cineva arunca o privire pe el si il poate inbunatati.

Andy

start_prj.sh
Reply all
Reply to author
Forward
0 new messages