गेट पुश त्रुटि: पुराने को अनलिंक करने में असमर्थ (अनुमति अस्वीकृत)


190

दूरस्थ सर्वर में मेरे पास एक रिपॉजिटरी का चेक चेकआउट करने के लिए एक पोस्ट-प्राप्त हुक सेट है:

#!/bin/sh
GIT_WORK_TREE=/var/www/<website> git checkout -f

लेकिन जब मैं सर्वर में अपने स्थानीय मशीन से गिट रिपॉजिटरी में एक धक्का देता हूं, तो मुझे निम्नलिखित त्रुटि संदेश मिलते हैं:

remote: error: unable to unlink old '<file>' (Permission denied)

यह कई बार दिखाई देता है, लगभग हर फ़ाइल के लिए एक त्रुटि संदेश।

हालाँकि मेरे पास एक README.txt फाइल है जिसे मैं git का उपयोग करके बदलने में सक्षम हूं, यहां इसकी अनुमति है:

-rw-r--r--  1 <serverusername>  <serverusername>  2939 Aug  2 10:58 README.txt

लेकिन एक ही मालिक और एक ही अनुमतियों के साथ अन्य फाइलें, मुझे वह त्रुटि दें।

किसी अन्य वेबसाइट के लिए एक अन्य स्थानीय रिपॉजिटरी में, मेरे पास मालिक के रूप में मेरे स्थानीय मशीन उपयोगकर्ता नाम की फाइलें हैं, और जब मैं दूरस्थ सर्वर पर धकेलता हूं तो यह फाइलों के दूरस्थ सर्वर मालिक का सम्मान करता है और एक आकर्षण की तरह काम करता है।

जाहिर है कि यह अनुमतियों से संबंधित त्रुटि लगती है, लेकिन मुझे इसे ठीक करने का कोई तरीका नहीं मिल रहा है, कोई सुझाव?

जवाबों:


335

जब आपको फ़ाइल को अनलिंक करना होता है, तो आपको निर्देशिका के लिए 'w' की अनुमति लेनी होती है, जिसमें फ़ाइल होती है, फ़ाइल के लिए नहीं ...


65
वास्तव में यही समस्या थी, मैंने इसे sudo chmod -R g+wदोषी फोल्डरों का उपयोग करके ठीक किया ।
rfc1484

1
OMG धन्यवाद। फाइल पर अनुमति सही होने से बहुत नाराज था। समझ में आता है कि अपडेट वास्तव में mvओवरराइट्स की तुलना में अधिक पसंद किए जाते हैं ।
डबलजॉश

1
Dir अनुमतियाँ बदलने से मेरे लिए काम हुआ (धन्यवाद!), लेकिन यह अजीब है क्योंकि मैं मैन्युअल रूप से किसी भी परेशानी के बिना sftp के माध्यम से प्रश्न में फ़ाइलों को अधिलेखित कर सकता हूं। अजीब बात है कि जब git ने ऐसा करने की कोशिश की तो वह ऐसा नहीं कर सका।
जोनाथन स्टार्क

1
यह भी ध्यान रखें कि यदि आपके पास अभी भी फ़ाइल खोली है तो यह त्रुटि दिखाई देगी। एक ही त्रुटि थी और इसीलिए मैं अपने बदलावों को आगे नहीं बढ़ा पा रहा था।
मतिअस

1
ls -lप्रदर्शन का पहला चरित्र फ़ाइल प्रकार को इंगित करता है और अनुमतियों से संबंधित नहीं है। शेष नौ वर्ण तीन सेट में हैं, प्रत्येक तीन वर्णों के रूप में अनुमतियों के वर्ग का प्रतिनिधित्व करता है। पहला सेट उपयोगकर्ता वर्ग का प्रतिनिधित्व करता है। दूसरा सेट समूह वर्ग का प्रतिनिधित्व करता है। तीसरा सेट अन्य वर्ग का प्रतिनिधित्व करता है। g+wChmod में समूह सेट (देता gपैरामीटर) लिखने (करने की अनुमति wपैरामीटर)
rfc1484


41

यदि आप किसी आईडीई का उपयोग कर रहे हैं, तो सबसे अधिक समस्या यह है कि फ़ाइल किसी प्रक्रिया द्वारा उपयोग की गई थी। हो सकता है कि आपका टॉमकैट फ़ाइल का उपयोग कर रहा हो। उस विशेष प्रक्रिया की पहचान करने और उसे बंद करने का प्रयास करें। इससे आपकी समस्या हल हो जानी चाहिए।


12

मेरे पास एक ही मुद्दा था और ऊपर दिए गए समाधानों में से कोई भी मेरे लिए काम नहीं करता था। मैंने आपत्तिजनक फ़ोल्डर को हटा दिया। फिर:

git reset --hard

गिट स्थिति को साफ करने के लिए किसी भी सुस्त फाइल को हटा दिया, फिर किया:

git pull

यह आखिरकार काम कर गया।

नोट: यदि फ़ोल्डर उदाहरण के लिए, बिल्ड फ़ाइलों के साथ एक सार्वजनिक फ़ोल्डर था, तो फ़ाइलों को पुनर्निर्माण करना याद रखें


धन्यवाद, मेरे लिए और कुछ भी काम नहीं कर रहा था, इसे हटाना ही एकमात्र विकल्प प्रतीत हो रहा था।
math0ne

मेरे मामले में, वह अपमानजनक फ़ोल्डर है .it
तुषार कथूरिया

12

मुझे लगता है कि समस्या फ़ोल्डर के स्वामित्व के साथ हो सकती है इसलिए इसे वर्तमान उपयोगकर्ता स्वामित्व पर सेट करें

sudo chown -R your_login_name /path/to/folder
आप इसका समाधान पा सकते हैं [यहाँ] [१]

7

एफडब्ल्यूआईडब्ल्यू - मुझे एक समान समस्या थी और मुझे यकीन नहीं है कि अगर यह इसे (अनुमति मॉड से परे) समाप्त कर दिया गया: क्लोजिंग एक्लिप्स जो इस समस्या के साथ शाखा का उपयोग कर रहा था।


इसी तरह मैंने यह त्रुटि तब प्राप्त की है जब एक संस्करण नियंत्रित सीएसवी फ़ाइल एक्सेल में खुली थी। बस एक्सेल को बंद करके इसे हल किया। यह शायद विंडोज़ पर अन्य अनुप्रयोगों के बारे में भी सच है और शायद यह इस बात पर निर्भर करता है कि प्रोग्राम संपादन के दौरान फ़ाइल को कैसे चिह्नित करता है।
करियर

3

यह एक पुराना प्रश्न है, लेकिन इससे मैक उपयोगकर्ताओं को मदद मिल सकती है।

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

उदाहरण के लिए, इस आलेख में वह खंड जो "मैक ओएस एक्स फ़ाइल को कैसे ठीक करें" अनुमतियाँ बताता है कि "सभी" में कस्टम अनुमतियाँ हैं, जो इसे गड़बड़ करती हैं:

खराब अनुमतियाँ, http://dreamlight.com/how-to-fix-mac-os-x-file-permissions पर

आपको उन निर्देशिकाओं / फ़ाइलों से ACL को निकालने की आवश्यकता है। यह सुपर उपयोगकर्ता का उत्तर इसमें जाता है, लेकिन यहां कमांड है:

sudo chmod -RN .

तब आप यह सुनिश्चित कर सकते हैं कि आपकी निर्देशिकाओं और फ़ाइलों की उचित अनुमति हो। मैं 750निर्देशिकाओं के लिए और 644फ़ाइलों के लिए उपयोग करता हूं ।


2

जब मुझे सर्वर चल रहा होता है (Intellij में), तो मुझे यह त्रुटि, और अन्य अजीब तरह की त्रुटियाँ मिलती हैं। सर्वर को रोकना और गिट कमांड को फिर से कोशिश करना मेरे लिए अक्सर इसे ठीक करता है।


2
git reset --hard

मेरे लिए काम किया


4
यह थोड़ा बहुत हो सकता है क्योंकि यह पूरी तरह से बहुत अधिक करता है।
cdaddr

2
sudo chown -R $USER:$USER .

मेरे लिए काम किया।


1

कुछ फाइलें राइट-प्रोटेक्टेड होती हैं जो इसे लिखने में भी गिट नहीं कर सकती हैं। लिखने के लिए फ़ोल्डर की अनुमति बदलें उदाहरण के लिए sudo chmod 775 foldername

और फिर गिट पुल


0

इसके अलावा रूट निर्देशिका की अनुमति की जांच करने के लिए याद रखें!

आप पा सकते हैं:

drwxr-xr-x  9 not-you www-data  4096 Aug  8 16:36 ./
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 README.txt
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 UPDATE.txt

और 'अनुमति अस्वीकृत' त्रुटि पॉप अप होगी।


0

खींचने से स्थानीय परिवर्तन हो सकता है।

अपनी अनट्रैक फ़ाइल जोड़ें:

जोड़ देना।

तना परिवर्तन।

जीआईटी की मार

स्थानीय परिवर्तन छोड़ें।

git stash ड्रॉप

सुडो अनुमति के साथ खींचो

सुदो गिट पुल रिमोट शाखा


यह सभी स्थानीय फ़ाइलों की अनुमति के बारे में है, जिनका git से कोई लेना-देना नहीं है, मैंने सिर्फ sudo के साथ कमांड को चलाया है और काम किया है इसलिए इन सभी चरणों की आवश्यकता नहीं है
raviramani
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.