चेकआउट रिपॉजिटरी के बाहर एक स्थान पर Git फाइलें


21

क्या भंडार के बाहर किसी स्थान पर "चेकआउट" करना संभव है? मेरा मतलब है कि ".गित" निर्देशिका के बिना एक शाखा का एक क्लोन है।

उदाहरण के लिए: किसी वेबसाइट को प्रबंधित करने के लिए git का उपयोग करें। आप कुछ फ़ाइलों को संपादित करते हैं, WebDAV के माध्यम से वेब सर्वर पर फ़ाइलों को कॉपी और कॉपी करते हैं। WebDAV-path रिपॉजिटरी के बाहर का स्थान होगा, जिसमें ".it" नहीं होना चाहिए।

यह वह समस्या नहीं है जिसके लिए गिट का निर्माण किया गया था, लेकिन क्या यह संभव है?

जवाबों:


19

हां, यह निश्चित रूप से संभव है।

कहते हैं, मेरे पास एक नंगे भंडार है जिसका नाम /srv/production.gitगंतव्य प्रणाली / सर्वर है।

गंतव्य प्रणाली पर मैं कमांड का उपयोग कर सकता हूं cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

यदि मैं एक गैर-नंगे भंडार में हूं तो कमांड थोड़ा अलग है। आइए कहते हैं कि मेरे पास एक गैर-नंगे श्वसन केंद्र है /srv/testing। जांच करने के लिए कि मैं उपयोग करूंगाcd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

वास्तव में मेरे सिस्टम पर मैं अपने production.gitरिपॉजिटरी में पोस्ट-कम हुक में भी इसे स्वचालित करता हूं । इसलिए जब आप production.gitनवीनतम संस्करण पर धक्का देते हैं तो स्वचालित रूप से वेब रूट की जाँच कर लेते हैं ।

#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.

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


कई स्थानों में खोजा .. केवल काम कर समाधान, भी साफ!
कार्तिकेयन

6

यदि आप केवल फाइलें चाहते हैं, तो आप उपयोग कर सकते हैं git archive। आमतौर पर यह तारकोल या जिप जैसे संग्रह को लिखता है, लेकिन आप इसे भी पाइप कर सकते हैं:

git archive master | tar -x -C /some/path

यहाँ, masterस्पष्ट रूप से वह शाखा है जिसे आप संग्रह करना चाहते हैं, और /some/pathइसमें सिर्फ फाइलें होंगी - नहीं .gitया .gitignore


या आप उपयोग कर सकते हैं git checkout-indexजो अधिक बारीकी से फाइलों के "चेकआउट" जैसा दिखता है:

git checkout-index -f -a --prefix=/some/path/

यहां, -aविकल्प gitसभी फ़ाइलों की जांच करना बताता है। उपसर्ग उत्पादन के लिए पूर्व निर्धारित किया जाएगा। किसी ने इसे देने के लिए इसके चारों ओर एक आवरण भी लिखा git export


2
मुझे लगता है कि आप इसे और अधिक कठिन बना रहे हैं जितना कि यह होना चाहिए। GIT_WORK_TREE=/destinationpath git checkout -fजब आपकी वर्तमान निर्देशिका नंगे रिपॉजिटरी, या .it सबडायरेक्ट्री के शीर्ष पर हो तो चलाएं । आप एक चेकआउट / गंतव्य स्थान पर
जाएंगे

ठीक है, मैं किसी भी तरह से उस विकल्प को याद कर रहा होगा, +1 आप को।
slhck

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