Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    58

    Configurare Git per lavorare in team

    Salve a tutti, chiedo scusa subito ai moderatori se questa non è la sezione giusta ma non ne ho trovate di migliori.

    La mia questione è relativa alla necessità di sfruttare le potenzialità di Git cercando di creare un ambiente di lavoro che sia ottimizzato per il lavoro in team. Mi spiego meglio.

    In pratica avrei la necessità di permettere a più persone di lavorare su di un sito web ospitato su un server apache (accesso con ssh) dando la possibilità a tutti gli sviluppatori di lavorare sul sito localmente (magari su una wamp o una xamp), verificare la bontà del loro operato e solo dopo committare le modifiche effettuate in produzione.

    Ho già letto approfonditamente le guide relative a git sul sito ufficiale http://git-scm.com/book/it/Git-sul-S...u-di-un-Server ma non sono riuscito a capire come operare in tal senso.

    Aspetto fiducioso qualcuno che mi permetta di comprendere meglio le dinamiche di questo strumento che a quanto sento pare essere meraviglioso ma che per me resta ancora un oggetto del mistero

    Grazie a tutti

  2. #2
    io lo utilizzo da poco GIT, su un paio di progetti, non so quanto posso esserti di aiuto.
    una volta installato il git (qui utilizziamo un server Linux) , ho creato il git repository nella directory del progetto sul server, sono state date le autorizzazioni ai vari utenti.

    Per lo sviluppo io e i miei colleghi utilizziamo RubyMine ma questo è indifferente, in ogni caso, ho scaricato il progetto in locale utilizzando il comando "clone".

    Una volta aggiornato il codice si esegue il comando "commit" per committare le modifiche e Push per inviarle al server git, poi mi sposto sul server di produzione, nel path dell'applicazione ed eseguo il comando GIT pull che aggiorna il codice sorgente con le ultime modifiche.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    58
    Grazie mille!! Mi sei stato molto utile! è proprio quello che mi serviva di capire.

  4. #4
    ottimo! se ti servono altre informazioni non esitare a chiedere, provo ad aiutarti anche se sono alle prime armi anche io con GIT

  5. #5
    Guest
    Registrato dal
    Jun 2012
    residenza
    Espoo, Finland
    Messaggi
    286
    Giusto qualche nota aggiuntiva a quanto gia' detto da delta_machine, riguardo best practices - i.e. come utilizzare Git nel migliore modo.

    Tanto per cominciare Git e' un distributed version control system, il che vuol dire che ci possono essere N persone con diverse copie dello stesso repository, anche se con delle differenze a seconda dei 'parallel streams of development' come spesso vengono chiamati (= piu' persone lavorando su roba diversa ma sullo stesso codice).

    In teoria nessuna 'copia' del repository e', diciamo, quella master/principale per via della natura distribuita di Git. Comunque, normalmente tutti i developers usano una copia del repository principale da cui fare pull come gia' detto, per scaricare aggiornamenti fatti da altri, e push per aggiornare il repository principale con i propri aggiornamenti. Quindi c'e' normalmente bisogno di un git server remoto per questo. Anche se puoi crearti un Git server da te (gitolite, gitosis, gitorious, etc...) nella maggioranza dei casi si usa un servizio di 'Git hosting', come i piu' famosi Github oppure Bitucket (c'e' anche hosted Gitorious).

    Github e' il piu' popolare ma e' gratuito solo per public repositories (per es. open source) mentre Bitbucket e Gitorious sono gratuiti anche per private repositories. Personalmente uso Github per roba open source, e Bitbucket con private repositories per roba di lavoro non open source. Il repository non deve essere necessariamente remoto; per esempio ci sono molte persone che utilizzano Dropbox come repository principale.

    Git funziona con branches per supportare percorsi di development paralleli da piu' persone; normalmente, ogni developer lavora su una diversa 'feature branch' se le modifiche apportate riguardano una nuova feature del prodotto, oppure su una 'hotfix' branch, se si tratta di correzioni critiche che richiedono un deployment ASAP. Una convenzione nel nominare le branches e' feature/<nome-della-feature> e hotfix/<nome-del-fix>.

    Altre branches normalmente presenti sono di solito 'development', che contiene il codice in attivo development, e 'master' che normalmente dovrebbe contenere l'ultima versione del codice cosi come e' stato pubblicato/rilasciato l'ultima volta. Una volta rilasciato il contenuto di master, master dovrebbe rimanere immutabile fino al prossimo rilascio. Poi vi sono i tags: ogni volta che viene creata una release, master viene aggiornato e in più un tag viene creato di solito col numero di versione del prodotto, cosi' da poter saltare direttamente ad una specifica versione del software anche quando master e' ormai cambiato (e.g. avrai tags per v1.0.0, v1.0.1, etc per esempio).

    E' importante notare che vi sono branches locali e branches remote, ovvero branches pubblicate nel repository remoto/principale, spesso chiamato 'origin'.

    Funzionamento delle branches e workflow: come dicevo la branch development e' quella che contiene gli aggiornamenti fatti da tutti i developers non ancora rilasciati -e dunque non ancora presenti in master.

    1) Se hai bisogno di lavorare su una nuova feature:
    • Dovresti creare una nuova branch da development chiamata per convenzione feature/<nome-feature> .
    • Scrivere automated tests... (spero per te che tu pratichi TDD..)
    • Scrivere il codice etc..
    • Fare pull della copia *remota* di origin/development (non local development, ma quella remota cosi' da includere nella propria branch aggiornamenti fatti da altri fino a quel momento)
    • Verificare che tutti i tests passino / all green
    • Fare checkout di development
    • Fare merge o rebase della propria hot fix branch in development
    • Correggere eventuali 'merge conflicts' (i.e. vi sono aggiornamenti tuoi e di altri che richiedono revisione per risolvere conflitti)
    • Done! A questo punto devi semplicemente pubblicare/aggiornare development verso la sua copia remota con un push
    • Cancellare feature/<nome-feature> dal momento che non serve piu'.



    2) Se invece lavori su un hotfix, per definizione significa che si tratta di una correzione di un bug del prodotto cosi' come rilasciato l'ultima volta, e dunque cosi' come e' in master. Dunque:

    • Dovresti create una nuova branch da master chiamata per convenzione hotfix/<nome-correzione>
    • Scrivere automated tests...
    • Scrivere il codice etc..
    • Fare pull della copia *remota* di origin/master
    • Verificare che tutti i tests passino / all green
    • Fare checkout di master
    • Fare merge della propria hotfix branch in master
    • Done! A questo punto devi semplicemente pubblicare/aggiornare master verso la sua copia remota con un push
    • Cancellare hotfix/<nome-correzione> dal momento che non serve piu'.


    Quello che ho appena spiegato e' il miglior modo per usare git in un team. E' il miglior workflow tu possa trovare, ed e' il risultato di anni e anni di uso di git. Purtroppo la maggioranza delle persone utilizza git in un modo molto incasinato

    Ora, detto tutto cio', la buona notizia e' che c'e' una estensione di git, chiamata git-flow, che praticamente automatizza tutto il workflow che ho appena descritto, rendendo una best practice molto, molto semplice. Leggi un po' sul sito (e magari http://nvie.com/posts/a-successful-git-branching-model/ se sei interessato).

    Un'altra nota su best practices: e' bene dividere il lavoro in piccoli incrementi cosi' che le feature o hotfix branches siano necessarie per il piu' breve tempo possibile; in questo modo, non hai neanche bisogno di pubblicare queste branches 'temporanee' e quindi mantieni un repository remoto molto pulito, con soltanto development, master e i tags

    Ovviamente puo' capitare comunque di lavorare su feature/hotfix che richiedono piu' tempo e quindi conviene pubblicarle sul repository remoto. Ma piu' lo eviti, meglio e'.

    Il post e' lungo ma questa e' soltanto una introduzione...
    Ma se vuoi imparare a lavorare come si deve con git, ti consiglio di utilizzare git-flow cosi' replichi facilmente il miglior workflow.

    Se vuoi posso salutarti Linus Torvalds (autore ti git e linux) la prossima volta che lo vedo - la sua casa qui in Finlandia e' vicino alla mia

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    58
    Originariamente inviato da Little Hawk
    Giusto qualche nota aggiuntiva a quanto gia' detto da delta_machine, riguardo best practices - i.e. come utilizzare Git nel migliore modo.

    Tanto per cominciare Git e' un distributed version control system, il che vuol dire che ci possono essere N persone con diverse copie dello stesso repository, anche se con delle differenze a seconda dei 'parallel streams of development' come spesso vengono chiamati (= piu' persone lavorando su roba diversa ma sullo stesso codice).

    In teoria nessuna 'copia' del repository e', diciamo, quella master/principale per via della natura distribuita di Git. Comunque, normalmente tutti i developers usano una copia del repository principale da cui fare pull come gia' detto, per scaricare aggiornamenti fatti da altri, e push per aggiornare il repository principale con i propri aggiornamenti. Quindi c'e' normalmente bisogno di un git server remoto per questo. Anche se puoi crearti un Git server da te (gitolite, gitosis, gitorious, etc...) nella maggioranza dei casi si usa un servizio di 'Git hosting', come i piu' famosi Github oppure Bitucket (c'e' anche hosted Gitorious).

    Github e' il piu' popolare ma e' gratuito solo per public repositories (per es. open source) mentre Bitbucket e Gitorious sono gratuiti anche per private repositories. Personalmente uso Github per roba open source, e Bitbucket con private repositories per roba di lavoro non open source. Il repository non deve essere necessariamente remoto; per esempio ci sono molte persone che utilizzano Dropbox come repository principale.

    Git funziona con branches per supportare percorsi di development paralleli da piu' persone; normalmente, ogni developer lavora su una diversa 'feature branch' se le modifiche apportate riguardano una nuova feature del prodotto, oppure su una 'hotfix' branch, se si tratta di correzioni critiche che richiedono un deployment ASAP. Una convenzione nel nominare le branches e' feature/<nome-della-feature> e hotfix/<nome-del-fix>.

    Altre branches normalmente presenti sono di solito 'development', che contiene il codice in attivo development, e 'master' che normalmente dovrebbe contenere l'ultima versione del codice cosi come e' stato pubblicato/rilasciato l'ultima volta. Una volta rilasciato il contenuto di master, master dovrebbe rimanere immutabile fino al prossimo rilascio. Poi vi sono i tags: ogni volta che viene creata una release, master viene aggiornato e in più un tag viene creato di solito col numero di versione del prodotto, cosi' da poter saltare direttamente ad una specifica versione del software anche quando master e' ormai cambiato (e.g. avrai tags per v1.0.0, v1.0.1, etc per esempio).

    E' importante notare che vi sono branches locali e branches remote, ovvero branches pubblicate nel repository remoto/principale, spesso chiamato 'origin'.

    Funzionamento delle branches e workflow: come dicevo la branch development e' quella che contiene gli aggiornamenti fatti da tutti i developers non ancora rilasciati -e dunque non ancora presenti in master.

    1) Se hai bisogno di lavorare su una nuova feature:
    • Dovresti creare una nuova branch da development chiamata per convenzione feature/<nome-feature> .
    • Scrivere automated tests... (spero per te che tu pratichi TDD..)
    • Scrivere il codice etc..
    • Fare pull della copia *remota* di origin/development (non local development, ma quella remota cosi' da includere nella propria branch aggiornamenti fatti da altri fino a quel momento)
    • Verificare che tutti i tests passino / all green
    • Fare checkout di development
    • Fare merge o rebase della propria hot fix branch in development
    • Correggere eventuali 'merge conflicts' (i.e. vi sono aggiornamenti tuoi e di altri che richiedono revisione per risolvere conflitti)
    • Done! A questo punto devi semplicemente pubblicare/aggiornare development verso la sua copia remota con un push
    • Cancellare feature/<nome-feature> dal momento che non serve piu'.



    2) Se invece lavori su un hotfix, per definizione significa che si tratta di una correzione di un bug del prodotto cosi' come rilasciato l'ultima volta, e dunque cosi' come e' in master. Dunque:

    • Dovresti create una nuova branch da master chiamata per convenzione hotfix/<nome-correzione>
    • Scrivere automated tests...
    • Scrivere il codice etc..
    • Fare pull della copia *remota* di origin/master
    • Verificare che tutti i tests passino / all green
    • Fare checkout di master
    • Fare merge della propria hotfix branch in master
    • Done! A questo punto devi semplicemente pubblicare/aggiornare master verso la sua copia remota con un push
    • Cancellare hotfix/<nome-correzione> dal momento che non serve piu'.


    Quello che ho appena spiegato e' il miglior modo per usare git in un team. E' il miglior workflow tu possa trovare, ed e' il risultato di anni e anni di uso di git. Purtroppo la maggioranza delle persone utilizza git in un modo molto incasinato

    Ora, detto tutto cio', la buona notizia e' che c'e' una estensione di git, chiamata git-flow, che praticamente automatizza tutto il workflow che ho appena descritto, rendendo una best practice molto, molto semplice. Leggi un po' sul sito (e magari http://nvie.com/posts/a-successful-git-branching-model/ se sei interessato).

    Un'altra nota su best practices: e' bene dividere il lavoro in piccoli incrementi cosi' che le feature o hotfix branches siano necessarie per il piu' breve tempo possibile; in questo modo, non hai neanche bisogno di pubblicare queste branches 'temporanee' e quindi mantieni un repository remoto molto pulito, con soltanto development, master e i tags

    Ovviamente puo' capitare comunque di lavorare su feature/hotfix che richiedono piu' tempo e quindi conviene pubblicarle sul repository remoto. Ma piu' lo eviti, meglio e'.

    Il post e' lungo ma questa e' soltanto una introduzione...
    Ma se vuoi imparare a lavorare come si deve con git, ti consiglio di utilizzare git-flow cosi' replichi facilmente il miglior workflow.

    Se vuoi posso salutarti Linus Torvalds (autore ti git e linux) la prossima volta che lo vedo - la sua casa qui in Finlandia e' vicino alla mia
    So che potrei sembrare esagerato, ma credo realmente che il contributo di persone come te, che per un semplice grazie si adoperano come hai fatto tu per aiutare chi è in difficoltà, rende Internet un luogo migliore, utile e bello.


    Grazie.

    p.s.

    Sì, salutamelo Linus

  7. #7
    Guest
    Registrato dal
    Jun 2012
    residenza
    Espoo, Finland
    Messaggi
    286
    figurati!

  8. #8
    grazie Little Hawk !
    mi stampo il tuo contributo su GIT, e lo tengo a portata di mano...cosi appena ho qualche dubbio so dove cercare.

    Ciao

  9. #9
    Guest
    Registrato dal
    Jun 2012
    residenza
    Espoo, Finland
    Messaggi
    286

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    58
    ...

    Quindi c'e' normalmente bisogno di un git server remoto per questo. Anche se puoi crearti un Git server da te (gitolite, gitosis, gitorious, etc...) nella maggioranza dei casi si usa un servizio di 'Git hosting', come i piu' famosi Github oppure Bitucket (c'e' anche hosted Gitorious).

    Github e' il piu' popolare ma e' gratuito solo per public repositories (per es. open source) mentre Bitbucket e Gitorious sono gratuiti anche per private repositories. Personalmente uso Github per roba open source, e Bitbucket con private repositories per roba di lavoro non open source. Il repository non deve essere necessariamente remoto; per esempio ci sono molte persone che utilizzano Dropbox come repository principale.

    ...
    Avrei un solo, unico, piccolissimo dubbio sulla parte in cui parli del server Git remoto.

    Immaginiamo che il progetto sul quale io stia lavorando sia un sito web, che è già su un hosting ed è già on line e raggiungibile all'indirizzo http://www.example.it

    Immaginiamo che a questo sito web, debbano essere modificate delle cosette, più o meno importanti (rifare una gallery, modifiche al css, ecc).

    Attualmente utilizzo un server di sviluppo, sul quale c'è una copia del sito che è pubblicato. Opero le modifiche sul server di sviluppo (lentissimo), verifico che tutto sia ok, copio i file modificati dal server di sviluppo in quello di produzione e incrocio le dita sperando che sia tutto ok.

    Ovviamente, come potrete immaginare, tale pratica risulta piuttosto scomoda e inefficiente.

    Vorrei utilizzare GIT per avere la possibilità di clonare il repository remoto per utilizzarlo in locale, modificarlo, testarlo (magari su un virtual host in locale su es. localhost.example.it) e se è tutto ok fare un push verso il repository remoto e vedere le modifiche effettuate funzionare correttamente su http://www.example.it.

    Come posso ottenere questo? e soprattutto, potrebbe essere un modo corretto per lavorare su un sito web?

    Grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.