2010-07-26 8 views
184

परिदृश्य:गिट: दूरस्थ मूल मास्टर से एक फ़ाइल को अद्यतन/चेकआउट कैसे करें?

  1. मैं स्थानीय स्तर पर एक एकल फाइल में कुछ बदलाव करने और चलाने के git add, git commit और git push
  2. फ़ाइल दूरस्थ मूल मास्टर भंडार
  3. मैं एक स्थानीय भंडार है कि है करने के लिए भेजा जाता है कैपिस्ट्रानो के माध्यम से उस रिमोट रिपोजिटरी
  4. से "remote_cache" विधि के साथ तैनात किया गया है, अब मैं पूरे एप्लिकेशन को तैनात नहीं करना चाहता हूं, लेकिन केवल एक ही फ़ाइल को अपडेट/चेकआउट करना चाहता हूं।

कृपया, क्या यह गिट के साथ किसी भी तरह संभव है? मैं कुछ भी नहीं ढूंढ पाया जो काम करेगा और न ही मैं इसे समझने में सक्षम था। एसवीएन के साथ मैंने अभी svn up file और वॉयला किया था।

मुझे किसी भी मदद के लिए खुशी होगी, धन्यवाद!

+13

आप वास्तव में अपने प्रश्न का उत्तर देने वाले स्वीकृत उत्तर को बदलने पर विचार करना चाहेंगे। ;) – steps

+4

6 से अधिक वर्षों के बाद, मुझे विश्वास है कि हम सुरक्षित रूप से यह मान सकते हैं कि यह @steps नहीं होगा ... –

+3

यह सबसे कम स्कोर के साथ स्वीकार्य उत्तर होना चाहिए। –

उत्तर

-63

गिट व्यक्तिगत फ़ाइलों पर काम नहीं करता है। मुझे remote_cache सेटिंग से अवगत नहीं है इसलिए मैं उस पर टिप्पणी नहीं कर सकता। हालांकि, गिट में, आपको clone संपूर्ण भंडार होना है, फ़ाइल में बदलाव करना है, इसे प्रतिबद्ध करें (यह एक स्थानीय ऑपरेशन है) और उसके बाद परिवर्तनों को वापस दबाएं।

अपने सेटअप में, आप मास्टर रिपोजिटरी (इसे एम कहते हैं) में परिवर्तनों को आसानी से pull करने में सक्षम होना चाहिए (इसे कॉल करें) को कॉल करें। मुझे नहीं लगता कि आपको समस्या क्यों है। यदि बी काफी अलग है और आप इसे गड़बड़ नहीं करना चाहते हैं, तो आप एम को remote बी में जोड़ सकते हैं और फिर cherry-pick उस विशिष्ट कार्य में शामिल हो सकते हैं जिसमें आप रुचि रखते हैं (यानी उस फ़ाइल का अपडेट जिसे आप बात कर रहे हैं) में बी। क्या यह आपके लिए काम करेगा?

+1

धन्यवाद! खैर, मुझे पूरी तरह से एक विशेष प्रतिबद्धता में दिलचस्पी नहीं है, मैं सिर्फ एक ही फ़ाइल को अपने मुख्य संशोधन में अपडेट करना चाहता हूं (भले ही संपूर्ण प्रतिबद्धता केवल इस एकल फ़ाइल से अधिक हो) दूरस्थ शाखा से मास्टर शाखा में । मुझे लगता है कि मैं सिर्फ svn से विचारों के साथ गिट गलत व्याख्या कर रहा हूँ। मुझे इसके साथ थोड़ा और प्रयोग करना होगा। – foresth

+0

गिट व्यक्तिगत फ़ाइल इतिहास की बजाय फाइल सिस्टम (भंडार) के स्नैपशॉट्स को बनाए रखता है ताकि आपका नेविगेशन केवल इन स्नैपशॉट्स के बीच हो। सी एफ http://progit.org/book/ch1-3.html –

+5

मैंने पाया कि @ qzio का उत्तर मेरे जैसी ही स्थिति के लिए बहुत उपयोगी था; उसके पास शून्य वोट थे, हालांकि, वह क्यों है? -क्या यह एक बुरा अभ्यास या कुछ है? – lfborjas

6

आप क्या कर सकते है:

  1. अद्यतन अपने स्थानीय Git रेपो:

    git fetch

  2. उस पर एक स्थानीय शाखा और चेकआउट बिल्ड:

    git branch pouet && git checkout pouet

  3. प्रतिबद्ध लागू आप इस शाखा पर हैं:

    git cherry-pick abcdefabcdef

    (abcdefabcdef की SHA1 है प्रतिबद्ध आप लागू करना चाहते)

+4

एक तरफ के रूप में, आपका दूसरा कदम एक कमांड में 'गिट चेकआउट -बी पॉउट' के रूप में भी किया जा सकता है। इस उदाहरण के लिए –

+2

'पॉलेट' सबसे अच्छा शाखा नाम है। – Hussard

589

यह करना संभव है (तैनात भंडार में)

git fetch 
git checkout origin/master -- path/to/file 

fetch सभी हालिया परिवर्तन डाउनलोड करेगा, लेकिन यह इसे आपके वर्तमान चेक आउट कोड (कार्यक्षेत्र) में नहीं रखेगा।

चेकआउट डाउनलोड किए गए पेड़ को डाउनलोड किए गए परिवर्तन (origin/master) से विशेष फ़ाइल के साथ अपडेट करेगा।

कम से कम यह उन छोटे छोटे टाइपो फिक्सेस के लिए मेरे लिए काम करता है, जहां फ़ाइल में एक शब्द बदलने के लिए शाखा बनाने के लिए अजीब लगता है।

+4

और फिर प्राप्त कोड के साथ क्या होगा? –

+0

सुपर आसान, यह बहुत अच्छा काम किया। मुझे कंपोज़र.जेसन फ़ाइल प्राप्त करने और उत्पादन में शेष साइट को अपडेट करने से पहले एक अपडेट चलाने की आवश्यकता थी। यदि मैंने मैन्युअल रूप से composer.json/लॉक फ़ाइलों को जगह में रखा था, जब मैंने एक पुल किया था, तो यह कहता है कि फाइलें पहले से मौजूद हैं। इस तरह से, गिट ने शिकायत के बिना फाइलों को पहचाना। – David

+4

यह वह उत्तर है जिसे मैं ढूंढ रहा था। इस आदेश में – javadba

1

या उस शाखा पर गिट स्टैश (यदि आपके पास परिवर्तन है), चेकआउट मास्टर, नवीनतम परिवर्तनों को खींचें, उस फ़ाइल को अपने डेस्कटॉप (या पूरे ऐप) पर ले जाएं। उस शाखा को चेकआउट करें जिस पर आप थे। गिट स्टैश उस स्थिति पर लागू होता है जिस पर आप थे, फिर मैन्युअल रूप से परिवर्तनों को ठीक करें या फ़ाइल को प्रतिस्थापित करने के लिए खींचें।

इस तरह से बहुत अच्छा नहीं है लेकिन यह काम करता है अगर आप कुछ और नहीं समझ सकते हैं।

13
git archive --format=zip --remote=ssh://<user>@<host>/repos/<repo name> <tag or HEAD> <filename> > <output file name>.zip 
+0

यह स्वीकार्य उत्तर होना चाहिए! –

+0

एसएसएच पर क्लोन किए गए रेपो के लिए यह एक अच्छा समाधान है, लेकिन ऐसा लगता है कि यह https: 'गिट आर्काइव --remote = https: //github.com/git/git.git मास्टर: गिट/contrib/पूरा करने पर समर्थित नहीं है गिट-समापन.बैश | tar -x' मुझे त्रुटि संदेश देता है: 'घातक: ऑपरेशन प्रोटोकॉल द्वारा समर्थित नहीं है। – Alderath

-1

मुझे लगता है कि मुझे एक आसान हैक आउट मिला है।

फ़ाइल आप स्थानीय भंडार पर है कि हटाना (फ़ाइल है कि आप नवीनतम से अद्यतन करना चाहते हैं दूरस्थ सर्वर में प्रतिबद्ध)

और फिर एक git pull

करना क्योंकि फ़ाइल हटा दी जाती है, वहाँ कोई संघर्ष नहीं होगा

+0

यह स्थानीय रूप से उस फ़ाइल में किए गए सभी अंतिम परिवर्तनों को हटा देता है, और अन्य सभी फ़ाइलों को भी खींचता है, जो विशेष रूप से ओपी नहीं करता है करना चाहता हूँ। – legrojan