2012-05-02 13 views
89

मैं एक गिट प्रोजेक्ट को सुरक्षित रूप से अपडेट (खींच) कैसे कर सकता हूं, विशिष्ट फ़ाइलों को बिना छेड़छाड़ कर रहा हूं, भले ही अपस्ट्रीम परिवर्तन हो?गिट पुल स्थानीय परिवर्तनों को रखने

myrepo/config/config.php

वहाँ इस फाइल रिमोट पर बदला जा रहा था, भले ही जब मैं पुल git, बाकी सब अद्यतन किया जाता है भी नहीं करने का एक तरीका है,,,, लेकिन इस फाइल में कोई बदलाव नहीं है (विलय होना)?

पीएस। मुझे वह करने की ज़रूरत है जो मैं पूछ रहा हूं क्योंकि मैं केवल गिट-आधारित तैनाती स्क्रिप्ट लिख रहा हूं। मैं टेम्पलेट्स में कॉन्फ़िगरेशन फ़ाइलों को नहीं बदल सकता।

इसलिए, मुझे अद्यतन स्क्रिप्ट लिखने का तरीका चाहिए जो स्थानीय रूप से परिवर्तित नहीं हुआ है।

git assume-remote-unchanged file1 
git assume-remote-unchanged file2 
तो

git pull

+0

साथ Git पुल कोशिश कर सकते हैं 'config.php' में परिवर्तन के लिए प्रतिबद्ध हैं: तो यह करते हैं? –

+1

संभावित डुप्लिकेट [क्या गिट विलय करते समय विशिष्ट प्रतिबद्धताओं को बाहर करना संभव है?] (Http://stackoverflow.com/questions/332528/is-it-possible-to-exclude- विशिष्ट-commits-when-doing- ए-गिट-मर्ज) – Daenyth

+0

यह प्रतिबद्ध नहीं है। मुझे –

उत्तर

164

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

git stash 
git pull 
git stash pop 

स्टैश पॉप पर संघर्ष हो सकते हैं। यदि आप वर्णन करते हैं तो वास्तव में config.php के लिए एक संघर्ष होगा। लेकिन, संघर्ष को हल करना आसान है क्योंकि आप जानते हैं कि जो भी आप चाहते हैं वह वह है जो आप चाहते हैं।

git checkout --theirs -- config.php 
+3

कि गिट चेकआउट --theirs कमांड बहुत भ्रमित है। यह वही था जो मैं एक बार चाहता था और कुछ और वास्तव में बुरा था। इस पर कोई अच्छा दस्तावेज मिला? – Milimetric

+2

हां, कभी-कभी 'उनका' और 'हमारा' भ्रमित हो सकता है। एक 'गिट मर्ज' में 'हमारा' वर्तमान में कार्यशील निर्देशिका में है। लेकिन 'गिट रीबेस' (या 'गिट रिबेस-टोंटो') के लिए अर्थ बदल सकता है। – GoZoner

+0

@GoZoner मुझे लगता है कि यह भी लाने के लिए काम करता है। यह सिर्फ इतना है कि 'गिट स्टैश' के बाद किसी को अलग-अलग शाखा की जांच करनी पड़ती है और फिर 'गिट फ़ेच मूल : '। फिर पिछली शाखा चेकआउट करें और फिर 'गिट स्टैश पॉप' देखें। मैंने कोशिश की और यह काम किया लेकिन मेरे पास कोई विलय संघर्ष नहीं था। – AnkurTank

13

आपको लगता है कि यह सबसे अधिक चालक द्वारा अनुकूलित किया जा माना जाता है अपने रेपो में एक फ़ाइल है, तो फ़ाइल कुछ करने के लिए config.php.template और जैसे नाम बदलने: मैं के रूप में सरल कुछ के रूप में के लिए उम्मीद की गई थी अपने .gitignore पर config.php जोड़ें।

+4

चेक [यह उत्तर] (http://stackoverflow.com/a/3970442/236871) भी, आप विलय करते समय हमेशा अपने परिवर्तनों को रखने के लिए '.gitattributes' का उपयोग कर सकते हैं। – KurzedMetal

+0

यह वही है जो मुझे चाहिए था। टेम्पलेट चीज सुरुचिपूर्ण समाधान है लेकिन मुझे डर है कि मैं इसका उपयोग नहीं कर सकता क्योंकि मैं सिर्फ लिपियों को तैनात कर रहा हूं। –

4

अपडेट: यह सचमुच पूछे जाने वाले प्रश्न का उत्तर देता है, लेकिन मुझे लगता है कि KurzedMetal's answer वास्तव में आप चाहते हैं।

कि मान लिया जाये:

  1. आप शाखा master
  2. पर हैं नदी के ऊपर शाखा है masterorigin
  3. में आपके पास कोई अप्रतिबद्ध परिवर्तन

है .... आप कर सकता था:

# Do a pull as usual, but don't commit the result: 
git pull --no-commit 

# Overwrite config/config.php with the version that was there before the merge 
# and also stage that version: 
git checkout HEAD config/config.php 

# Create the commit: 
git commit -F .git/MERGE_MSG 

यदि आप इसे अक्सर करने की ज़रूरत है तो आप इसके लिए उपनाम बना सकते हैं। ध्यान दें कि यदि आपके पास config/config.php में असामान्य परिवर्तन हैं, तो यह उन्हें फेंक देगा।

3

हम भी रिबेस

git pull --rebase origin dev 
संबंधित मुद्दे