Git Server Ti piace GitHub? [chiuso]


412

Sono da molto tempo un utente Subversion che proverà Git. Ne ho letto un po 'e capisco la natura distribuita - posso vedere molti dei vantaggi.

Tuttavia, mi piace l'idea di un server centrale in grado di assumere il ruolo di backup, sistema di registrazione, ecc., Mentre continuo a utilizzare Git per le mie diramazioni e condivisioni locali. Non sto facendo un progetto open source, quindi non posso usare Github (senza pagare), quindi la mia domanda è davvero: qual è il modo migliore per eseguire un server git locale?

Mi rendo conto che questo potrebbe essere in contrasto con il modello di utilizzo standard di Git, ma sarà utile per il mio progetto. Tuttavia, qualsiasi preoccupazione che potrei aver trascurato è sempre benvenuta.

Grazie!


50
L'uso di un server centralizzato come descritto è in realtà un modello di utilizzo standard per i sistemi di controllo della versione distribuita, quindi non preoccuparti. :-)
Aasmund Eldhuset

8
Ahh - pensavo fosse più un'eccezione. Volevo respingere "se hai la centralizzazione, allora non la capisci!" Commenti. Grazie.
skaz,

27
Un pensiero ragionevole. :-) Secondo la mia comprensione, il punto cruciale dei VCS distribuiti non è che non dovresti avere un repository centrale (questo è spesso molto utile), ma piuttosto che non sei costretto a usare il repository centrale - puoi eseguire si impegna a livello locale ed è facile scambiare revisioni con persone specifiche, se necessario, e puoi anche avere diversi repository "centrali" (in git, qualsiasi altro repository, indipendentemente dal ruolo che ha, viene chiamato un telecomando , e puoi aggiungine quanti ne desideri). E i DVCS hanno spesso modelli di ramificazione molto flessibili (git brilla qui).
Aasmund Eldhuset,

15
Riassumendo / riformulando il commento di Aasmund: il punto di un DVCS è spesso non eliminare il repository centralizzato, ma fornire a ogni singolo altro utente anche la piena potenza del VCS.
Cascabel,

2
Google ha un nuovo repository Cloud Source che consente repository privati: cloud.google.com/tools/cloud-repositories Inoltre, FWIW, non sono sicuro del perché questo sia contrassegnato come fuori tema!
Josh M.,

Risposte:


203

Puoi semplicemente configurare un server ssh ed eseguire un repository centrale lì. Tutti gli sviluppatori, quindi, accettano semplicemente (per motivi di politica) di inviare al server una volta terminati i commit. Questo è il modello di utilizzo sul mio posto di lavoro. Molto simile a CVS e SVN.

  1. Trova un posto dove mettere il repository ( /var/gitrootad esempio).
  2. Crea un nuovo repository ( mkdir project.git && cd project.git && git init --bare --shared=group).
  3. Quindi sul tuo client, clona il repo remoto ( git clone ssh://yourserver.com/var/gitroot/project.git && cd project)
  4. aggiungi alcuni file ( git add README)
  5. commit ( git commit -m "Initial import"),
  6. push ( git push origin master)

Questo dovrebbe preparare le cose per te.


5
Proprio per questo sono chiaro: installa git su un altro server (accessibile) e crea un repository. Chiedi ai clienti di clonare quel repository. Quando un client completa una correzione, spingere verso l'alto nel repository del server. Grazie!
skaz,

8
+1. È un dato di fatto, questo è il modello di utilizzo per l'uso collaborativo di git.
Aasmund Eldhuset,

1
Questo errore si è verificato quando si è spinto il master di origine :::: Conteggio oggetti: 3, fatto. Scrittura di oggetti: 100% (3/3), 244 byte | 0 byte / s, fatto. Totale 3 (delta 0), riutilizzato 0 (delta 0) remoto: errore: autorizzazione insufficiente per l'aggiunta di un oggetto al database del repository. / Oggetti remoto: fatale: impossibile scrivere errore oggetto: decompressione fallita: decomprimere oggetti uscita anomala A ssh: //localhost/var/gitroot/project.git! [remote rifiutato] master -> errore master (errore di decompressione): impossibile inviare alcuni ref a 'ssh: //localhost/var/gitroot/project.git'
Abdo,

3
Ho scritto un post sul blog su come impostare un repository git locale qualche tempo fa. Sono 10 minuti al massimo. La cosa difficile è impostare adeguate strategie di backup del server locale, amministrare il server, ecc.
atmosx

Non puoi semplicemente correre git init --bare project.git?
Dan Dascalescu il

199

Gitorious è un'interfaccia web open source per git che puoi eseguire sul tuo server, proprio come github:

http://getgitorious.com/

Aggiornare:

Anche http://gitlab.org/ è un'altra alternativa.

Aggiornamento 2:

Gitorious ora si è unito a GitLab


5
Sembra carino, ma l'installazione sembra pesante (specialmente per un utente non rails) [ cjohansen.no/en/ruby/setting_up_gitorious_on_your_own_server ]
gatoatigrado

1
Il processo di installazione sta per essere fortemente semplificato e reso meno "Rails-y". C'è anche un programma di installazione automatizzato per server CentOS (e un dispositivo predefinito) disponibile nella pagina Installa Gitorious su getgitorious.com.
thomanil,

3
Sembra che Gitorious non sia più una soluzione di hosting privato open source gratuita.
Mingming

1
Se vai su getgitorious.com e fai clic su Installer in Gitorious Community Edition non ti offre una soluzione di hosting privato open source gratuita?
Craig,

16
Anche gitlab.org è un'altra alternativa che è stata sviluppata dalla mia risposta.
Craig,

74

Prova GitLab

Il miglior strumento Git GUI che abbia mai usato. È molto simile a GitHub.

È open source (licenza MIT) ed è il software di gestione git più installato con oltre 25.000 installazioni. Ha versioni mensili e una community attiva con oltre 375 collaboratori. Puoi avere un numero illimitato di repository privati, interni e pubblici sul tuo server. È un'app Ruby on Rails che funziona sulla maggior parte delle piattaforme Unix.


1
Sono d'accordo, è fantastico. (+1) Ma a partire da questo commento è difficile installarlo. Sarebbe bello se potessero impacchettare rpm, deb ecc.
Synesso

2
Ho scoperto che la configurazione relativamente nuova di uno script singolo per Ubuntu è piuttosto indolore. Anche senza di essa si tratta principalmente di seguire le istruzioni fuori dal sito. Non ho mai usato rotaie o addirittura server Ubuntu e l'ho fatto funzionare per primo.
Jon Shier,

Ho riscontrato dei problemi con l'integrazione con Active Directory tramite LDAP.
riezebosch,

2
In realtà, al giorno d'oggi GitLab è abbastanza facile da installare. È solo una questione di spacchettare un pacchetto. Vedi about.gitlab.com/downloads
Giobbe

2
Gitlab Enterprise non è gratuito, ma esiste un'edizione della community , che è gratuita e anche facile da installare. Tuttavia, richiede circa 800 MB di spazio su disco, in quanto installa un paio di motori di database e molte dipendenze.
OndroMih,

39

Se non ti dispiace sporcarti con la riga di comando, gitolite è una vera delizia quando lavori in un ambiente aziendale in cui devi impostare diritti di accesso differenti su diversi repository. È una specie di versione più recente della gitosi menzionata da @Chris.

Ecco il riassunto dal sito web dell'autore:

Gitolite ti consente di utilizzare un singolo utente su un server per ospitare molti repository git e fornire accesso a molti sviluppatori, senza dover fornire loro userid reali o accesso shell al server. La magia essenziale nel fare ciò è l'accesso al pubkey di ssh e il file authorized_keys, e l'ispirazione era un vecchio programma chiamato gitosi.

Gitolite può limitare chi può leggere (clonare / recuperare) o scrivere su (push) un repository. Può anche limitare chi può spingere verso quale ramo o tag, che è molto importante in un ambiente aziendale. Gitolite può essere installato senza richiedere i permessi di root e senza software aggiuntivo di git stesso e perl.

Ha un set di funzionalità piuttosto completo, ma una cosa che mi piace molto è che tutto il giorno la modifica della configurazione viene eseguita attraverso un repository git speciale. Cioè, aggiungere un utente è giusto

  • Aggiungi utente al file di configurazione
  • Aggiungi la chiave ssh dell'utente
  • Commetti il ​​cambiamento
  • Spingilo in gitolite
  • Voila, la configurazione è live!

E quando è necessario esaminare il codice tramite browser, gitolite ha il supporto per "sincronizzare" la configurazione con gitweb. O se ti piace cgit , che è un ottimo frontend web per git scritto in C, meglio, allora dovresti guardare questo how-to .


24

Potresti prendere in considerazione Gitblit , un server Java Git puro, open source, integrato, visualizzatore e gestore di repository per piccoli gruppi di lavoro.


Gitblit sembra perfetto per la mia applicazione, ma mi preoccupa che l'ultima versione sia stata nel 2016.
Roberto,

1
@Roberto, un punto valido. Immagino che dipenda da ciò di cui hai bisogno o da ciò che è importante per te. Se funziona per te così com'è, potrebbe essere comunque una scelta valida. Se sei preoccupato per la correzione tempestiva dei bug o hai bisogno di più funzionalità, potrebbe non esserlo.
Florian,

15

Browser Bare Bones

git instaweb --httpd=webrick

dal libro git scm

combinalo con qualcosa come l'approccio qui descritto per lo sviluppo distribuito (credito a datagrok per il concetto ben descritto)

Avviare un server git una tantum da qualsiasi repository locale.

L'ho già twittato ma ho pensato che potesse usare un po 'di espansione:

Abilita flusso di lavoro git decentralizzato: git config alias.serve "demone --verbose --export-all --base-path = .git --reuseaddr --strict-percorsi .git /"

Supponi di usare un flusso di lavoro git che implica lavorare con un repository "ufficiale" di base da cui estrarre e trasferire le modifiche. Sono sicuro che molte aziende lo fanno, così come molti utenti di servizi di hosting git come Github.

Supponiamo che il server, o Github, si blocchi per un po '.

Dopotutto, uno dei motivi per cui usi git è che hai una copia dell'intera cronologia del progetto nel tuo clone locale.

Puoi continuare a scrivere codice e impegnarti, mentre aspetti che il team operativo torni in vita il server. Nota per se stessi: acquistare ciambelle per il team operativo.

Ma cosa succede se, durante questo periodo di inattività, si desidera collaborare con un'altra persona, che potrebbe non essere un esperto git, sullo stesso repository?

Oppure, invece di tempi di inattività, cosa succede se tu e il tuo collaboratore siete sul campo e per qualche motivo non riuscite a ottenere la vostra VPN che vi consenta di connettervi al vostro repository ufficiale?

Oppure, se tu e il tuo collaboratore state apportando una serie di modifiche sperimentali e anche se avete accesso, non volete spingere il vostro casino incompiuto nel repository centrale ufficiale? (Nemmeno come rami di funzione.) Forse sei nel mezzo di ripulire un rebase disastroso o unirti e i rami sono dappertutto.

Bene, git, come probabilmente saprai, è un sistema di controllo della versione "distribuito" .

Anche se potresti usare un repository git "ufficiale" centrale nel tuo flusso di lavoro, hai comunque la possibilità di usare git in modo peer-to-peer, dove tu e il tuo collaboratore semplicemente costruite e condividete gli impegni tra di loro, e il centrale il server non deve nemmeno saperlo.

Quindi, come si ottengono le filiali e si impegna con esse o viceversa?

  • È possibile utilizzare le funzionalità di git per inviare patch via e-mail. Ma questo è un po 'inelegante e richiede alcune conoscenze sulla loro fine su come applicare le patch inviate via e-mail.
  • È possibile creare un account sul proprio computer per consentire al proprio collaboratore di accedere. Ma forse non hai accesso root locale o forse non ti fidi di loro con l'accesso SSH alla tua casella.
  • Potresti clonare il tuo repository su una levetta e passarlo avanti e indietro. Ma è piuttosto noioso, soprattutto se ti trovi nella stessa rete locale e richiede una chiavetta USB.

Probabilmente puoi pensare anche ad altri metodi. Ma c'è un modo semplicissimo: se riesci a vederci sulla rete, puoi avviare un server git una tantum che possono usare come telecomando per clonare, recuperare, estrarre le modifiche e ucciderlo quando sei fatto con esso.

Lo strumento che lo abilita è git daemon, che ha molte opzioni e funzionalità, ma allo scopo di abilitare questo semplice one-off "basta servire il repository in cui mi trovo", il modo di usarlo è creare un alias. Mi piace chiamarlo git serve. Correre:

git config --global alias.serve "daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/"

L'uso di un alias è in realtà cruciale, perché gli alias git vengono eseguiti nella directory di base dell'albero di lavoro. Quindi il percorso '.git' indicherà sempre il posto giusto, indipendentemente da dove ti trovi nella struttura di directory del tuo repository.

Usa il tuo nuovo git servecosì:

  1. Corri git serve. "Pronto a rimbombare", segnalerà. Git è un coglione.
  2. Scopri il tuo indirizzo IP. Di 'che è 192.168.1.123.
  3. Di '"hey Jane, non sono pronta / in grado di portare questi commit all'origine, ma puoi recuperare i miei commit nel tuo clone correndo git fetch git://192.168.1.123/"
  4. Premere ctrl + c quando non si desidera più servire quel repository.

Potresti anche dire a Jane git clone git://192.168.1.123/ local-repo-namese non ha ancora un clone del repository. In alternativa, utilizzare git pull git://192.168.1.123/ branchnameper recuperare e unire in una sola volta, utile se si lavora insieme su un ramo di funzionalità.

Nota, tuttavia, che non dovresti farlo su reti ostili se tieni segreti nel tuo repository, perché non c'è autenticazione. Non pubblicizza la sua esistenza, ma chiunque abbia un port scanner può trovarlo, connettersi ad esso e clonare il repository.

Ma non è super pericoloso perché è di sola lettura per impostazione predefinita. Leggi git daemonattentamente la pagina man se pensi di voler abilitare l'accesso in scrittura. Nel caso in cui desideri ottenere i commit del tuo collaboratore, è molto più sicuro lasciarlo in sola lettura e chiedere al tuo collaboratore di eseguire anche questo comando, in modo da poterlo estrarre.

Tangenzialmente correlati: in tema di server unici, se si desidera condividere temporaneamente un gruppo di file statici su HTTP: python -m SimpleHTTPServer


11

Se hai bisogno di un server GIT buono e facile di quello che devi provare GitBlit. Inoltre uso gitolite ma è solo un server, con GitBlit ottieni tutto in uno, server, admin, repository. gestore ... URL: http://gitblit.com/


9

https://rhodecode.com è un'app Web open source per Git & Mercurial che può essere facilmente installata su qualsiasi sistema operativo (incluso un programma di installazione).

RhodeCode (la nuova versione si chiama RhodeCode Enterprise) aggiunge funzionalità Git mancanti come la revisione del codice e generalmente parla molto velocemente e in modo affidabile.


1
In realtà gestisco la mia istanza qui: code.gmgauthier.com . La versione 3.x è straordinariamente pulita e stabile. Lo uso per molto più del codice, in realtà (però, ce n'è un sacco lassù). Lo uso per conservare copie master delle mie riviste personali, manoscritti per due libri, script di podcast e bozze di blog. È ideale per questo, in parte perché rende sia Markdown che RestructuredText per te, rendendo le bozze molto leggibili da qualsiasi luogo.
Greg Gauthier,

8

Puoi anche installare Indefero , è un clone GPL di GoogleCode, poiché supporta sia Subversion che Git, puoi avere una transizione graduale. Sono l'autore di Indefero.


Lo sto usando e mi piace. Ma il design è leggermente obsoleto. È ancora mantenuto?
Jaroslav,


8

Potrebbe non essere la configurazione del server git più comune , ma avendo giocato con diversi layout, strumenti, mirroring e schemi di autorizzazione, direi che un'alternativa piuttosto solida per i repository aziendali è Gerrit , che può sembrare sorprendente poiché è più noto come un strumento di revisione del codice. Abbiamo iniziato a usarlo come revisione del codice e lentamente è diventato il nostro repository principale, deprecando g3 / gitolite

  • È semplice da distribuire (praticamente rilasciare il .war in un tomcat)
  • ha un'interfaccia utente Web per gestire repository, gruppi e autorizzazioni (o un ssh cli)
  • ha un'implementazione java ssh e git integrata, quindi non hai nient'altro da configurare
  • Supporto per ldap per utenti e gruppi (di solito un must per le aziende)
  • un sistema di autorizzazioni molto flessibile (con gruppi di progetti, eredità di autorizzazioni, limitazione di lettura / scrittura / ramificazione / scritture non visualizzate / ecc.)
  • capacità di revisione del codice (se ti piace quella cosa)
  • repo mirroring (per inviare alcuni repository a github o altri repository pubblici)

Inoltre, viene utilizzato da progetti di grandi dimensioni (ad esempio Android, Chrome), quindi scala e ora è abbastanza solido. Consenti ai tuoi utenti l'autorizzazione PUSH se desideri consentire di ignorare la parte di revisione del codice.


7

Per un hosting remoto Come altri hanno detto bitbucket.org offre repository privati ​​gratuiti, lo sto usando senza problemi.

Per la rete locale o LAN aggiungerò questo scm-manager.org (un singolo file eseguibile, è davvero semplice da installare, è realizzato su Java e può essere eseguito su Linux o Windows). Nel caso in cui lo installi, queste sono password predefinite.

Username: scmadmin
Password: scmadmin

3
grazie per aver fornito le credenziali predefinite.
Ryan Williams,

6

Nel frattempo, il sito di hosting Mercurial Bitbucket ha iniziato a offrire anche repository Git.

Quindi, se non hai bisogno di un server locale , solo un posto centrale dove puoi ospitare gratuitamente repository Git privati, IMO Bitbucket è la scelta migliore.

Gratis, ottieni illimitati repository Git e Mercurial privati ​​e pubblici.
L'unica limitazione è che nel piano gratuito, non più di cinque utenti possono accedere ai tuoi repository privati ​​(per di più, devi pagare).
Vedi https://bitbucket.org/plans per maggiori informazioni!



2

Se vuoi solo il tuo repository in una posizione centrale, questo è abbastanza facile con il controllo della versione distribuita come Git:
puoi semplicemente mettere il tuo repository centrale in una cartella condivisa su una macchina centrale e tutti possono clonarlo da lì.

Se desideri un sito Web "reale" sul tuo server locale, conosco il sito Web di hosting Git http://repo.or.cz .
Sembra avere meno funzionalità di GitHub, ma a differenza di GitHub, puoi ottenere il codice sorgente e ospitarlo sul tuo server locale.

Disclaimer: ho letto solo su repo.or.cz, non l'ho mai provato da solo!


2

per semplici configurazioni, è possibile fornire accesso ssh a un server centrale e impostare la directory di lavoro di ciascun utente per eseguire il push / pull da questa "origine". Sarebbe la configurazione più semplice e comune per i piccoli team.

Potresti anche esaminare la gitosi che ti offre un server http e la possibilità di gestirlo da remoto. In questo modo non devi concedere l'accesso ssh e tutto ciò che comporta per ogni committer.


2

Per aggiungere ciò che ha detto Chris, puoi usare gitosis (http://eagain.net/gitweb/?p=gitosis.git) per controllare chi può effettivamente accedere al repository.

A seconda dell'utilizzo, è anche possibile utilizzare hook (nella cartella .git / hooks) in modo che il codice venga automaticamente inserito nel filesystem del server quando si effettua il push dal computer locale. Ecco uno script popolare per farlo: http://utsl.gen.nz/git/post-update . Questo non sarà necessario in tutti i casi però.


Il link allo script post-aggiornamento è morto ...
Morten Jensen,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.