2009-08-27 21 views
25

Il mio repository git contiene password sensibili che, per motivi fuori dal mio controllo, non possono essere rimosse al momento. In questo momento è tutto OK perché questo repository è solo per uso interno, ma mi è stato chiesto di creare un ramo sicuro da condividere con i partner.git branch senza storia

C'è un modo per creare un ramo in git e quindi rimuovere i file da esso in un modo in cui non possono essere recuperati utilizzando il registro?

Sembra un tentativo lungo, ma ho pensato di chiedere. L'unica soluzione che posso pensare è di copiare l'albero dei file in un nuovo repository git senza il file sensibile - ma poi perderei la possibilità di unire le modifiche del partner al mio repository.

risposta

29

Una cosa che si potrebbe fare è creare un ramo del repository, modificare le password e quindi creare un clone superficiale (con profondità 1) del repository che si assegnerebbe ai partner. Possono creare patch e quant'altro contro quel clone, ma non possono vedere l'intera cronologia e non possono spingere il repository da nessun'altra parte. Se stanno solo apportando modifiche, questa dovrebbe essere una soluzione praticabile. Puoi ancora accettare le patch da loro e applicare al tuo repository principale.

Vedere l'opzione --depth di git clone per ulteriori informazioni.

+0

penso che questa soluzione funziona meglio per la situazione di Ben. È più facile gestire l'accesso su base repository, piuttosto che su base di filiali. – Apreche

+4

'git clone --depth 1 [email protected]: project/projectname.git' - copia e incolla – YumYumYum

5

Uso filter-branch:

Si supponga di voler rimuovere un file (contenente informazioni riservate o violazione del copyright) da tutte le commit:

git filter-branch --tree-filtro 'rm nome file "HEAD

+0

1.)' --index-filter' dovrebbe essere più veloce di '--tree-filter'per rimuovere i file. 2.) se non si desidera modificare il repository, creare prima un nuovo ramo e riscriverlo. –

+0

Sì, c'è una discussione molto buona sulle varie tecniche nella documentazione che ho collegato a –

0

Prenderò una pugnalata a un paio di risposte. Supponiamo che tu possa creare un ramo che non contenga dati sensibili. Nuoterai quindi un clone superficiale del ramo che non conterrà la storia e quindi non potresti tirarlo via, ma potrebbe tirarti fuori forma.

L'altra cosa sarebbe clonare un nuovo repository e utilizzare gli strumenti di rimozione di git per cancellare i dati riservati. Ciò creerebbe un repository distinto che non poteva interagire se non attraverso le patch con il primo, ma avrebbe avuto tutta la cronologia.

5

git clone --depth 1 url_of_your_remote_repository

Limitazione di superficiale repository

  • non si può clonare o recuperare dal repository superficiale (Ciò significa che non è possibile effettuare un nuovo repository di utilizzare questo copia superficiale)

  • non è possibile visualizzare l'intera cronologia utilizzando il comando git log.

  • Soluzione praticabile, il tuo partner può apportare alcune modifiche e renderlo come "patch" e inviarlo al partner se desideri che il tuo partner cambi. Quindi applica le patch nel tuo albero di lavoro corrente/quali rami vuoi applicare.

    More