Câu hỏi Vấn đề quyền Git


Tôi đang có một số loại vấn đề quyền git và tôi hy vọng ai đó có thể giúp đỡ. Mỗi khi tôi cố gắng cam kết tôi nhận được những điều sau đây:

error: insufficient permission for adding an object to repository database .git/objects
error: Error building trees

Tôi đã xem xét một số gợi ý để giải quyết vấn đề này và về cơ bản chúng sẽ đun sôi để đảm bảo rằng các quyền của bạn không bị hỏng trong thư mục .git. Tôi đã xác nhận rằng tôi có quyền cho mọi thứ. Tôi cũng đã kiểm tra đầu ra của git config core.sharedRepository Là true.

Bất cứ ai có bất cứ đề nghị?


1
2017-12-08 21:39


gốc


Điều này có xảy ra trong khi làm việc trên máy cục bộ của bạn không? Điều đó có xảy ra khi bạn đẩy tới điều khiển từ xa không? Bạn có chia sẻ nó với người khác không? Bạn đang sử dụng cùng một repo git cục bộ với nhiều tài khoản? - UTF-8
Tôi đang trên máy địa phương của tôi đang cố gắng thực hiện một cam kết. Tôi chỉ sử dụng một tài khoản có cùng repo địa phương - David


Các câu trả lời:


Bạn bằng cách nào đó hoặc là messed quyền hoặc chủ sở hữu hoặc nhóm lên. Sau đó cả hai phải là người dùng của bạn hoặc nhóm người dùng của bạn tương ứng.

Mở một thiết bị đầu cuối trong repo của bạn hoặc điều hướng vào nó. Sau đó, thực hiện các lệnh sau:

sudo chown -R david .git
sudo chgrp -R david .git

Điều này sẽ làm cho bạn là chủ sở hữu và nhóm của bạn nhóm tất cả các tệp trong .git thư mục. Giả sử tên người dùng của bạn là david, tất nhiên. Nếu không, hãy thay đổi nó. Nhóm của bạn có cùng tên với người dùng của bạn. Nếu bạn muốn áp dụng điều này cho toàn bộ repo của bạn, chỉ cần thay thế .git bởi . (một khoảng thời gian).

Nếu điều này không khắc phục được sự cố, hãy thực hiện các dòng sau:

find .git -type d -exec chmod 755 {} +
find .git -type f -exec chmod 644 {} +

Dòng đầu tiên cung cấp cho bạn quyền đầy đủ cho tất cả các thư mục và quyền thứ hai để đọc và ghi vào các tệp trong .git thư mục. Dòng đầu tiên có thể in lỗi, thông báo cho bạn - một lần nữa - về không đủ quyền vì find không thể đi vào các thư mục trước khi quyền của họ được đặt đúng (nếu chúng được đặt hoàn toàn sai). Nếu điều này xảy ra, hãy chạy lệnh đầu tiên một lần nữa (trước khi chạy lệnh thứ hai) cho đến khi nó không in lỗi nữa. Bạn có thể tránh được điều này bằng cách chạy lệnh đầu tiên root (sudo find .git -type d -exec chmod 755 {} +). Sau đó, nó sẽ chạy qua mà không có lỗi lần đầu tiên trong mọi trường hợp.

Lệnh thứ hai làm cho tất cả các tệp trong .git thư mục không thể thực thi được. Đây không phải là một vấn đề của bạn không sử dụng móc. Nếu bạn làm, bạn có thể muốn thực thi

chmod +x .git/hooks/*

sau đó để cung cấp cho các móc các bit thực thi trở lại. Nếu bạn không cung cấp cho họ những trở lại, móc của bạn sẽ không được thực hiện nữa. Làm điều này nếu bạn không sử dụng móc không gây hại.


2
2017-12-08 22:30



Hmm. Lệnh thứ hai nên là (ít nhất là cho u) u+rwX, để các tập lệnh thực thi, nếu có, trong thư mục giữ nguyên trạng thái thực thi của chúng. - muru
Các lệnh chỉ thay đổi quyền của .git và nội dung của nó, chứ không phải các tệp OP làm việc với. Móc phải là tệp thực thi duy nhất trong .gitvà OP có lẽ không sử dụng. Cho dù các móc mẫu có thể thực thi được hay không không quan trọng vì chúng không được thực thi. Sử dụng u+rwX sẽ để lại vô tình thiết lập các bit thực thi trên các tập tin như chúng được. - UTF-8
nhưng chúng tôi không đăng câu trả lời chỉ vì lợi ích của OP. Cảnh báo sẽ hữu ích cho khách truy cập trong tương lai. - muru
Vâng bạn đã đúng. Cảm ơn. Tôi đã thêm nó. - UTF-8