2013-05-29 17 views
16

Ich versuche ein Git repo von Kiln nach Github zu migrieren. Ich kann die neue Remote hinzufügen ganz gut, aber wenn ich versuche, Master auf die neue Fernbedienung zu drücken, bekomme ich folgende Fehlermeldung:Das '.git'-Verzeichnis von Git Repo entfernen?

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 die folgenden Dateien enthält:

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

Offensichtlich hat jemand in der Vergangenheit, der verwendet, in einem vollständigen git Repo in einem Unterverzeichnis eingecheckt.

Ich möchte nur dieses Verzeichnis vollständig beenden, aber habe Probleme beim Entfernen dieser Datei aus dem git-Verlauf.

Die Antwort in pushing a git repo fails with error: contains '.git' hilft nicht, denn ich habe das Repo als Git Repo, nicht ein Quecksilber.

Ich versuchte git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch .git', aber ich habe den Fehler:

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' 

und Geschichte scheint nicht verändert zu werden. Ich bin an der Grenze meines Wissens. Kann jemand helfen?

+0

Ist der Repo Open-Source? Können Sie eine Kopie davon teilen? –

+0

Ah, keine Notwendigkeit, eine Kopie des Repos in Frage zu stellen, habe ich geschafft, ein Git-Repository mit der gleichen Art von schlechten Baum zu konstruieren, die ich für Testzwecke verwenden kann. –

+0

mögliches Duplikat von [das Drücken einer git-Repo schlägt mit Fehler fehl: enthält '.git'] (http://stackoverflow.com/questions/14728751/pushing-a-git-repo-fails-with-error-contains-git) –

Antwort

1

Haben Sie mit dem folgenden Befehl versucht?

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

git filter-branch documentation zeigt an, dass dies als --index-filter langsamer sein würde, aber es könnte die Arbeit machen.

+1

Leider glaube ich nicht, dass dieser Ansatz gegen einen Test-Repo läuft Ich habe konstruiert, das ist die Ausgabe, die ich bekomme: $ git filter-branch --tree-filter 'rm -Rf foo/.git' HEAD ..... Rewrite 6652877677cf01a7b668704134d5e8bb62bfe317 (6/6) Fehler: Ungültiger Pfad 'foo/.git/folder/zero ' Fehler: Ungültiger Pfad' foo/.git/hero ' Fehler: Ungültiger Pfad' foo/.git/zero ' Pfad ignorieren foo/.git/folder/zero Pfad ignorieren foo /. git/held Ignorieren Pfad foo/.git/null WARNUNG: Ref 'Refs/Köpfe/Master' ist unverändert –

+0

... so sieht es aus wie sogar mit 'Git Filter-Zweig - Baum -filter hat das Problem, dass @dana in der Frage aufgetreten ist. Ich würde denken, dass die Verwendung von The BFG zu diesem Zeitpunkt wahrscheinlich eine bessere Idee ist. –

0

Wie ich es verstehe Ofen lassen Sie ein Repository klonen als entweder git oder Mercurial diesen Tagen, so dass es als Mercurial klonen, verwenden Sie den mercurial filemap solution you already found Push dass Mercurial Repo als neues Repo Ofen- und es dann klonen sich wie Git. Dann haben Sie ein Git Repo, das Sie zu Github schieben können.

27

Verwenden Sie die BFG Repo-Cleaner, eine einfachere, schnellere Alternative zu git-filter-branch, die speziell zum Entfernen von Dateien aus der Git-Historie entwickelt wurde.

sorgfältig die Schritte folgen hier: https://rtyley.github.io/bfg-repo-cleaner/#usage - aber der Kern-Bit ist nur dies: Download der BFG jar (erfordert Java 6 oder höher) und diesen Befehl ausführen:

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

Ihre gesamte Repository-Historie wird gescannt, und alle Dateien oder Ordner mit dem Namen .git werden entfernt. Ich habe dies gegen eine speziell konstruierte test repo mit einem .git Ordner getestet, und es hat gut funktioniert.

Dank Michel Jouvin für reminding me dass Dateien namens ‚.git‘ sind auch illegal in Git (und die Fehlermeldung von Git berichtet macht es nicht sofort klar, dass sie Dateien, anstatt Ordner) Ich habe diese Antwort aktualisiert, um das zu berücksichtigen.

Volle Offenbarung: Ich bin der Autor des BFG Repo-Cleaner.

+0

Ich hatte das gleiche Problem und diese Lösung hat den Trick für mich getan. –

+1

Danke !! Ich hatte genau das gleiche Problem und das hat mir das Leben gerettet. Wenn ich könnte ich dies als die richtige Antwort markieren. –

+1

Ich habe den Git Filter-Zweig Ansatz versucht und es hat nicht funktioniert, aber mit dem bfg Repo-Reiniger funktioniert wie ein Zauber. Vielen Dank! – omarshammas