2009-11-05 14 views
8

में बदली गई फ़ाइलों को निर्यात/संग्रहित करना क्या किसी दिए गए प्रतिबद्धता या गिट में काम करने की श्रृंखला से केवल बदली गई फ़ाइलों को निर्यात/संग्रहित करने का कोई आसान तरीका है? ऐसा करने के लिए मुझे स्पष्ट निर्देश नहीं मिल रहे हैं (और मैं लिनक्स/गिट के लिए नया हूं)।केवल गिट

मैं msysgit का उपयोग कर रहा हूं, और अधिकांश भाग के लिए मैं पूरे भंडारों को तैनात करने के साथ ठीक हूं लेकिन कई मामलों में एक समय में कुछ फ़ाइलों को छोटे फिक्स को तैनात करने के लिए और अधिक कुशल है।

दूरस्थ सर्वर पर गिट को पुशिंग/खींच/स्थापित करना वास्तव में एक विकल्प नहीं है क्योंकि मेरे स्तर का उपयोग परियोजनाओं और ग्राहकों के बीच भिन्न होता है।

वहाँ करने के लिए (किसी न किसी अनुमान) एक सीधी-सपाट तरीका है:

pipe 'diff --names-only' to 'git-archive'? 

उत्तर

25

मैं Git-संग्रह को शामिल करने के लिए किसी भी आवश्यकता नहीं है नहीं लगता। --name-only उपयोग करके, आप फ़ाइलों को टार सकता है:

tar czf new-files.tar.gz `git diff --name-only [diff options]` 

जब से तुम लिनक्स के लिए नए हैं, यह कुछ स्पष्टीकरण की आवश्यकता हो सकती:

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

+4

सिर्फ पोस्टरिटी के लिए, यह अलग तकनीक कुछ ऐसी होगी: 'git diff --name-only [diff विकल्प] | xargs टार -czf files.tar.gz' – jason

+2

के साथ 'xargs', आप एक अलग समस्या है क्योंकि' xargs' चलेंगे 'एक बार तो उनके सभी एक ही कमांड लाइन पर डाल करने के लिए बहुत सारी फ़ाइलें हैं की तुलना में अधिक tar' है। यह 'tar' को पिछले एक को ओवरराइट करने वाली नई .tar फ़ाइल बनाने का कारण बनता है, इसलिए इसमें केवल अंतिम बैच के लिए फ़ाइलें होंगी। –

+0

वाक्यविन्यास समझाए जाने के लिए धन्यवाद! बैकटीक्स की ज़रूरत है जो मुझे चाहिए :) यह पूरी तरह से बैश कमांडलाइन में काम करता है जो msysgit के साथ आता है सिवाय इसके कि फ़ाइल नामों में रिक्त स्थान हैं (विंडोज़ ...)। क्या उन्हें स्वचालित रूप से बचने का कोई तरीका है? – AKS

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