मैं git को हर git कमांड पर sudo की आवश्यकता से कैसे रोकूँ


11

मैंने /var/wwwअपने वेब ऐप्स क्लोन को स्टोर करने के लिए एक निर्देशिका बनाई । जब मैंने शुरुआत में GitHub से ऐप को क्लोन किया तो मुझे इसके लिए sudo का उपयोग करने की आवश्यकता हुई और हर बार मुझे git pullयह sudo की आवश्यकता होती है। मैं इस वजह से कुछ समस्याओं में भाग रहा हूं। उदाहरण के लिए, मेरी ssh कुंजियाँ मेल नहीं खा रही हैं। इसलिए जब मैं अपना git pullकर लेता हूं , तो मुझे ssh के बजाय HTTPS का उपयोग करना पड़ता है और हर बार जब मैं अपने ऐप को खींचना और अपडेट करना चाहता हूं, तो हर बार अपना उपयोगकर्ता नाम और पासवर्ड दर्ज करें। मैं इसे कैसे कॉन्फ़िगर करूँ इसलिए मुझे हर बार मैं git का उपयोग करने के लिए sudo का उपयोग करने की आवश्यकता नहीं है?

जवाबों:


13

कुछ बातें यहाँ चल रही हैं:

  • जब आप sudo git checkout ..., वे सभी फाइलें रूट उपयोगकर्ता और रूट समूह के स्वामित्व में होती हैं। मानक अनुमतियों के साथ, इसीलिए बाद में उन फ़ाइलों में परिवर्तन करने के लिए आपको रूट होना चाहिए।

  • /var/www/डिफ़ॉल्ट रूप से www-dataसमूह के स्वामित्व में है । आपका कुछ उपयोगकर्ता डिफ़ॉल्ट रूप से नहीं है।

लिखने का सबसे आसान तरीका /var/www/है कि आप अपने उपयोगकर्ता को www-data समूह में जोड़ें । आप निश्चित रूप से, अपने उपयोगकर्ता के स्वामित्व के लिए निर्देशिका को बदल सकते हैं, लेकिन अगर आप उन्हें पहले से खाली नहीं कर रहे हैं तो इसके कुछ बुरे असर हो सकते हैं।

आपको अपने उपयोगकर्ता को www-data समूह में जोड़ने के बाद फिर से लॉग इन करना होगा।

आपके मामले में विशेष रूप से, आपको रूट-स्वामित्व वाले डेटा के अपने वर्तमान गड़बड़ को ठीक करने की आवश्यकता होगी। आप इसे रूट (और री-चेकआउट) के रूप में हटा सकते हैं, लेकिन यदि आपके पास बिना सहेजे हुए कार्य हैं, तो यह सब कुछ आपके उपयोगकर्ता के लिए वापस खींचने के लिए क्लीनर होगा। निम्न उदाहरण अत्यंत आलसी है और यह मानता है कि हम जो बात कर रहे हैं वह केवल / var / www / में है:

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

ठीक है, यह सिर्फ sudo git checkoutएक और निर्देशिका में बेहतर होगा , और तब / var / www निर्देशिका में मेरे एप्लिकेशन को तैनात करेगा? मैंने अभी कहीं पढ़ा है कि आमतौर पर परियोजनाओं को चेक निर्देशिका में शुरू करने के लिए एक अच्छा विचार नहीं है। एक व्यक्ति ने घर की निर्देशिका में परियोजनाओं की जांच करने की सिफारिश की
स्कॉट

2
यह सबसे अच्छा होगा यदि आपने रूट के रूप में गिट चलाना बंद कर दिया। उसके लिए निशाना लगाओ। जो भी योजना आपको रूट के रूप में चलती है वह पहले ही विफल हो चुकी है। आप एक वेबनिर्माता में जांच करने के बारे में जो कह रहे हैं वह सही है - लोगों को आपकी .gitनिर्देशिका तक पहुंच प्रदान करने से आप उन चीजों तक पहुंच प्राप्त कर सकते हैं, जिन्हें आप लोगों तक पहुंच नहीं देना चाहते हैं, लेकिन आप.git/ पूरे मुद्दे को कम करने वाले डायर तक पहुंच को रोक सकते हैं
ओली

ऐसी अन्य स्वीकार्य निर्देशिका संरचनाएँ भी हैं जहाँ आपके पास अपनी वेबसाइट के लिए एक होल्डिंग निर्देशिका है जहाँ गैर-होस्टेड सामान जाता है (आपके .गित सहित) और उसके अंदर एक सार्वजनिक / निर्देशिका होती है जिसे आप अपाचे को होस्ट करने के लिए कहते हैं। एक वेबसाइट को / var / www / में रखने का लोकाचार बहुत पुरातन है।
ओली

क्या आपके पास एक अनुशंसित निर्देशिका संरचना है? असल में, मेरे पास मेरा चेकआउट है, और फिर मुझे एक टीटीजी में बंडल करना होगा। और फिर मुझे लगता है कि एक नोड अनुप्रयोग में खोलना है। यह वैसे तो एक उल्का अनुप्रयोग है। मैं उलझन में हूं कि इन तीन अलग-अलग फ़ोल्डरों / फाइलों को कहां रखा जाए
स्कॉट

@ सच कहूँ तो मैं इसी मुद्दे पर भागा था। रेपो में अनुवर्ती उपखंड (मेरे मामले में) गिट को कॉल करेगा और अन्य रेपो को क्लोन करने की कोशिश करेगा। आपके द्वारा बताए अनुसार SSH कुंजियों को पुनः संरेखित करने का समाधान, सुडो का उपयोग किए बिना प्रक्रिया शुरू करना था। इस क्यू एंड ए और थ्रेड चर्चा का एक काम एक ऐसा काम है जिसके बारे में शायद आपने सड़क पर दीवारें मार दी होंगी।
जॉर्डन स्टेफानेली

0

Hm, फ़ोल्डर का स्वामी परिवर्तित करें? मैंने अपना www फ़ोल्डर / होम / उपयोगकर्ता नाम में स्थानांतरित कर दिया है, आप इसे / etc / apache2 / साइटों-सक्षम / 1,000-डिफ़ॉल्ट में बदल सकते हैं


तो यह उस निर्देशिका के साथ करना है जो मैं अपने क्लोन को स्टोर कर रहा हूं?
स्कॉट

हाँ बिल्कुल। डिफ़ॉल्ट रूप /var/wwwसे लिखा नहीं जा सकता।
जॉयफुलग्रिंड

0

मुझे इस उत्तर के साथ थोड़ा देर हो गई है, लेकिन मैंने पाया कि हर बार पासवर्ड दर्ज करने से बचने के लिए मुझे रेपो को https से ssh में बदलना होगा।

Github.com सहायता अनुभाग से:

Git रिमोट सेट- url कमांड एक मौजूदा रिमोट रिपॉजिटरी URL को बदलता है।

टर्मिनल खोलें।

वर्तमान कार्यशील निर्देशिका को अपनी स्थानीय परियोजना में बदलें।

आप जिस रिमोट को बदलना चाहते हैं उसका नाम पाने के लिए अपने मौजूदा रिमोट को सूचीबद्ध करें।

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

अपने दूरस्थ URL को HTTPS से SSH में git दूरस्थ सेट-url कमांड से बदलें।

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

सत्यापित करें कि दूरस्थ URL बदल गया है।

git remote -v

# नया दूरस्थ URL सत्यापित करें

origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.