2011-09-27 6 views
7

मैंने चारों ओर खोज की है और इस प्रश्न का कोई जवाब नहीं मिला है।गिट - पहले लाने के बिना स्थानीय और रिमोट की तुलना करें?

मेरे पास हेरोोक पर चल रहा एक ऐप है। अपने स्थानीय मशीन से मैं आम तौर पर लागू करने और सिर्फ:

git add . 
git commit -m "whatever change, I know I can add and commit at the same time..." 
git push <the-heroku-repo> 

तो यह तक जाता है और Heroku अनुप्रयोग में मास्टर शाखा अद्यतन किया जाता है। अब तक सब ठीक है।

अब। मैं एक और मशीन बनाना चाहता हूं जो स्वचालित रूप से हेरोकू रेपो से खींच लेगी और खुद को अपडेट करेगी।

तो मुझे क्या उस के साथ:

git clone <the-heroku-repo> 

मुझे एप्लिकेशन हो जाता है यही कारण है कि और मैं इस के साथ Git config देख सकते हैं:

core.repositoryformatversion=0 
core.filemode=true 
core.bare=false 
core.logallrefupdates=true 
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
[email protected]:theapp.git 
branch.master.remote=origin 
branch.master.merge=refs/heads/master 

इस नए रेपो मैं सिर्फ एक पुल कर सकते हैं अद्यतन करने के लिए :

git pull origin 

या मैं लाने और मर्ज कर सकते हैं:

+०१२३५१६४१०
git fetch origin 
git merge origin/master 

मेरे सवाल

ऊपर के बीच

लाने और विलय करके मैं जांच कर सकते हैं कि कौन से परिवर्तन कर रहे हैं:

git log -p master..origin/master 

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

धन्यवाद।

+0

बिना लाए, आपको रिमोट रेपो –

+0

से कुछ भी अपडेट नहीं पता होगा, मुझे 'गिट लॉग' से पहले 'गिट फ़ेच मूल' करने में समस्या क्या है? –

+0

हो सकता है कि समस्या मुझे है, fetch कमांड की परिभाषा के आधार पर: "गिट fetch रिमोट रिपोजिटरी से नई शाखाओं और डेटा डाउनलोड करें"। कल्पना करें कि तुलना के कुछ आउटपुट के आधार पर मैं फैसला करता हूं कि मैं उन परिवर्तनों को लाने और विलय नहीं करना चाहता हूं। मैं बैंडविड्थ का उपयोग क्यों करूंगा और रिपोजिटरी को उस चीज़ के साथ दूषित करूंगा जो आवश्यक नहीं है। फिर, शायद समस्या मुझे है। मौजूदा परिवर्तनों को हाथ से पहले जानकर संभवतः कॉल या संसाधनों को सहेजने की कोशिश कर रहा है। – Pod

उत्तर

14

आप उपयोग कर origin भंडार में शाखाओं के बारे में कुछ संक्षिप्त जानकारी प्राप्त कर सकते हैं हालांकि:

git remote show origin 

... आप किसी भी तरह के क्रम उनकी तुलना करने में अपने भंडार में origin से शाखाओं लाने की जरूरत है। यह git fetch करता है। जब आप git fetch origin चलाते हैं, तो यह डिफ़ॉल्ट रूप से तथाकथित "दूरस्थ-ट्रैकिंग शाखाओं" जैसे origin/master को अपडेट करेगा। ये सिर्फ स्टोर करते हैं जहां पिछली बार आपके द्वारा लाई गई संबंधित शाखा origin में थी। आप जिन सभी स्थानीय शाखाओं पर काम कर रहे हैं वे git fetch से अप्रभावित हैं। तो, यह करने के लिए सुरक्षित है:

git fetch origin 
git log -p master..origin/master 

... और फिर अगर आपको लगता है कि के साथ खुश हैं, तो आप से मिलने या origin/master पर rebase कर सकते हैं।


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

+0

उन त्वरित टिप्पणियों और उत्तर के लिए धन्यवाद। तो यह मैं था :-) – Pod

+2

मैं पुल का उपयोग कर रहा था जो मुझे अच्छी तरह से सेवा दे रहा था, लेकिन फिर मैंने इसे लाने के लिए एक अरब बार पढ़ा/इसे विलय करना पसंद किया ताकि मैंने इसका उपयोग करना शुरू कर दिया। यह ठीक काम करता है, लेकिन मुझे यह समझने में थोड़ी देर लग गई कि जीआईटी लाने से सभी रिमोट शाखाएं "अस्थायी जगह" में आती हैं और आप इसका नाम "रिमोट-ट्रैकिंग शाखा" कहने वाले पहले व्यक्ति हैं। मैं वास्तव में समझ नहीं पा रहा हूं कि प्राप्त डेटा कहां जा रहा था क्योंकि यह तब तक नहीं है जब तक कि यह आपके भंडार के अंदर न हो। धन्यवाद – luigi7up

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