2011-11-29 10 views
11

ProblemaQual è la migliore pratica per tenere segreti i segreti di un repository git?

Considerare questo albero di file come il mio repository di sviluppo.

 
- foo/ 
    - .git/ 
    - [...] 
    - bar/ 
    - backupclient.py 
    - supersecretstoragecredentials.ini 

Per lo sviluppo, supersecretstoragecredentials.ini bisogno di essere riempito con le credenziali valide - mentre ho ancora di mantenere una versione pulita di esso nel repository in modo che gli altri utenti possono facilmente impostare le loro credenziali.

Possibili soluzioni

  1. .gitignoresupersecretstoragecredentials.ini e creare un supersecretstoragecredentials.ini-example,
    1. richiedere all'utente di copiare supersecretstoragecredentials.ini-example-supersecretstoragecredentials.ini.
  2. Aggiungi una posizione file di configurazione prevalente alla backup.py che viene ignorato da git, per esempio supersecretstoragecredentials_local.ini.

Come kan indicate, queste due soluzioni sono simili ma non del tutto coincidenti, workflow-saggio.

ci sono altre alternative? git possiede qualche tipo di funzionalità per risolvere questo tipo di problemi?

+2

+1 per l'opzione 1 – Thilo

risposta

11

Verificare i valori supersecretstoragecredentials.file ini con alcuni valori segnaposto e quindi

git update-index --assume-unchanged supersecretstoragecredentials.ini 

Git non tiene traccia delle future modifiche a questo file.

è possibile ripristinare l'utilizzo

git update-index --no-assume-unchanged supersecretstoragecredentials.ini 
+1

L'unico problema con questa soluzione è che un 'git pull' di un altro utente creerà conflitti di unione. Eppure, è un'ottima soluzione finché la tua base di consumatori è limitata. – joar

+0

@jwandborg buon punto da notare! ha proposto questa soluzione solo perché questo file è utilizzato per memorizzare le credenziali locali. – dexter

5

cosa si sta descrivendo in Opzione 1 è sostanzialmente coperto dal smudge passo di un contenuto filter driver.

filter driver

Sono disponibili le due opzioni presentate nella "How to work on a drop-in library?" questione.

lo script macchia avrebbe preso il tuo supersecretstoragecredentials.ini-example (con versione), copiarlo come supersecretstoragecredentials.ini (non versione, ignorato da Git), e riempire i suoi valori da un'altra fonte.

Ma oltre all'aspetto tecnico del modo in cui implementerete la vostra politica, la misura principale è assicurarsi che i vostri valori segreti non siano memorizzati in un repository Git, ma provengano da un altro referente.

3

Uso la soluzione (le due soluzioni sono le stesse, solo i nomi dei file differiscono). Hai qualche problema con esso? Che tipo di funzionalità ti aspetteresti?

Inoltre, c'è una soluzione più interessante

git update-index --assume-unchanged supersecretstoragecredentials.ini 

Speriamo che sia quello che vuoi. Tuttavia fallirebbe se l'upstream modificasse il file e tu stia tirando la modifica (non completamente sicuro sia buono o cattivo).

1

Nella mia esperienza, dopo aver tentato tutte le opzioni elencate nella domanda e nelle risposte finora, la vostra opzione # 2 si è dimostrato il più semplice e più pulito. Risolve il problema in modo affidabile, con la minima magia, ed è più facile da capire. È noioso nel migliore dei modi.

+0

E con ciò, la soluzione menzionata in http://stackoverflow.com/a/8309450/202522 è la più semplice e la migliore scelta IMO. – joar

+0

No, vuoi semplicemente '.gitingore' per il file' _local.ini'. –

0

Qualcosa che sto sperimentando in questo momento è git-secrets.

https://github.com/awslabs/git-secrets

Si aggancia nel GIT di processo e controlli impegnarsi per i modelli che assomigliano a delle credenziali che non devono essere registrati.

È necessario garantire che sia installato sul sistema di ogni sviluppatore e configurato per ogni repository git. Questo può essere ottenuto abbastanza facilmente se si integra un assegno nel processo di compilazione.

Problemi correlati