2012-03-05 35 views
13

Tôi thực sự có thể sử dụng một số trợ giúp tại đây.Git push - gói tối ưu - hết bộ nhớ

Tôi vừa tạo một repo trần mới để hoạt động như một mục tiêu sản xuất cho các lần đẩy dev. Tôi cũng có thư mục web hoạt động trên máy chủ dưới dạng repo git. Máy chủ đang chạy git 1.7.4.1 trên centos5.5

Sau khi tạo repo mới trong thư mục web, tôi đã thực hiện thêm git. Nó được thiết kế như 2300 & một số tệp lẻ & trên 230k chèn.

Tôi đã thực hiện cam kết của cơ sở tệp mới được thêm. Đã đẹp và sạch sẽ. Khi tôi đã làm một git push gốc master mặc dù, nó giữ cho tôi điều này (xin lưu ý, tôi có 8 CPU, do đó 8 chủ đề. Tài liệu nói điều này là bình thường);

# git push --mirror 
Counting objects: 2000, done. 
Delta compression using up to 8 threads. 
warning: suboptimal pack - out of memory 
fatal: inflateInit: out of memory (no message) 
error: failed to push some refs to '/home/ggadmin/gg-prod.git' 

Tôi đã thử các cách sau để giải quyết vấn đề này, nhưng tất cả đều mang lại kết quả tương tự;

git repack -adf --window-memory=100m 
           ^tried running this up to 1024m. Same result. 

Thậm chí đã thử một lực đẩy, nhưng có cùng một điều, chỉ với một lỗi malloc;

# git push -f origin master 
Counting objects: 2000, done. 
Delta compression using up to 8 threads. 
warning: suboptimal pack - out of memory 
fatal: Out of memory, malloc failed (tried to allocate 2340 bytes) 
error: failed to push some refs to '/home/ggadmin/gg-prod.git' 

Tôi đã làm việc này trong 2 ngày và đã thử mọi thứ tôi có thể tìm thấy trên google và tại đây trên SO.

Tôi đã đạt đến trí thông minh kết thúc bằng cách cố gắng khắc phục sự cố này. Xin vui lòng cho tôi biết rằng một người nào đó ở đó biết những gì có thể được thực hiện để thực hiện công việc này?

+0

Để chắc chắn, điều này không liên quan gì đến 'postBuffer'? http://stackoverflow.com/questions/6842687/the-remote-end-hung-up-unexpectedly-while-git-cloning/6849424#6849424 – VonC

+0

Hãy giải thích ý của bạn là gì, VonC vì đó là một thuật ngữ mới đối với tôi tôn trọng Git. – Skittles

+0

Tôi đã tự hỏi nếu 'git config --global http.postBuffer 524288000' sẽ không thể thực hiện công việc đẩy của bạn. – VonC

Trả lời

14
  1. Có thể là git là công cụ tối ưu để xử lý số lượng lớn các đốm màu lớn.
  2. Bạn có thể vô hiệu hóa nén đa luồng để tiết kiệm bộ nhớ: git config pack.threads 1 (ngoài tùy chọn bộ nhớ hạn chế khác, như core.bigfilethreshold trong Git mới hơn)
+1

Vâng Vi ... git đang chạy chậm hơn so với mật đường chạy xuống một đường ống trong một mùa hè bắc cực, nhưng nó đã làm việc. Cảm ơn bạn! – Skittles

+0

Bạn có thể cân nhắc việc mở rộng những thứ lớn ra khỏi repo git (trong khi vẫn đang phiên bản chúng), hoặc sử dụng một số cách tiếp cận khác cho tác vụ. Git có lẽ đang cố gắng tìm các khối tương tự trong tất cả dữ liệu của bạn. Hãy thử điều chỉnh tùy chọn 'core.bigfilethreshold' (git> = v1.7.6) –

+0

Cảm ơn bạn lần nữa, Vi! Thật không may, tôi đang sử dụng v1.7.4.1. Nhưng tôi sẽ giữ nó ở đầu các mục tri thức Git của tôi. – Skittles

3

tôi đã cùng một vấn đề với một clone git. Repo là 25GB. Tôi đã sử dụng một lệnh thay thế, đối với tôi nó đòi hỏi kiểm soát thư mục gốc của nguồn,

rsync -avz -e ssh --progress [email protected]:repo/Directory destination/folder 

sau này tôi đã có thể cam kết và kéo giống như bất kỳ kho khác.

6
git config --global pack.threads 1 
+1

Đây là điều duy nhất làm việc cho tôi. Rất tiếc, tôi vẫn phải xử lý các máy chủ được chia sẻ cũ. –

0

Tôi nhận ra điều này là hơi muộn trong trò chơi nhưng vì một số những điều trên đã giúp tôi (nhờ @Ashitakalax), đây là hai xu của tôi. Cùng một vấn đề như trên (inflateInit: hết bộ nhớ) khi di chuyển các thay đổi từ một cá thể Wordpress dev ngược dòng để kiểm tra, git hủy bỏ hết bộ nhớ và điều này thường xuyên do các thay đổi trên thư mục ../uploads/ giữ các tệp hình ảnh.Tất cả điều này trong một máy chủ chia sẻ không có quyền truy cập vào các git config toàn cầu vì vậy chúng tôi làm:

0- in repo: git commit -m "some relevant details" 

để ghi lại những thay đổi

1- rsync -av --progress repo/wp-content/uploads/ test/wp-content/uploads 

để di chuyển phần lớn các bản sửa lỗi hình ảnh/thay đổi

2- in test: git add -A 

để theo dõi nội dung mới ở bên kiểm tra của sự vật

3- in test: git fetch origin 

nay lấy phần còn lại từ repo

4- in test: git merge origin/master 

và cuối cùng là hợp nhất ...

Bit rsync lightens tải git và tất cả là tốt.

8

Lệnh sau cố định vấn đề này cho tôi:

git config --global pack.windowMemory 256m 

này ảnh hưởng đến hiệu quả của nén đồng bằng, do đó bạn có thể muốn thử một kích thước lớn hơn đầu tiên, một cái gì đó giống như 1g, tùy thuộc vào phần cứng và băng thông của bạn.

Thêm chi tiết tại đây: https://www.kernel.org/pub/software/scm/git/docs/git-pack-objects.html

0

Không có câu trả lời nào trong số này giúp ích cho tôi. Vấn đề của tôi là máy chủ nhỏ của tôi có RAM 1GB và không có SWAP. Tôi đã giả mạo sudo service apache2 stop & sudo service mysql stop + giết một quy trình không sử dụng từ htop (sau tất cả điều đó tôi nhận được ~ 100mb RAM) và git push chính xác.