2012-09-18 26 views
13

Đây là câu hỏi noob nhưng tôi đang ở dưới súng để giải quyết vấn đề này. Tôi đã thừa kế một vấn đề kỳ lạ với một git subtree rằng xuất hiện để được repo tham nhũng.Lỗi "Fatal: bad object" khi sử dụng lệnh git subtree push

Đây là kịch bản: một cây con của một git dựa trên dự án A đang được sử dụng trong dự án B. Một phần của việc sử dụng triển khai kịch bản đẩy cây con ra để dự án repo B:

git subtree đẩy -P sub/path/tên --squash [email protected]: MyCo/project_b.git projectb_branch

nó bắt đầu đẩy các cam kết và không thành công với

"fatal: bad object {sha}" 

tôi đã tìm kiếm các SHA trong git log nguồn repo của . Nó hiển thị trong cam kết:

git-subtree-dir: app/assets/ui 
git-subtree-split: {sha} 

Mục tiêu repo (project_b) thực sự có cam kết với SHA đó nhưng repo nguồn không thực sự. Tôi đi qua kịch bản shell subtree tôi có thể thấy rằng nó không thành công khi nó cố tìm kiếm đối tượng đó bằng git log (trong hàm toptree_for_commit gọi git log -l --pretty = format: '% T' {sha}).

Tại thời điểm này, tôi đang ở trên đầu của tôi nhưng mong muốn cố gắng tìm một giải pháp. Tôi đã nghiên cứu điều này theo như giấy phép kiến ​​thức hạn chế của mình, vì vậy tôi hoan nghênh mọi mẹo, thủ thuật hoặc RTFM có thể giúp tôi tiến gần hơn đến giải pháp.

cảm ơn chân thành của tôi!

+0

''git reflog' nội bộ của bạn có chứa' 'sha}' không? – VonC

+0

không. không may măn. –

Trả lời

3

Tôi đã tìm ra điều này; Tôi tìm thấy tham chiếu về sha sai trong thông tin cam kết.

Cách dễ nhất để sửa lỗi này là:

  • dừng sử dụng sự chia rẽ cây con mà đã được tạo ra,
  • di chuyển nội dung vào một thư mục con khác nhau và sau đó
  • resplit cây con.

Loại lộn xộn nhưng ít xảy ra lỗi hơn nhiều so với việc cam kết cam kết có vấn đề và sau đó đăng ký lại chúng (được đề xuất trong câu trả lời cho câu hỏi tương tự).

Không đẹp, nhưng đã hoàn thành công việc.

+0

Phản hồi thú vị. +1 – VonC

20

Tôi chỉ chạy vào vấn đề này và đã có thể giải quyết bằng cách:

git remote add shared $url 
git fetch shared 
git subtree push -P $prefix shared $branch 

Có thể không giúp cho tất cả nhưng đã cứu tôi khỏi phải hack vào các cấu trúc repo.

+3

Chỉ cần làm rõ, đối với các noobs như tôi $ url, tiền tố $ và chi nhánh $ cần phải được điền bằng url, tiền tố và chi nhánh thích hợp của riêng bạn. – lnhubbell

3

Tôi đã xem qua vấn đề tương tự: git subtree push ... từng làm việc trên máy tính, nơi tôi đã làm git subtree add ..., nhưng sẽ không hoạt động trên máy tính thứ hai:

$ git subtree push --prefix lib [email protected]:lib/lib.git master 
... 
... 
fatal: bad object {sha} 

Fix là để kéo thay đổi từ kho lưu trữ đầu tiên (thậm chí mặc dù không có thay đổi):

git subtree pull --prefix lib [email protected]:lib/lib.git master 

và mặc dù nó không kéo bất cứ điều gì, đẩy làm việc tốt thì:

git subtree push --prefix lib [email protected]:lib/lib.git master 
0

git pull đã làm việc cho tôi. Nếu chi nhánh hiện tại của bạn không phải là nhánh ở xa, hãy đặt nhánh đó ở xa bằng cách sử dụng

`git push -u origin <branchname>` 
Các vấn đề liên quan