क्या उस रिपॉजिटरी के बिना एक रिपॉजिटरी के खिलाफ Git कमांड को निष्पादित करने का एक तरीका है?
उदाहरण के लिए कुछ इस तरह git /home/repo log:?
कृपया मुझे इसे न बताएं cd। मैं एक execकॉल के माध्यम से यह कर रहा हूँ ।
क्या उस रिपॉजिटरी के बिना एक रिपॉजिटरी के खिलाफ Git कमांड को निष्पादित करने का एक तरीका है?
उदाहरण के लिए कुछ इस तरह git /home/repo log:?
कृपया मुझे इसे न बताएं cd। मैं एक execकॉल के माध्यम से यह कर रहा हूँ ।
जवाबों:
प्रयत्न:
git --git-dir=/home/repo/.git log
अपनी रिपॉजिटरी की .git निर्देशिका तक सभी तरह से रास्ता देना महत्वपूर्ण है। अन्यथा आपको केवल एक त्रुटि संदेश मिलेगा जो कुछ कहता है:
fatal: Not a git repository
fatal: Not a git repository (or any of the parent directories): .git। @ पैट्रिक मैंने कुछ भी वोट नहीं किया?
--work-dirमुझे लगता है कि कहा गया है)
git status। -Cजाने का सही तरीका है।
-Cविकल्प का उपयोग करें ( डॉक्स ):
git -C /home/repo log
यह सामान्य फोल्डर को जोड़ने और उसके बिना लगभग बराबर है--git-dir--work-tree.git
संपादित करें:
उत्तर अस्वीकृत ... काफी आश्चर्यजनक, जैसे, सख्ती से बोलना, यह सवाल का एकमात्र सही उत्तर है। विकल्प --git-dirऔर --work-treeकाम के पेड़ के बाहर से भंडार तक पहुंचने के लिए मौजूद नहीं हैं, उनका उपयोग .gitकहीं और स्थानांतरित करने के लिए किया जाता है , और वे कुछ मामलों में उपयोग करने के लिए अधिक जटिल हैं।
उदाहरण के लिए, /home/repo/subdirकेवल लॉग पाने के लिए :
git -C /home/repo/subdir log .
या
git -C /home/repo log subdir
के log .साथ --git-dirया का उपयोग करना संभव नहीं है --work-tree। काम के पेड़ के शीर्ष के सापेक्ष उपपथ को निकालने के लिए पथ को संसाधित किया जाना चाहिए, और उस स्थिति में भी, गिट इसे एक पथ के रूप में नहीं पहचानेंगे यदि आप --विकल्प का उपयोग नहीं करते हैं , तो एकमात्र संभव तरीका है:
git --git-dir /home/repo/.git log -- subdir
इसके अलावा, सबकॉमैंड के साथ मेरे संस्करण (git 1.9.1) के --work-treeसाथ बिल्कुल भी काम नहीं कर रहा है log। यह सिर्फ अनदेखा है:
git --git-dir /home/repo/.git --work-tree /home/repo/subdir log -- subdir
git --git-dir /home/repo/.git --work-tree /home/repo/whatever log -- subdir
मुझे यह भी समझ में नहीं आता है कि क्या यह बग या एक विशेषता है ... हमेशा की तरह कई डिज़ाइन डिज़ाइन विकल्पों के साथ।
git stashएक उपकमांड का एक और उदाहरण है जो विफल हो जाता है --git-dirऔर --work-treeउपयोग किया जाता है।
वास्तव में आपको - इगिट-डिर और --वर्क-ट्री का एक साथ उपयोग करने की आवश्यकता है। यहाँ एक उदाहरण है:
local [] Desktop: mkdir git
local [] Desktop: cd git
local [] git: touch README.txt
local [] git: git init
Initialized empty Git repository in /Users/albert/Desktop/git/.git/
local [] git: cd ..
local [] Desktop: git --work-tree=git --git-dir=git/.git add .
local [] Desktop: git --work-tree=git --git-dir=git/.git commit -a -m 'initial commit, called from outside the git directory'
[master (root-commit) ee951b1] initial commit, called from outside the git directory
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.txt
local [] Desktop: cd git
local [] git: git log --pretty=oneline
ee951b161053e0e0948f9e2a36bfbb60f9c87abe initial commit, called from outside the git di
यह @ अधिकतम उत्तर के समान है। दुर्भाग्य से, --गित-दिर ने वह नहीं किया जिसकी मुझे आवश्यकता थी। संपादित करें पूर्वव्यापी में, एक और [पिछला] उत्तर जिसका मैंने उपयोग करने का सुझाव नहीं पढ़ा था --work-tree। मुझे यकीन नहीं है कि पर्यावरण या झंडे का उपयोग करना अधिक उचित है इसलिए मैं अपना जवाब छोड़ दूंगा अगर कोई इसमें उपयोग करता है, लेकिन मैं उपयोग करने के लिए स्विच करूंगा --work-tree/ करूंगा --git-dir।
दो रिपोज हैं, एक दूसरे के अंदर लेकिन एक सबमॉड्यूल नहीं; बाहरी रेपो इसकी उपेक्षा करता है:
tools (outer repo)
gcc/4.9.2 (inner repo)
जो मैं चाहता था git rev-parse --show-prefixवह बाहरी रेपो के सापेक्ष उत्पादन था । यहाँ मैं (बैश वाक्य रचना के साथ आया था, पठनीयता के लिए लाइनों में विभाजित):
prefix_dir=$(cd ..; git rev-parse --show-toplevel)
prefix_dir=$(GIT_WORK_TREE=${prefix_dir} git rev-parse --show-prefix)
4.9.2 के भीतर से निष्पादित होने पर यह स्ट्रिंग का उत्पादन करता है gcc/4.9.2।
किसी भी git कमांड के लिए, आप कर सकते हैं:
git --git-dir=<PATH-TO-REPO>/.git --work-tree=<PATH-TO-REPO> <git-command>
उदाहरण के लिए, यदि आप git स्टेटस करना चाहते हैं:
git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/ status
या यदि आप उस शाखा की जाँच करना चाहते हैं जो रेपो में है:
git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/ rev-parse --abbrev-ref HEAD