2012-03-24 12 views
17

पर निर्भर करता है मैं किसी भी निर्देशिका से रूट उपयोगकर्ता के माध्यम से git pull कुछ भंडार करने की कोशिश कर रहा हूं।गिट खींचने वर्तमान डीआईआर

उदाहरण के लिए, git pull/root/ से क्रियान्वित:

#> cd ~ 
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull 
/usr/libexec/git-core/git-sh-setup: line 142: cd: /root/.: Permission denied 
Cannot chdir to /root/., the toplevel of the working tree 

और git pull/ से क्रियान्वित:

#> cd/
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull 
Already up-to-date. 

क्यों वर्तमान निर्देशिका git pull ing आदेश को प्रभावित करता है?

यह अनावश्यक cd से कैसे बचा जा सकता है?

+0

यह आपके रेपो के अंदर एक फ़ोल्डर कहां है/रूट है? यदि यह है कि आपको अनुमति समस्या नहीं होनी चाहिए। यदि/रूट आपकी गिट संरचना के बाहर है, तो सवाल पूछने के लिए सवाल यह है कि यह उस फ़ोल्डर को पहली जगह क्यों एक्सेस कर रहा है? – bluesman

+0

आप रूट के रूप में काम करने की कोशिश क्यों कर रहे हैं? – Ethan

+0

मैं रूट के साथ काम करने की कोशिश कर रहा हूं क्योंकि यह eix-sync.conf की सामग्री है। –

उत्तर

16

आपके पहले उदाहरण में, गिट कमांड उपयोगकर्ता dmalikov के रूप में वर्तमान निर्देशिका /root के साथ चलाता है। चूंकि git pull कमांड git fetch के समतुल्य है, इसके बाद git merge है, और git merge कार्यरत पेड़ पर चल रहा है, इसलिए गिट काम करने वाले पेड़ की तलाश करने की कोशिश करता है। चूंकि इस उपयोगकर्ता को cd /root पर अनुमति नहीं है, तो git कमांड विफल रहता है।

यहां तक ​​कि आपका दूसरा उदाहरण काम नहीं करेगा जैसा आप उम्मीद करेंगे। यदि वास्तविक परिवर्तन किए जाने हैं ("पहले से ही अद्यतित" की बजाय), तो git pull विफल हो जाएगा क्योंकि यह कार्यरत पेड़ नहीं ढूंढ सकता है।

1) तुम बस करने से आपरेशन के git fetch भाग कर सकते हैं::

sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git fetch 

जो मेरे लिए किसी भी त्रुटि नहीं देता

आप कुछ सरल विकल्प हैं।

2) आप काम कर पेड़ से एक cd जोड़ सकते हैं:

(cd /home/dmalikov/path/to/repo; sudo -u dmalikov git pull) 
+1

संबंधित: git --git-dir अपेक्षित काम नहीं कर रहा है: http://stackoverflow.com/questions/1386291/git-git-dir-not-working-as-expected – kenorb

0

मुझे नहीं लगता कि सीडी से बचना संभव है क्योंकि आप उस उपयोगकर्ता के साथ गिट चलाते हैं जिसके पास निर्देशिका को वर्तमान निर्देशिका में बदलने की अनुमति नहीं है, यानी रूट।/क्योंकि वर्तमान निर्देशिका स्पष्ट रूप से काम करती है क्योंकि सभी को उस निर्देशिका में बदलने की अनुमति है।

+0

'घातक: '/ root' पर वापस नहीं बदला जा सका: अनुमति अस्वीकृत' –

+0

मेरा उत्तर बदल गया। इसे अनुमतियों के साथ करना है और नहीं - कार्य-पेड़ जैसा कि मैंने शुरू में सोचा था। – ralphtheninja

2

अपने ही टिप्पणी का जवाब करने के लिए,/जड़ एक दिलचस्प त्रुटि थी

यह --git-निर्देशिका के साथ काम करवाने के लिए आपको एक कार्य-पेड़ निर्देशिका निर्दिष्ट करने की भी आवश्यकता है

sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git --work-tree=/home/dmalikov/path/to/repo/.git pull 
+1

'घातक: वापस नहीं बदला जा सका '/ जड़ ': अनुमति अस्वीकृत' –

+0

आप किस मशीन पर हैं? यह आपके सिस्टम (विंडोज़ या लिनक्स) विशिष्ट पथ का उपयोग करेगा। मेरी स्थानीय मशीन (विंडोज़ पर गिट बैश) पर निम्नलिखित काम करता है '$ git --git-dir =/c/workspace/change/.git --work-tree =/c/workspace/change/pull पहले से ही अद्यतित। – bluesman

+0

डीआईआर से अपना आदेश निष्पादित करने का प्रयास करें, जहां आप गैर-रूट उपयोगकर्ता के माध्यम से 'cd' नहीं कर सकते हैं। –

संबंधित मुद्दे