Làm cách nào để ngăn git yêu cầu sudo trên mỗi lệnh git


10

Tôi đã tạo một thư mục /var/wwwđể lưu trữ các ứng dụng web của mình nhân bản. Khi tôi lần đầu tiên nhân bản ứng dụng từ GitHub, nó yêu cầu tôi sử dụng sudo và mỗi khi tôi làm điều git pullđó đòi hỏi phải có sudo. Tôi đang gặp một số vấn đề vì điều này. Ví dụ, các khóa ssh của tôi không khớp. Vì vậy, khi tôi làm git pull, tôi phải sử dụng HTTPS thay vì ssh và nhập thủ công tên người dùng và mật khẩu của mình mỗi lần tôi muốn kéo và cập nhật ứng dụng của mình. Làm cách nào để định cấu hình cái này để tôi không phải sử dụng sudo mỗi khi tôi sử dụng git?

Câu trả lời:


12

Một vài điều đang diễn ra ở đây:

  • Khi bạn sudo git checkout ..., tất cả các tệp đó được sở hữu bởi người dùng root và nhóm gốc. Với các quyền tiêu chuẩn, đó là lý do tại sao các thay đổi tiếp theo đối với các tệp đó yêu cầu bạn phải root.

  • /var/www/theo mặc định được sở hữu bởi www-datanhóm. Một cái gì đó người dùng của bạn không theo mặc định.

Cách dễ nhất để viết /var/www/là chỉ cần thêm người dùng của bạn vào nhóm dữ liệu www . Tất nhiên, bạn có thể thay đổi thư mục do người dùng của bạn sở hữu nhưng điều này có thể có một số hiệu ứng kích nổ khó chịu nếu bạn không làm sạch chúng.

Bạn sẽ cần phải đăng nhập lại sau khi thêm người dùng của mình vào nhóm dữ liệu www.

Trong trường hợp cụ thể của bạn, bạn sẽ cần sửa chữa mớ dữ liệu sở hữu gốc hiện tại của mình. Bạn có thể xóa nó dưới quyền root (và kiểm tra lại) nhưng nếu bạn có công việc chưa được lưu, nó sẽ sạch hơn để kéo mọi thứ trở lại với người dùng của bạn. Ví dụ sau đây cực kỳ lười biếng và giả sử những gì chúng ta đang nói đến là điều duy nhất trong / var / www /:

sudo chown -R www-data: /var/www/

Ok, sẽ tốt hơn nếu chỉ sudo git checkoutvào một thư mục khác, và sau đó triển khai ứng dụng của tôi trong thư mục / var / www? Tôi chỉ đọc ở đâu đó rằng nói chung không phải là một ý tưởng tốt để kiểm tra các dự án vào thư mục var để bắt đầu. Một người đề nghị kiểm tra các dự án vào thư mục nhà
Scott

2
Sẽ là tốt nhất nếu bạn ngừng chạy git với quyền root. Nhằm mục đích đó. Bất kỳ kế hoạch nào để bạn chạy nó như root đã thất bại. Những gì bạn đang nói về việc kiểm tra webdirectory là chính xác - cho phép mọi người truy cập vào .gitthư mục của bạn có thể cung cấp cho họ quyền truy cập vào những thứ bạn không muốn cho phép mọi người truy cập, nhưng bạn có thể ngăn truy cập vào .git/thư mục giảm nhẹ toàn bộ vấn đề.
Oli

Ngoài ra còn có các cấu trúc thư mục được chấp nhận khác trong đó bạn có một thư mục đang giữ cho trang web của mình, nơi các công cụ không được lưu trữ đi (bao gồm cả .git của bạn) và bên trong đó có một thư mục chung / thư mục mà bạn bảo Apache lưu trữ. Đạo đức của việc giữ một trang web trong / var / www / là rất cổ xưa.
Oli

Bạn có một cấu trúc thư mục được đề nghị? Về cơ bản, tôi có thanh toán của mình, và sau đó tôi phải bó nó thành một .tgz. Và sau đó tôi phải gỡ bỏ nó thành một ứng dụng nút. Đây là một ứng dụng sao băng. Tôi hơi bối rối không biết giữ ba thư mục / tệp riêng biệt này
Scott

@Scott tôi gặp vấn đề tương tự. Các tiểu ban tiếp theo trong repo (trong trường hợp của tôi) sẽ gọi git và cố gắng sao chép các repos khác. Giải pháp, để sắp xếp lại các khóa SSH như bạn đã nêu, là bắt đầu quá trình mà không sử dụng sudo. Rất nhiều câu hỏi và thảo luận chủ đề này là một công việc xoay quanh có thể sẽ khiến bạn va vào tường.
Jordan Stefanelli

0

Hừm, đổi chủ thư mục? Tôi đã chuyển thư mục www của mình trong / home / tên người dùng, bạn có thể thay đổi vị trí của nó trong / etc / apache2 / sites-enable / 000-default


Vì vậy, nó có liên quan đến thư mục mà tôi đang lưu trữ bản sao của mình không?
Scott

Đúng chính xác. Theo mặc định /var/wwwkhông thể được viết.
Joyfulgrind

0

Tôi hơi muộn với câu trả lời này, nhưng tôi thấy rằng để tránh nhập mật khẩu mỗi lần tôi phải thay đổi repo từ https sang ssh.

Từ phần trợ giúp của Github.com:

Lệnh git set-url từ xa thay đổi URL kho lưu trữ từ xa hiện có.

Mở Terminal.

Thay đổi thư mục làm việc hiện tại vào dự án địa phương của bạn.

Liệt kê các điều khiển từ xa hiện có của bạn để có được tên của điều khiển từ xa mà bạn muốn thay đổi.

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

Thay đổi URL từ xa của bạn từ HTTPS thành SSH bằng lệnh git set-url từ xa.

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

Xác minh rằng URL từ xa đã thay đổi.

git remote -v

# Xác minh URL từ xa mới

origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)
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.