2013-05-29 41 views
16

Tôi đang cố gắng di chuyển repo git từ Kiln sang Github. Tôi có thể thêm điều khiển từ xa mới tốt, nhưng khi tôi cố gắng đẩy tổng thể để điều khiển từ xa mới, tôi nhận được lỗi sau:Xóa thư mục '.git' khỏi 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 có các tập tin sau đây trong nó:

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

Rõ ràng một người nào đó trong quá khứ, sử dụng hg, được kiểm tra trong một repo git đầy đủ trong một thư mục con.

Tôi muốn xóa hoàn toàn thư mục đó, nhưng đang gặp sự cố khi xóa tệp đó khỏi lịch sử git.

Câu trả lời trong pushing a git repo fails with error: contains '.git' không hữu ích, bởi vì tôi đã làm repo như một repo git, không phải là một một trong những mercurial.

tôi đã cố gắng git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch .git', nhưng tôi nhận được lỗi:

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' 

và lịch sử dường như không được thay đổi. Tôi đang ở giới hạn kiến ​​thức git của tôi. Có ai giúp được không?

+0

Nguồn mở có phải là repo không? bạn có thể chia sẻ một bản sao của nó không? –

+0

Ah, không cần phải chia sẻ một bản sao của repo trong câu hỏi, tôi đã quản lý để xây dựng một kho Git với cùng một loại cây xấu, mà tôi có thể sử dụng cho mục đích thử nghiệm. –

+0

có thể trùng lặp của [đẩy một repo git thất bại với lỗi: chứa '.git'] (http://stackoverflow.com/questions/14728751/pushing-a-git-repo-fails-with-error-contains-git) –

Trả lời

1

Bạn đã thử với lệnh sau chưa?

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

git filter-branch documentation chỉ ra rằng điều này sẽ chậm hơn so với --index-filter, nhưng nó có thể thực hiện công việc.

+1

Thật không may, tôi không nghĩ rằng cách tiếp cận này sẽ làm việc với một repo kiểm tra Tôi xây dựng, đây là đầu ra tôi nhận được: $ git filter-branch --tree-filter 'rm -Rf foo/.git' HEAD ..... Viết lại lỗi 6652877677cf01a7b668704134d5e8bb62bfe317 (6/6): Đường dẫn không hợp lệ 'foo/.git/folder/zero ' lỗi: Đường dẫn không hợp lệ' foo/.git/hero ' lỗi: Đường dẫn không hợp lệ' foo/.git/zero ' Bỏ qua đường dẫn foo/.git/folder/zero Bỏ qua đường dẫn foo /. git/hero Bỏ qua đường dẫn foo/.git/zero CẢNH BÁO: Ref 'refs/heads/master' không thay đổi –

+0

... vì vậy có vẻ như ngay cả khi sử dụng 'git filter-branch --tree -filter 'có vấn đề mà @dana gặp phải trong câu hỏi. Tôi nghĩ rằng việc sử dụng BFG có lẽ là một ý tưởng tốt hơn vào thời điểm này. –

0

Theo tôi được biết lò sẽ cho phép bạn sao chép một kho lưu trữ là một trong hai git hoặc Mercurial những ngày này, vì vậy sao chép nó như lanh lợi, sử dụng mercurial filemap solution you already found đẩy mà Mercurial repo như một repo mới để lò và sau đó sao chép nó xuống như git. Sau đó, bạn sẽ có một repo git bạn có thể push to github.

27

Sử dụng BFG Repo-Cleaner, một lựa chọn đơn giản hơn, nhanh hơn để git-filter-branch được thiết kế đặc biệt để xóa tệp khỏi lịch sử Git.

Cẩn thận làm theo các bước ở đây: https://rtyley.github.io/bfg-repo-cleaner/#usage - nhưng các bit lõi chỉ này: tải về BFG jar (yêu cầu Java 6 hoặc cao hơn) và chạy lệnh này:

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

toàn bộ lịch sử kho của bạn sẽ được quét, và bất kỳ tệp hoặc thư mục nào có tên .git sẽ bị xóa. Tôi đã thử nghiệm điều này với một cấu trúc đặc biệt được xây dựng test repo chứa một thư mục .git và nó hoạt động tốt.

Nhờ Michel Jouvin cho reminding me rằng file tên '.git này cũng là bất hợp pháp ở Git (và thông báo lỗi báo cáo của Git không làm cho nó ngay lập tức rõ ràng rằng họ tác phẩm, chứ không phải là thư mục) , Tôi đã cập nhật câu trả lời này để phản ánh điều đó.

Tiết lộ đầy đủ: Tôi là tác giả của BFG Repo-Cleaner.

+0

Tôi đã có cùng một vấn đề và giải pháp này đã làm các trick cho tôi. –

+1

Cảm ơn !! Tôi cũng có cùng một vấn đề và điều này đã cứu mạng tôi. Nếu tôi có thể đánh dấu đây là câu trả lời đúng. –

+1

Tôi đã thử cách tiếp cận git filter-branch và nó không hoạt động, nhưng sử dụng trình repo-bfg làm việc như một sự quyến rũ. cảm ơn! – omarshammas

Các vấn đề liên quan