2011-11-23 15 views
15

sto usando git e Codebase per un progetto.utenti smettere di commettere a git utente come sbagliato

Ho appena eseguito un test e sono in grado di eseguire il commit nel repository git con un indirizzo email e un set di nomi diversi che causano la codifica del commit da parte di un altro utente. Ho spinto questo al repository e si è mostrato come se quell'utente avesse commesso anche se ero io.

C'è un modo per impedire agli utenti di commettere o spingendo con qualcun altro i dettagli dell'utente (in modo efficace in modo che non possano "fucina" impegna come da un utente diverso)?

Edit:

Presumo questa autenticazione avrebbe bisogno di accadere nella fase di spingere commit al server dal momento che nel lavoro locale copia è semplicemente un repository il quale l'utente ha pieno accesso a, a fare qualsiasi cosa loro vogliono È quindi qualcosa che dovrei chiedere a Codebase circa forse?

Edit 2:

Git config come richiesto:

(repo/.git/config)

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    ignorecase = true 
[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = [email protected]:<redacted company name>/<redacted project name>/test.git 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
+0

Puoi pubblicare i contenuti del tuo .git/config? –

+0

Che cosa stai usando per il server? Semplice idiota, gitosi, gitolite, ...? – CodesInChaos

+1

L'OP utilizza Codebase, che è simile a GitHub. È in cima alla domanda. –

risposta

3

Ops: Mentre questa è una tecnica valida, esso assume hai effettivamente il pieno controllo sul server. Se stai utilizzando una soluzione hosted tutte le scommesse sono disattivate.

È possibile convalidare il nome dell'autore e l'e-mail nel gancio update del repository. È possibile ottenere entrambi i valori in questo modo:

#!/bin/sh 
set -- refname sha1_old sha1_new 
author_name=$(git log --pretty=format:%an $sha1_new) 
author_email=$(git log --pretty=format:%ae $sha1_new) 

Il trucco, naturalmente, è capire se questi sono validi. Ecco un trucco:

È possibile utilizzare l'opzione command="" nella configurazione ssh per creare un wrapper attorno a git-receive-pack che associa le chiavi ssh alle informazioni dell'autore. Per esempio, qualcosa di simile:

#!/bin/sh 

GV_AUTHOR_NAME="$1" 
GV_AUTHOR_EMAIL="$2" 

export GV_AUTHOR_EMAIL GV_AUTHOR_NAME 
eval exec $SSH_ORIGINAL_COMMAND 

e si dovrebbe utilizzare un qualcosa authorized_keys linea come questa:

command="~/bin/gitvalidator 'Lars Kellogg-Stedman' '[email protected]'" ssh-rsa ... 

Il risultato di tutto questo è che lo script update avrebbe le variabili d'ambiente GV_AUTHOR_NAME e GV_AUTHOR_EMAIL disponibile, e potrebbe controllare questi contro il commit e uscire con un errore se non corrispondono.

+0

È consuetudine lasciare un commento se si sottovaluta la risposta di qualcuno. Questo aiuta le persone a migliorare la qualità delle loro risposte nel tempo. Se c'è qualcosa di sbagliato in questa risposta, per favore fammelo sapere in modo che possa sistemarlo. Grazie! – larsks

+0

(... anche se ho il sospetto che fosse semplicemente una rappresaglia.) – larsks

+0

Penso che chiederò ai ragazzi di Codebase qual è la loro posizione su questo, grazie :) – Richard

-3

dispiace il mio post ha ottenuto eliminato prima ho presentato il mio ultimo aggiornamento:

È possibile impegnarsi come qualcun altro quando si hanno le loro credenziali.

solo per chiarire, lo scenario che si sta chiedendo circa è la seguente:

utenti foo e bar possono impegnarsi per il pronti contro termine. Si desidera impedire all'utente Foo di impegnarsi sul repository come barra utente.

In questo caso, la Barra utente dovrebbe proteggere la propria chiave SSH privata, proprio come se fosse protetta da una password. Come quello usato per autenticare il tuo commit.

+0

Puoi impostare il tuo nome e la tua email su tutto ciò che desideri. Non importa quale chiave ssh stai usando (o anche se stai usando ssh o no). Le chiavi SSH non hanno assolutamente nulla a che fare con il nome e l'indirizzo email registrati da git. – larsks

+0

I commit sono fatti localmente da git completamente indipendenti dal trasporto utilizzato. In una configurazione convenzionale, se si utilizza ssh come trasporto, le credenziali utilizzate per autenticare l'utente che esegue il push non devono avere nulla a che fare con il contenuto dei commit che vengono spinti. –

+0

Chiede in relazione a Codebase, che è simile a GitHub. Guardare il problema in relazione a ciò che viene effettivamente chiesto sarebbe utile quando si valutano le risposte! –

Problemi correlati