Bagaimana cara mencegah git dari memerlukan sudo pada setiap perintah git

10

Saya membuat direktori /var/wwwuntuk menyimpan aplikasi web klon saya. Ketika saya pertama kali kloning aplikasi dari GitHub itu mengharuskan saya untuk menggunakan sudo dan setiap kali saya melakukan git pullitu memerlukan sudo. Saya mengalami beberapa masalah karena ini. Misalnya, kunci ssh saya tidak cocok. Jadi ketika saya melakukannya git pull, saya harus menggunakan HTTPS alih-alih ssh dan secara manual memasukkan nama pengguna dan kata sandi setiap kali saya ingin menarik dan memperbarui aplikasi saya. Bagaimana cara mengkonfigurasi ini sehingga saya tidak harus menggunakan sudo setiap kali saya menggunakan git?

Scott
sumber

Jawaban:

12

Beberapa hal sedang terjadi di sini:

  • Saat Anda sudo git checkout ..., semua file tersebut dimiliki oleh pengguna root dan grup root. Dengan izin standar, itu sebabnya perubahan selanjutnya pada file-file itu mengharuskan Anda menjadi root.

  • /var/www/secara default dimiliki oleh www-datagrup. Sesuatu yang tidak diatur oleh pengguna Anda secara default.

Cara termudah untuk menulis /var/www/adalah dengan hanya menambahkan pengguna Anda ke grup data-www . Anda tentu saja dapat mengubah direktori yang akan dimiliki oleh pengguna Anda, tetapi ini dapat memiliki beberapa efek knock-on yang buruk jika Anda tidak melakukan pre-empting.

Anda harus masuk kembali setelah menambahkan pengguna Anda ke grup data-www.

Khususnya untuk kasus Anda, Anda harus memperbaiki kekacauan yang dimiliki oleh data yang dimiliki root. Anda dapat menghapusnya sebagai root (dan checkout kembali) tetapi jika Anda memiliki pekerjaan yang belum disimpan, itu hanya akan lebih bersih untuk menarik semuanya kembali ke pengguna Anda. Contoh berikut ini sangat malas dan menganggap apa yang sedang kita bicarakan adalah satu-satunya hal di / var / www /:

sudo chown -R www-data: /var/www/
Oli
sumber
Oke, apakah lebih baik hanya sudo git checkoutke direktori lain, dan kemudian menggunakan aplikasi saya di direktori / var / www? Saya baru saja membaca di suatu tempat bahwa pada umumnya bukan ide yang baik untuk checkout proyek ke direktori var untuk memulai. Satu orang merekomendasikan memeriksa proyek ke direktori rumah
Scott
2
Akan lebih baik jika Anda berhenti menjalankan git sebagai root. Bertujuan untuk itu. Paket apa pun yang membuat Anda menjalankannya sebagai root telah gagal. Apa yang Anda katakan tentang memeriksa direktori web benar - memberi orang akses ke .gitdirektori Anda dapat memberi mereka akses ke hal-hal yang tidak ingin Anda biarkan orang lain mengakses, tetapi Anda dapat mencegah akses ke .git/direktori yang mengurangi seluruh masalah.
Oli
Ada juga struktur direktori lain yang dapat diterima di mana Anda memiliki direktori holding untuk situs web Anda di mana barang-barang non-host berjalan (termasuk. Git Anda) dan di dalamnya ada direktori publik / yang Anda beri tahu Apache untuk di-host. Etos menjaga satu situs web di / var / www / sangat kuno.
Oli
Apakah Anda memiliki struktur direktori yang disarankan? Pada dasarnya, saya punya checkout, dan kemudian saya harus menggabungkannya menjadi .tgz. Dan kemudian saya harus menguraikannya menjadi aplikasi simpul. Omong-omong, ini adalah aplikasi meteor. Saya agak bingung di mana harus menyimpan tiga folder / file terpisah ini
Scott
@Scott Saya mengalami masalah yang sama ini. Sub-perintah berikutnya dalam repo (dalam kasus saya) akan memanggil git dan mencoba untuk mengkloning repo lainnya. Solusinya, untuk menyelaraskan kembali kunci SSH seperti yang Anda nyatakan, adalah memulai proses tanpa menggunakan sudo. Banyak dari T&J dan diskusi utas ini adalah solusi yang mungkin membuat Anda membentur tembok.
Jordan Stefanelli
0

Hm, ganti pemilik folder? Saya memindahkan folder www saya di / home / nama pengguna, Anda dapat mengubah lokasi di / etc / apache2 / sites-enabled / 000-default

michel
sumber
Jadi itu ada hubungannya dengan direktori tempat saya menyimpan klon saya?
Scott
Ya persis. Secara default /var/wwwtidak dapat ditulis.
Joyfulgrind
0

Saya agak terlambat dengan jawaban ini, tetapi saya menemukan bahwa untuk menghindari memasukkan kata sandi setiap kali saya harus mengubah repo dari https ke ssh.

Dari bagian bantuan Github.com:

Perintah set-url remote git mengubah URL repositori jarak jauh yang ada.

Buka Terminal.

Ubah direktori kerja saat ini ke proyek lokal Anda.

Daftarkan remote yang ada untuk mendapatkan nama remote yang ingin Anda ubah.

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

Ubah URL remote Anda dari HTTPS ke SSH dengan perintah git remote set-url.

git remote set-url origin [email protected]:USERNAME/REPOSITORY.git

Verifikasi bahwa URL jarak jauh telah berubah.

git remote -v

# Verifikasi URL jarak jauh baru

origin  [email protected]:USERNAME/REPOSITORY.git (fetch)
origin  [email protected]:USERNAME/REPOSITORY.git (push)
jonnyjandles
sumber