2013-05-29 12 views
16

Sto provando a migrare un repository git da Kiln a Github. Posso aggiungere il nuovo telecomando bene, ma quando provo a spingere master al nuovo telecomando, ho il seguente errore:Rimuovere la directory '.git' da git repo?

Counting objects: 8691, done. 
Delta compression using up to 8 threads. 
Compressing objects: 100% (3000/3000), done. 
remote: error: object a9ee490ac00987835de30bdbc851da5e8d45d28b:contains '.git' 
remote: fatal: Error in object 
error: pack-objects died of signal 13 
error: failed to push some refs to '[email protected]:Account/repo.git' 

Commit a9ee490ac00987835de30bdbc851da5e8d45d28b ha i seguenti file in essa contenuti:

.git/ 
CHANGELOG.md 
JSONKit.h 
JSONKit.m 
README.md 

Ovviamente qualcuno in passato, usando hg, ha effettuato il check in di un repository completo di git in una sottodirectory.

Mi piacerebbe solo uccidere quella directory interamente, ma sto avendo problemi a rimuovere quel file dalla cronologia git.

La risposta in pushing a git repo fails with error: contains '.git' non aiuta, perché ho il repository come un repository git, non un mercurial.

ho provato git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch .git', ma ho l'errore:

Rewrite 7dbd0970d6c79215d11994b4a9b8091b2e954cfb (326/442)error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/HEAD' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/config' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/description' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/applypatch-msg.sample' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/commit-msg.sample' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/post-update.sample' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/pre-applypatch.sample' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/pre-commit.sample' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/pre-rebase.sample' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/prepare-commit-msg.sample' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/hooks/update.sample' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/index' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/info/exclude' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/logs/HEAD' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/logs/refs/heads/master' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/objects/pack/pack-43fac03d375df5c1e380c5e522ba6bcb9b4e1ec1.idx' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/objects/pack/pack-43fac03d375df5c1e380c5e522ba6bcb9b4e1ec1.pack' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/packed-refs' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/refs/heads/master' 
error: Invalid path 'Account/Libraries/ShareKit/Submodules/JSONKit/.git/refs/remotes/origin/HEAD' 

e la storia non sembra essere cambiato. Sono al limite della mia conoscenza git. Qualcuno può aiutare?

+0

È il repository open source? sei in grado di condividerne una copia? –

+0

Ah, non c'è bisogno di condividere una copia del repository in questione, sono riuscito a costruire un repository Git con lo stesso tipo di albero cattivo, che posso usare a scopo di test. –

+0

possibile duplicato di [spingendo un repository git fallisce con errore: contiene '.git'] (http://stackoverflow.com/questions/14728751/pushing-a-git-repo-fails-with-error-contains-git) –

risposta

1

Hai provato con il seguente comando?

git filter-branch --tree-filter 'rm -Rf .git' HEAD 

git filter-branch documentation indica che questo sarebbe stato più lento di --index-filter, ma potrebbe fare il lavoro.

+1

Sfortunatamente, non penso che questo approccio funzionerà, correndo contro un repository di test che Ho costruito, questo è l'output che ottengo: $ git filter-branch --tree-filter 'rm -Rf foo/.git' HEAD ..... Riscrivi 6652877677cf01a7b668704134d5e8bb62bfe317 (6/6) errore: percorso non valido 'foo/.git/folder/zero ' errore: percorso errato' foo/.git/hero ' errore: percorso' foo/.git/zero 'non valido Ignorare percorso foo/.git/folder/zero Ignorare percorso foo /. git/hero Ignorare path foo/.git/zero ATTENZIONE: Ref 'refs/heads/master' è invariato –

+0

... quindi sembra che usi anche 'git filter-branch --tree -filter 'ha il problema che @dana ha incontrato nella domanda. Penserei che usare BFG sia probabilmente un'idea migliore a questo punto. –

0

quanto ho capito forno vi permetterà di clonare un repository sia come git o Mercurial questi giorni, quindi clonare come mercuriale, utilizzare il mercurial filemap solution you already found spinta che Mercurial repo come un nuovo repo al forno e poi clonarlo giù come idiota. Quindi avrai un repository git che puoi inviare a github.

27

Utilizzare BFG Repo-Cleaner, un'alternativa più semplice e veloce a git-filter-branch appositamente progettato per la rimozione di file dalla cronologia di Git.

Seguire attentamente le istruzioni qui: https://rtyley.github.io/bfg-repo-cleaner/#usage - ma la corona è proprio questo: scaricare il BFG jar (richiede Java 6 o superiore) ed eseguire il comando:

$ java -jar bfg.jar --delete-folders .git --delete-files .git --no-blob-protection my-repo.git 

tutta la vostra storia repository verranno scansionati, e qualsiasi file o cartella denominata .git verrà rimosso. Ho provato questo contro uno test repo appositamente costruito contenente una cartella .git, e ha funzionato bene.

grazie a Michel Jouvin per reminding me che file chiamato '.git' sono anche illegali in Git (e il messaggio di errore riportato da Git non lo rende immediatamente evidente che essi sono file, piuttosto che le cartelle) , Ho aggiornato questa risposta per riflettere questo.

Divulgazione completa: sono l'autore di BFG Repo-Cleaner.

+0

Ho avuto lo stesso problema e questa soluzione ha fatto il trucco per me. –

+1

Grazie !! Ho avuto lo stesso identico problema e questo mi ha salvato la vita. Se potessi, segnerei questo come la risposta giusta. –

+1

Ho provato l'approccio git filter-branch e non ha funzionato, ma l'utilizzo del repo-cleaner bfg ha funzionato come un incantesimo. Grazie! – omarshammas