उम्मीद के मुताबिक काम नहीं कर रहे हैं


209

मैं एक अलग निर्देशिका से git चलाने की कोशिश कर रहा हूँ जिससे मैं अंदर हूँ। उदाहरण के लिए अगर मैं इसमें हूँ:

cd /home/domain/
git status << runs perfect ie
# On branch master
# Your branch is ahead of 'origin/master' by 6 commits.

तो अब मैं --git-dirविकल्प का उपयोग करके एक अलग निर्देशिका से इस कमांड को चलाना चाहता हूं ।

तो चलो मैं कहता हूँ root/और यह कोशिश कर रहा हूँ :

git --git-dir="/home/domain/" status
## Error 
fatal: Not a git repository: '/home/domain/'

मैंने .gitफ़ोल्डर को भी शामिल करने की कोशिश की है

git --git-dir="/home/domain/.git/" status

लेकिन ऐसा लगता है कि यह रूट से गिट चलाने की कोशिश कर रहा है, अर्थात मेरे डोमेन फ़ोल्डर से सब कुछ हटाकर सब कुछ रूट में जोड़ रहा है।

आशा है कि कोई इस बात पर सलाह दे सकता है कि मैं क्या गलत कर रहा हूं।


4
अब मुझे काम करने की स्थिति सही मिल गई है, लेकिन पुल त्रुटियों को दे रहा है। मूल रूट @ erx [/] # git-git-dir = / home / domain / .it --work-tree = / home / डोमेन / पुल ओरिजिनल मास्टर घातक: / usr / स्थानीय / libexec / git-core / git -पुल का इस्तेमाल बिना वर्किंग ट्री के नहीं किया जा सकता। लेकिन स्टेटस काम करता है ?? किसी भी विचार जॉन
ली

4
यह अभी गिट में सबसे बड़ा बग है। --वर्क-ट्री और / या --गित-दिर मापदंडों का सम्मान नहीं करना।
एडम डाइमिट्रुक

5
1.8.5 git शुरू करने के लिए, आपके पास सेट करने का विकल्प नहीं होगा--git-dir और --work-treeएक साधारण कमांड के लिए: नीचे मेरा उत्तर देखें
VonC

जवाबों:


314

आपको काम करने वाले डायर को भी परिभाषित करना होगा। भ्रामक मुझे पता है, लेकिन यह एक लचीली बात है।

git --git-dir=/mycode/.git --work-tree=/mycode status

आप यहाँ थोड़ा और पढ़ सकते हैं


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

3
@ कोई सहमत --git-dirनहीं था , आपको लगता है कि यदि निर्दिष्ट नहीं किया गया था, तो यह जाँच करेगा /mycode/.gitकि क्या अस्तित्व में है और त्रुटि को फेंकने से पहले इसका उपयोग करें।
GP89

4
@NickYeates दूसरी! इसके अलावा, मुझे एक समस्या थी जब ~ का उपयोग करके अपने घर की निर्देशिका को संदर्भित करने के लिए, उदाहरण के लिए git --git-dir=~/src/s3cmd/.git --work-tree=~/src/s3cmd pullकाम नहीं किया, लेकिन git --git-dir=/home/username/src/s3cmd/.git --work-tree=/home/username/src/s3cmd pullकिया
जेमी कुक

1
ध्यान दें कि सभी कमांडों को कार्य-वृक्ष की आवश्यकता नहीं होती है, उदाहरण के लिए, "git --git-dir = / mycode.it लॉग" यह कार्य ठीक करता है। हालांकि यह भ्रमित होने पर सहमत हो गया!
योय

4
थोड़ा स्पष्टीकरण: git --git-dir="$HOME/foo/.git" --work-tree="$HOME/foo" status
हारिस क्रेजीना

136

1.8.5 git शुरू करना (जो अगले सप्ताह बाहर होना चाहिए), यह और भी सरल होगा:

 git -C "/home/domain/" status

अब --git-dirऔर सेट करने की आवश्यकता --work-treeनहीं है!


देखें नाज़री रामली द्वारा प्रतिबद्ध 44e1e4 :

वर्तमान निर्देशिका को छोड़े बिना एक अलग निर्देशिका में git कमांड को लागू करने के लिए अधिक कीपेस लगते हैं:

  1. (cd ~/foo && git status)
    git --git-dir=~/foo/.git --work-dir=~/foo status
    GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
  2. (cd ../..; git grep foo)
  3. for d in d1 d2 d3; do (cd $d && git svn rebase); done

ऊपर दिखाए गए तरीके स्क्रिप्टिंग के लिए स्वीकार्य हैं लेकिन त्वरित कमांड लाइन चालान के लिए बहुत बोझिल हैं।

इस नए विकल्प के साथ, उपरोक्त कुछ कीस्ट्रोक्स के साथ किया जा सकता है:

  1. git -C ~/foo status
  2. git -C ../.. grep foo
  3. for d in d1 d2 d3; do git -C $d svn rebase; done

4
मैं git कमांड (जैसे काम नहीं करेगा!) के बाद -सी ध्वज का उपयोग करने की कोशिश में git status -C <path>
फंस गया

42

ऊपर आपकी टिप्पणी के आधार पर, ऐसा लगता है कि आप अभी भी एक समस्या में चल रहे हैं:

root @ erx [/] # git --गित-दिर = / घर / डोमेन / .गित - कार्य-वृक्ष = / घर / डोमेन / पुल मूल मास्टर
घातक: / usr / स्थानीय / libexec / git-core / git-pull का उपयोग कार्यशील पेड़ के बिना नहीं किया जा सकता है

ऐसा लगता है कि आप इसे crontabया कुछ और से चलाने का इरादा कर सकते हैं । cdपहले अपनी वर्किंग डायरेक्टरी में जाने के लिए आप बेहतर इस्तेमाल कर सकते हैं । उदाहरण के लिए:

रूट @ erx [/] # (सीडी / घर / डोमेन और & git पुल मूल मास्टर)

यह अस्थायी रूप से (एक उपधारा में, जो कोष्ठक करते हैं) वर्तमान निर्देशिका को बदलते हैं /home/domain, और फिर चलाते हैं git pull origin master। कमांड पूरा होने के बाद, आपकी वर्तमान डायरेक्टरी वही रहती है जो कमांड के पहले थी।


एक उपधारा का उपयोग करना सरल और सुरुचिपूर्ण है। मुझे नहीं पता कि मैंने इसके बारे में पहले क्यों नहीं सोचा!
एहतेश चौधरी

क्षमा करें @Greg, जॉन द्वारा दिए गए अन्य उत्तर को वोट दिया क्योंकि यह पूछे गए प्रश्न का उत्तर देता है - लेकिन मुझे लगता है कि आप हाजिर हैं और इरादे और आपकी अंतर्दृष्टि का जवाब दे रहे हैं () s, ठीक वही है जो मैं +10 के लिए देख रहा था
डैरेन बिशप

1
git --git-dir="/home/domain/" status
## Error 
fatal: Not a git repository: '/home/domain/'

Git 2.26 (Q1 2020) के साथ, प्रलेखन स्पष्ट है।

यह निर्दिष्ट करने का एक प्रभाव कि कहां GIT_DIRहै (या तो पर्यावरण चर के साथ, या " git --git-dir=<where> cmd" विकल्प के साथ) रिपोजिटरी खोज को अक्षम करना है

यह प्रलेखन में थोड़ा अधिक तनाव में रखा गया है, क्योंकि नए उपयोगकर्ता अक्सर भ्रमित होते हैं।

Heba Waly ( ) द्वारा प्रतिबद्ध d82ad54 (30 जनवरी 2020) देखें । (द्वारा विलय Junio सी Hamano - - में 17e4a1b प्रतिबद्ध , 12 फ़र 2020)HebaWaly
gitster

git: --git-dir के लिए अद्यतन प्रलेखन

साइन-ऑफ-बाय: हेबा वाल्दी हेल्प -बाय: जुनियो
सी हमानो

git --git-dir <path> थोड़ा भ्रामक है और कभी-कभी काम नहीं करता है क्योंकि उपयोगकर्ता इसकी अपेक्षा करेगा।

उदाहरण के लिए, यदि उपयोगकर्ता चलाता है git --git-dir=<path> status, तो git रिपॉजिटरी डिस्कवरी एल्गोरिथ्म को छोड़ देगा और उपयोगकर्ता के वर्तमान कार्य निर्देशिका को कार्य ट्री निर्दिष्ट करेगा जब तक कि वह निर्दिष्ट न हो।
जब यह असाइनमेंट गलत है, तो आउटपुट उपयोगकर्ता की अपेक्षाओं से मेल नहीं खाएगा।

यह पैच दस्तावेज़ को साफ़ करने के लिए अद्यतन करता है।

तो अब के लिए प्रलेखन मेंgit --git-dir शामिल हैं:

--git-dir=<path>:

रिपॉजिटरी (" .git" निर्देशिका) के लिए पथ सेट करें ।
इसे GIT_DIRपर्यावरण चर को सेट करके भी नियंत्रित किया जा सकता है ।
यह वर्तमान कार्यशील निर्देशिका के लिए एक निरपेक्ष पथ या सापेक्ष पथ हो सकता है।

.gitइस विकल्प (या GIT_DIRपर्यावरण चर) का उपयोग करके " " निर्देशिका के स्थान को निर्दिष्ट करने से रिपॉजिटरी खोज बंद हो जाती है जो निर्देशिका को " .git" उपनिर्देशिका के साथ खोजने की कोशिश करती है (जो कि रिपॉजिटरी और वर्किंग ट्री के शीर्ष-स्तर की खोज की जाती है), और गिट को बताता है कि आप काम करने वाले पेड़ के शीर्ष स्तर पर हैं।

यदि आप वर्किंग ट्री की टॉप-लेवल डायरेक्टरी में नहीं हैं, तो आपको Git को बताना चाहिए कि वर्किंग ट्री का टॉप-लेवल --work-tree=<path>ऑप्शन (या GIT_WORK_TREEएनवायरनमेंट वेरिएबल) के साथ कहां है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.