Git bị treo khi viết các đối tượng


100

Tôi đang cố gắng git push -u origin masterVà nó chỉ bị treo ở

Writing objects:  99% (219/220), 12.65 MiB | 97 KiB/s

Phần 12.65dịch chuyển xung quanh. Khi tôi thoát quy trình và chạy lại, nó tiếp tục ở mức 99% nhưng không bao giờ kết thúc, giống như trước đây.

Nó không bao giờ được đẩy thành công. Đây là cam kết ban đầu.


Bạn muốn đẩy đến đâu? Bạn đang sử dụng SSH hay một số giao thức khác?
Paŭlo Ebermann,

26
Sẽ http.postbuffergiúp đỡ? stackoverflow.com/questions/6842687/…
VonC,

3
Bình luận của VonC quá dễ bị bỏ qua. Nó làm việc cho tôi.
Thuận

1
Không thể tin được. Điều đó đã làm điều đó cho tôi, quá. Và bây giờ là năm 2018. Và đó là SSH, không phải HTTP. Và toàn bộ repo giống như 15MB. Và máy chủ "từ xa" là localhost. Đừng lãng mạn hóa Git nữa, các bạn, làm ơn! ;)
Sz.

Câu trả lời:


219

Tôi đã làm theo lời khuyên của VonC:

git config --global http.postBuffer 524288000

Để tham khảo trong tương lai, dựa trên nhận xét:

500 MB: 524288000 (as posted in the original answer)
1 GB: 1048576000
2 GB: 2097152000 (anything higher is rejected as 'out of range')

4
omg, cảm ơn bạn vì điều này! đang nhổ tóc của tôi và điều này đã giải quyết được vấn đề của tôi!
Brett Thomas

3
@HugoForte Tăng bộ đệm dường như giải quyết được việc ghi tệp bị treo của tôi, nhưng git push của tôi không bao giờ hoàn thành (treo sau Writing objects: 100%) - trước đó nó bị treo ở mức 25% nên điều này rõ ràng đã giúp ích. Tuy nhiên, tôi vẫn nhận được những hành vi "kỳ lạ". Tôi đã khởi động lại hệ thống của mình và điều này dường như giải quyết được mọi thứ ... FYI ... nếu ai đó vẫn gặp sự cố sau khi tăng bộ đệm của họ, khởi động lại hệ thống của tôi đã giúp ích trong trường hợp của tôi (giải pháp cũ không kém nhưng khởi động lại mới thực sự hữu ích).
twknab

4
Bất cứ ai có thể giải thích nơi con số 524288000đến từ?
Ryre

6
@Ryre là 500 MB
Hugo Forte

1
Chúa phù hộ cho bạn và Stackoverflow, tôi sẽ là kẻ thất bại hoàn toàn nếu không có,
decoder7283

35

Điều này đã xảy ra do tệp lớn, không được chia sẻ trong thư mục repo. Rất tiếc.

BIÊN TẬP

Bị treo là do tệp tải lên mất nhiều thời gian. Tệp không được bao gồm trong đợt đẩy.

BIÊN TẬP

Trong khi đó là sự thật rằng một tập tin khổng lồ có thể là lý do đằng sau vấn đề này, nếu bạn không thể bỏ qua các tập tin trong câu hỏi hoặc chỉ để đẩy sau đó nó làm theo này câu trả lời.


@TimoSolo Tại sao tôi lại làm như vậy? Tôi là người gặp sự cố và tôi đã ghi lại cách khắc phục chính xác. Khá đơn giản.
mattalxndr

4
Có, cách khắc phục của bạn là để loại bỏ sự cố. Vì lợi ích của những người thực sự cần đẩy một tệp lớn, câu trả lời của @ hugo-forte giải quyết được vấn đề. Bạn không cần phải làm vậy, tôi chỉ nghĩ rằng nó sẽ giúp được nhiều người hơn - theo tinh thần của SO.
TimoSolo

1
Câu hỏi không phải là "Làm thế nào tôi có thể cam kết, sau đó đẩy một tệp lớn?". Đó là "Sự thúc đẩy git của tôi sắp kết thúc. Tại sao?" Nếu bạn không mong đợi quá trình thúc đẩy diễn ra mãi mãi, thì có thể bạn (giống như tôi) không có ý định commit tệp khổng lồ đó.
mattalxndr

3
@mattalxndr Khi câu trả lời được chấp nhận có 1/8 phiếu bầu, có lẽ bạn nên thay đổi nó.
NorCalKnockOut

1
@mattalxndr Không câu trả lời nào là hoàn hảo. Một xác định nguyên nhân và một giải pháp khác. Câu trả lời lý tưởng sẽ xác định nguyên nhân, giải thích tại sao nó có kết quả đã cho và đưa ra hai giải pháp thay thế. IMO, trong số các tùy chọn hiện tại, câu trả lời của Hugo Forte vượt trội hơn vì nó sẽ giải quyết vấn đề bất kể bạn có định đẩy tệp hay không. Nó không phải là phớt lờ những người đã mắc phải sai lầm giống bạn; nó khắc phục sự cố cho họ cũng giống như bất kỳ ai khác, nhưng để họ xóa một tệp nếu họ không có ý định đẩy nó.
BZ1

7

Tôi đã gặp vấn đề tương tự với (viết đối tượng% 16) bị kẹt sau đó gây tử vong. Tôi đã giải quyết vấn đề này bằng cách lưu các thay đổi hiện tại và sao chép một kho lưu trữ mới, sau đó sao chép các tệp đã sửa đổi vào đó.

Ví dụ. Giả sử kho lưu trữ hiện tại là A, thì tất cả những gì bạn cần làm là:

  1. mv A B
  2. git clone A
  3. mv B/* A/
  4. rm -rf B

Sau đó, cam kết và đẩy và tất cả đều hoạt động tốt. Nó nhận dạng các tệp đã chuyển là đã sửa đổi :)


Bạn đang gặp một triệu chứng khác nhau. Của tôi không có bất kỳ lỗi nghiêm trọng nào.
mattalxndr

5

Trong trường hợp của tôi, tôi đang sử dụng thư mục git có quyền không hợp lệ được lưu trữ trên cùng một ổ đĩa với repo, nhưng nó có thể giống với ssh ngay cả khi bạn sử dụng người dùng đăng nhập được ủy quyền.

Sau đó kiểm tra xem bạn có quyền viết đúng trên repo ở xa hay không.

Thí dụ:

Init repo cục bộ và xa

git init /tmp/src
git init --bare /tmp/dst
cd /tmp/src

Thêm repo từ xa vào nguồn gốc

src > git remote add dest /tmp/dst

Sự cố mô phỏng

src > chmod -R 555 /tmp/dst

Thêm tệp giả và đẩy nó

src > touch a && git add a && git commit -m 'demo'
src > git push --set-upstream dest master
src > git push
Counting objects: 3, done.
Writing objects: 99% (2/3), 202 bytes | 0 bytes/s.

Git bị treo

Giải pháp

src > chmod -R 775 /tmp/dst

2
Vui lòng xem xét thêm một vài chi tiết mẫu mực hơn vào câu trả lời của bạn, cảm ơn.
Mirza Sisic

1
Lấy làm tiếc. Nó có tốt hơn không?
Naewis, 09/07/18

3

Trong tình huống của tôi, đó là kích thước của tệp. Bằng cách thêm tệp .gitignore với các phần mở rộng bắt buộc, tôi có thể bỏ qua hầu hết các tệp không mong muốn được đẩy.


2

Trong trường hợp của tôi, tốc độ tải lên internet chậm và tệp tôi muốn đẩy lớn, mẹo là sử dụng git LFS (lưu trữ tệp lớn) kiên nhẫn hơn nhiều để tải lên tệp lớn, bạn có thể tìm thấy hướng dẫn git LFS tại đây


1

git clean -f -ngiải quyết vấn đề của tôi. Có nhiều tệp chưa được theo dõi không được phát hiện. Nhưng hãy cẩn thận vì điều này sẽ xóa các tệp trong thư mục của bạn


3
Cụ thể nó sẽ loại bỏ những tập tin nào?
Jazimov

1

Trong trường hợp của tôi, tôi đã cố gắng thúc đẩy mà không hoàn thành các quy tắc của công ty mình. Sau đó, tôi biết được rằng chúng ta nên bắt đầu thông báo cam kết của mình bằng "MOBIL-XXXX" trong đó XXXX là số mà các nhà phát triển được chỉ định trong Jira (một công cụ khác mà chúng tôi sử dụng để theo dõi quá trình phát triển) bởi những người theo hậu môn.

Đảm bảo kiểm tra xem công ty của bạn có quy tắc ràng buộc tương tự hay không.


0

Tôi đang gặp vấn đề tương tự trên máy Windows 10, máy writing objectsbị treo, nhưng trong một tình huống khác một chút.

Vấn đề tôi gặp phải chỉ là khi tôi cố gắng thêm tệp mới vào kho lưu trữ. Nếu tôi cập nhật các tệp đã tồn tại trong kho lưu trữ, mọi thứ đều hoạt động tốt và không thực sự quan trọng nếu kích thước tệp lớn hay không. Chủ yếu là tôi đang cố gắng thêm các tập lệnh mới.

Tôi đã thử mọi giải pháp khác được tìm thấy trên internet nhưng không có gì hiệu quả trong trường hợp của tôi và điều cuối cùng tôi đã thử thực sự hoạt động. Có vẻ như đó là do một số quyền của Windows đối với ổ đĩa và thư mục cụ thể ngăn ứng dụng ghi vào các thư mục cụ thể đó hoặc cập nhật tệp ngay cả khi tôi đăng nhập bằng tài khoản quản trị viên và đang chạy ứng dụng với tư cách quản trị viên. Vì vậy, lệnh này:

attrib -r +s D:\foldername 

đã khắc phục sự cố cho tôi.

Chỉ cần đăng nó ở đây, có thể ai đó có cùng vấn đề với tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.