2009-07-28 10 views
15

Come si imposta un repository git in cui alcuni utenti possono vedere alcune parti del codice sorgente e altri utenti possono vederlo tutto? Ho visto molte guide solo per dare accesso a determinati utenti, ma questo presuppone che tutti dovrebbero avere accesso in lettura. Ho anche sentito parlare di gitosi, ma non sono sicuro che lo supporti e non ha avuto alcun impegno in oltre un anno, quindi penso che sia morto.Come configurare un repository git in cui diversi utenti possono vedere solo alcune parti?

risposta

1

Il protocollo git nativo non supporta questo; git assume in molti posti che tutti abbiano una copia completa di del della storia completa .

Detto questo, un'opzione potrebbe essere quella di utilizzare git-subtree per suddividere parte del repository nel proprio repository di sottoinsieme e unirsi periodicamente.

2

Git non supporta il controllo di accesso nel repository. È possibile possibile implementare il controllo degli accessi sul repository da soli, utilizzando hooks, in particolare il gancio update.

11

In breve: non è possibile. Git è il sistema di controllo della versione basato su snapshot (almeno a livello concettuale), non basato su changeset. Tratta il progetto (repository) nel suo complesso. La cronologia è una cronologia di un progetto, non un'unione di storie di file singoli (è più che l'unione di storie per file).

Uso ganci come update-paranoid gancio in contrib o VREFs meccanismo di gitolite, è possibile consentire o negare l'accesso al repository, è possibile consentire o negare accesso ai singoli rami. Puoi persino vietare qualsiasi commit che cambi le cose nella sottodirectory specificata. Ma il progetto è sempre trattato nel suo complesso.

Beh, c'è una cosa che si può fare: creare una directory che si desidera limitare l'accesso a in modulo, e limitare l'accesso a questo repository modulo.

+0

Git non è basato su changeset ?? – orbfish

+3

No, non lo è. Impegna gli oggetti puntati all'oggetto tree che rappresenta lo snapshot dello stato del repository. Il changeset è la differenza tra due alberi, di commit corrente e genitore. –

2

Jörg ha già indicato che è possibile utilizzare gli hook per farlo. Esattamente quale hook (s) hai bisogno dipende dal tuo setup. Se si desidera ottenere le autorizzazioni su un repository a cui viene inviato il push, è necessario l'hook update come ha detto. Tuttavia, se si tratta di un repository su cui stai effettivamente lavorando (commit e fusione), avrai bisogno anche degli hook pre-commit e post-merge. Lo githooks manpage (collegato a Jörg anche a questo) nota che in effetti esiste uno script nella sezione contrib che dimostra un modo per farlo. Puoi ottenerlo afferrando un git tarball o estraendolo dal repository gitweb git: setgitperms.perl. Anche se stai usando il gancio di aggiornamento, questo potrebbe essere un modello utile.

Problemi correlati