Git'in her git komutunda sudo gerektirmesini nasıl önlerim


11

/var/wwwWeb uygulamalarımı klonlamak için bir dizin oluşturdum . Uygulamayı GitHub'dan klonladığımda sudo kullanmam gerekiyordu ve her yaptığımda git pullsudo gerektiriyor. Bu yüzden bazı sorunlarla karşılaşıyorum. Örneğin, ssh anahtarlarım eşleşmiyor. Bu yüzden, benim yaptığım zaman git pull, ssh yerine HTTPS kullanmak ve uygulamamı her çekip güncellemek istediğimde kullanıcı adımı ve şifremi manuel olarak girmek zorunda kalıyorum. Git'i her kullandığımda sudo kullanmak zorunda kalmam için bunu nasıl yapılandırabilirim?

Yanıtlar:


13

Burada birkaç şey oluyor:

  • Siz sudo git checkout ..., tüm bu dosyalar kök kullanıcı ve kök grubuna aittir. Standart izinlerle, bu dosyalarda daha sonra yapılacak değişiklikler kök olmanızı gerektirir.

  • /var/www/varsayılan olarak www-datagruba aittir . Kullanıcınız varsayılan olarak bir şey değildir.

Yazmayı kolay yolu /var/www/sadece etmektir www-data grubuna kullanıcı eklemek . Tabii ki, kullanıcı tarafından sahip olunan dizini değiştirebilirsiniz, ancak onları boşaltmak yoksa, bazı kötü vuruntu etkileri olabilir.

Kullanıcılarınızı www-data grubuna ekledikten sonra tekrar giriş yapmanız gerekecektir.

Özellikle sizin durumunuzda, kök sahipli verilerin mevcut karışıklığını düzeltmeniz gerekecektir. Kök olarak silebilirsiniz (ve yeniden ödeme yapabilirsiniz) ancak kaydedilmemiş çalışmanız varsa, her şeyi kullanıcılarınıza geri çekmek daha temiz olacaktır. Aşağıdaki örnek son derece tembeldir ve bahsettiğimiz şeyin / var / www / içindeki tek şey olduğunu varsayar:

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

Tamam, sadece sudo git checkoutbaşka bir dizine girip uygulamamı / var / www dizinine yerleştirmek daha iyi olur mu? Ben sadece bir yerde başlamak için var dizine projeleri ödeme için iyi bir fikir olmadığını okudum. Bir kişi ana dizine projeleri kontrol etmeyi önerdi
Scott

2
Bu olurdu iyi root olarak budala duruvermiş eğer. Bunu hedefle. Kök olarak çalıştırmanızı sağlayan herhangi bir plan zaten başarısız olmuştur. Bir web .gitdizinine göz atma hakkında söyledikleriniz doğrudur - kişilerin dizininize erişmesine izin vermek, kullanıcıların erişmesine izin vermek istemediğiniz şeylere erişmelerini sağlayabilir, ancak tüm sorunu azaltan direkt erişimini önleyebilirsiniz.git/ .
Oli

Ayrıca, web siteniz için barındırılmayan öğelerin (.git'iniz dahil) gittiği ve içinde Apache'ye barındırmasını söylediğiniz bir genel / dizinin bulunduğu bir tutma dizinine sahip olduğunuz diğer kabul edilebilir dizin yapıları da vardır. Bir web sitesini / var / www / içinde tutmanın ahlakı çok arkaiktir.
Oli

Önerilen bir dizin yapınız var mı? Temel olarak, benim kasam var ve sonra bunu bir .tgz içine paketlemek zorunda. Ve sonra bunu bir düğüm uygulamasına açmak zorundayım. Bu arada bir meteor uygulaması. Bu üç ayrı klasörü / dosyayı nerede saklayacağım konusunda biraz kafam karıştı
Scott

@Scott Ben de aynı sorunu yaşadım. Repodaki sonraki alt komutlar (benim durumumda) git'i çağırır ve diğer depoları klonlamaya çalışır. SSH anahtarlarını belirttiğiniz gibi yeniden hizalamanın çözümü, sudo kullanmadan işleme başlamaktı. Bu soru-cevap ve konu tartışmasının birçoğu, muhtemelen yol boyunca duvarlara çarpmanızı sağlayacak bir çözümdür.
Jordan Stefanelli

0

Hm, klasör sahibini değiştir? Www klasörümü / home / username içine taşıdım, / etc / apache2 / sites-active / 000-default içindeki konumunu değiştirebilirsiniz


Yani klonumu sakladığım dizinle mi ilgili?
Scott

Evet kesinlikle. Varsayılan /var/wwwolarak yazılamaz.
Joyfulgrind

0

Bu yanıta biraz geç kaldım, ancak her seferinde deponun https'den ssh'ye değiştirilmesi gerektiğinde şifre girmekten kaçındım.

Github.com yardım bölümünden:

Git remote set-url komutu mevcut bir uzak depo URL'sini değiştirir.

Terminal'i açın.

Geçerli çalışma dizinini yerel projenize değiştirin.

Değiştirmek istediğiniz uzaktan kumandanın adını almak için mevcut uzaktan kumandalarınızı listeleyin.

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

Git remote set-url komutuyla uzaktan kumandanızın URL'sini HTTPS'den SSH'ye değiştirin.

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

Uzak URL'nin değiştiğini doğrulayın.

git remote -v

# Yeni uzak URL'yi doğrulayın

origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.