2013-05-29 26 views
16

Próbuję przenieść repozytorium git z Kiln na Github. Mogę dodać nowego pilota dobrze, ale gdy próbuję naciskać pana do nowego pilota, pojawia się następujący błąd:Usunięcie katalogu '.git' z 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 posiada następujące pliki w IT:

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

Oczywiście ktoś w przeszłości, używając hg, sprawdził pełne repozytorium git w podkatalogu.

Chciałbym po prostu całkowicie usunąć ten katalog, ale mam problem z usunięciem tego pliku z historii git.

Odpowiedź w numerze pushing a git repo fails with error: contains '.git' nie pomaga, ponieważ mam repo jako repozytorium git, a nie mercurial.

Próbowałem git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch .git', ale pojawia się błąd:

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' 

i historia nie wydaje się być zmieniane. Jestem na granicy mojej wiedzy o Git. Czy ktoś może pomóc?

+0

Czy repo jest otwarte? Czy jesteś w stanie udostępnić jego kopię? –

+0

Ah, nie trzeba udostępniać kopii danego repo, udało mi się zbudować repozytorium Git z tym samym rodzajem złego drzewa, które mogę wykorzystać do celów testowych. –

+0

możliwy duplikat [wypisanie repozytorium git nie powiedzie się z błędem: zawiera ".git"] (http://stackoverflow.com/questions/14728751/pring-a-git-repo-fails-with-error-contains-git) –

Odpowiedz

1

Czy próbowałeś za pomocą następującego polecenia?

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

git filter-branch documentation wskazuje, że będzie to wolniejsze niż --index-filter, ale może to zrobić pracę.

+1

Niestety, nie sądzę, że to podejście zadziała - działając przeciwko repo testowi, który Skonstruowałem, to jest wynik, jaki otrzymuję: $ git filter-branch - filtr -treff 'rm -Rf foo/.git' HEAD ..... Przepisz 6652877677cf01a7b668704134d5e8bb62bfe317 (6/6) błąd: Nieprawidłowa ścieżka 'foo/.git/folder/zero " błąd: Nieprawidłowa ścieżka" foo/.git/hero " błąd: Nieprawidłowa ścieżka 'foo/.git/zero' Ignorowanie ścieżki foo/.git/folder/zero Ignorowanie ścieżki foo /. git/hero Ignorowanie ścieżki foo/.git/zero OSTRZEŻENIE: Ref 'refs/heads/master' pozostaje niezmieniona –

+0

... więc wygląda na to, że używasz 'git filter-branch --tree -filtr "ma problem z napotkaniem @dana w pytaniu. Myślę, że używanie BFG jest prawdopodobnie lepszym pomysłem w tym momencie. –

0

Jak rozumiem piec pozwoli Ci sklonować repozytorium albo jako git lub Mercurial tych dniach, więc sklonować go jako mercurial, użyj mercurial filemap solution you already found pchnięcie że Mercurial repo jako nowe repo do pieca, a następnie sklonować go jako git. Wtedy będziesz miał repozytorium git, które możesz wcisnąć na github.

27

Użyj BFG Repo-Cleaner, prostszej, szybszej alternatywy dla git-filter-branch specjalnie zaprojektowanej do usuwania plików z historii Git.

Starannie wykonaj kroki opisane tutaj: https://rtyley.github.io/bfg-repo-cleaner/#usage - ale nieco rdzeń jest właśnie to: pobierz BFG jar (wymaga Java 6 lub nowszy) i uruchom polecenie:

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

całą historię repozytorium zostanie zeskanowany, i każdy plik lub folder o nazwie .git zostanie usunięty. Przetestowałem to na specjalnie skonstruowanym test repo folderze zawierającym .git i działało dobrze.

Dzięki Michel Jouvin dla reminding me że plików nazwanych „.git” są także nielegalne w Git (i wiadomości o błędach przez Git nie czyni go od razu oczywiste, że pliki zamiast folderów) , Zaktualizowałem tę odpowiedź, aby to odzwierciedlić.

Pełny opis: Jestem autorem BFG Repo-Cleaner.

+0

Miałem ten sam problem i to rozwiązanie załatwiło sprawę. –

+1

Dzięki! Miałem dokładnie ten sam problem, co uratowało mi życie. Gdybym mógł, uznałbym to za właściwą odpowiedź. –

+1

Próbowałem podejście filtra gałęzi GIT i nie działało, ale za pomocą repozytorium bfg pracował jak urok. dzięki! – omarshammas