2013-02-28 42 views
12

Tôi mới sử dụng Git và có một dự án khá lớn mà tôi muốn đẩy tới repo từ xa (Repo B) trên Github. Dự án ban đầu cũng thuộc về Github, nhưng từ một repo khác (Repo A). Tôi phải thực hiện một số thay đổi đối với tệp từ Repo A trước khi tôi có thể thiết lập dự án trên Repo B. Tôi đã thiết lập bộ điều khiển từ xa, khóa ssh, v.v. Tôi gặp sự cố khi đẩy mã nguồn vào Repo B.Kích thước gói đẩy từ xa Github vượt quá

tôi nhận được lỗi sau tất cả các thời gian:

$ git push <remote_repo_name> master 
Enter passphrase for key '/c/ssh/.ssh/id_rsa': 
Counting objects: 146106, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (35519/35519), done. 
fatal: pack exceeds maximum allowed size00 GiB | 154 KiB/s 
fatal: sha1 file '<stdout>' write error: Invalid arguments 
error: failed to push some refs to '[email protected]:<repo>.git 

tôi đã thay đổi các cài đặt sau trong gitconfig địa phương của tôi

git config pack.packSizeLimit 1g 
git config pack.windowMemory 1g 

... và chạy gc git (mà tôi thấy tổ chức lại các gói để mỗi gói ở trong gói 1GB). Điều này đã không làm việc và tôi nhận được lỗi được thấy ở trên.

Tôi cố gắng để làm giảm kích thước của mỗi gói cũng ....

git config pack.packSizeLimit 500m 
git config pack.windowMemory 500m 

... và chạy gc git (mà tôi thấy tổ chức lại các gói để mỗi gói ở lại trong packsize 500MB). Điều này đã không hoạt động hoặc và tôi chạy vào cùng một lỗi.

Tôi không chắc chắn về giới hạn đóng gói mặc định của Github là (nếu có). Tài khoản là một tài khoản vi mô nếu điều đó quan trọng.

+0

Bạn có đang sử dụng máy Unix/Linux không? Nếu bạn có, hãy nhập 'du -sk .' vào kho lưu trữ đang hoạt động của bạn và thêm nó vào câu hỏi của bạn. [GitHub không có giới hạn] (https://help.github.com/articles/what-is-my-disk-quota), nhưng tôi tò mò về số lượng nhị phân của bạn. – Makoto

Trả lời

15

Giới hạn gói không ảnh hưởng đến lệnh giao thức git (push của bạn).

Từ git-config dưới pack.packSizeLimit:

Kích thước tối đa của một gói. Cài đặt này chỉ ảnh hưởng đến việc đóng gói cho một tệp khi đóng gói lại, tức là giao thức git: // không bị ảnh hưởng.

Khi thực hiện lệnh push git sẽ luôn tạo chính xác một gói bất kể kích thước!

Để khắc phục điều này sử dụng hai (hoặc nhiều hơn) đẩy:

git push remoteB <some previous commit on master>:master 
... 
git push remoteB <some previous commit after the last one>:master 
git push remoteB master 

Những push tất cả sẽ có gói nhỏ hơn và sẽ thành công.

+5

Câu trả lời hay - nhưng tôi đã gặp sự cố được mô tả tại http://stackoverflow.com/q/28417845/1304104. Về cơ bản từ xa đã được sạch sẽ và không có bất kỳ thiết lập chi nhánh, tôi đã phải cụ thể hơn, và đẩy đầu tiên của các hình thức sau đây: 'git push remoteB : refs/heads/master ' – mbargiel

+0

đẩy mỗi 500 cam kết (đảo ngược không hòa trộn với bỏ qua): ' max = $ (git log --oneline | wc -l); cho i bằng $ (seq $ max -500 1); echo $ i; g = $ (git log --reverse --oneline --skip $ i -n1 | perl -alne'print $ F [0] '); git push gh $ g: refs/heads/master; xong rồi – rurban