2010-01-29 14 views
5

मैंने अभी गिट का उपयोग करना शुरू कर दिया है, और एसवीएन से वर्कफ़्लो मतभेदों से प्रभावित हूं, लेकिन मैंने एक संरचनात्मक/सेटअप प्रश्न में भाग लिया है कि दस्तावेज़ीकरण सहजता से समझने की प्रतीत नहीं होता है कि मैं कैसे स्थापित करना है, और मैं हूं सोच रहा है कि यह भी संभव है।दो मशीनों से विकास के लिए गिट रिपोजिटरी सेटअप?

मेरा सेटअप यह है कि मेरे पास कई कंप्यूटर हैं जो मैं (डेस्कटॉप और लैपटॉप) से विकास करता हूं, इसलिए, आसानी से सिंक में रहना और गिट रिपोजिटरी के लिए बैकअप प्रदान करना, मैंने अपने घर पर "सार्वजनिक" नंगे भंडार स्थापित किया लिनक्स सर्वर जो मैं डेस्कटॉप और लैपटॉप दोनों से एसएसएच कर सकता हूं। यह वास्तव में सार्वजनिक नहीं है, क्योंकि इसे प्राप्त करने के लिए बॉक्स में एसएसएच पहुंच की आवश्यकता होती है।

मेरे समस्या आता है जब मैं अपने डेस्कटॉप पर बदलाव करते हैं, मैं आसानी से सर्वर भंडार (मुझे लगता है कि भंडार पर origin के लिए mirror ध्वज सेट दूरस्थ है) में परिवर्तन धक्का कर सकते हैं और gitx का उपयोग कर रहा देख सकते हैं कि स्थानीय और रिमोट स्टेटस समान दिखते हैं, और मेरे प्रत्येक व्यक्तिगत काम सर्वर पर लॉग इन कर दिया गया है।

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

क्या कोई कमांड/वर्कफ़्लो है जो मुझे स्थानीय भंडार को दूरस्थ भंडार की सटीक स्थिति में अपडेट करने देगा (जैसे कि यदि मैं git push --mirror कोई डेटा खो जाऊंगा)? क्या मुझे प्रत्येक बार अपना स्थानीय भंडार हटाना होगा और हर बार git clone इसे फिर से हटाना होगा?

वर्तमान में किसी और को इस भंडार तक पहुंच की आवश्यकता नहीं होगी, हालांकि भविष्य में यह लोगों के लिए सार्वजनिक भंडार बन सकता है, इसलिए उत्तर जो उस संभावना को नष्ट नहीं करते हैं, की सराहना की जाएगी।

संपादित करें: मेरी प्रतिबद्धताओं में मास्टर शाखा से छूट शाखाएं शामिल हैं; क्या यह विलय के रूप में दिखाने के लिए git pull कमांड को ट्रिगर कर रहा है? क्या --rebase फ्लैग है जो मुझे चाहिए?

समाधान स्पष्टीकरण: यह पता चला मैं अपने खजाने स्थापित करने के लिए निम्नलिखित किया था: एक Git भंडार सर्वर से

  • पुश लैपटॉप भंडार प्रारंभ करने में

    • उपयोग लैपटॉप (एक प्रतिबद्ध)
    • एक परिवर्तन किया गया और लैपटॉप पर प्रतिबद्ध (लैपटॉप पर बी प्रतिबद्ध)
    • डेस्कटॉप क्लोन सर्वर भंडार (प्रतिबद्ध एक)
    • डेस्कटॉप पर परिवर्तन करें और प्रतिबद्ध (करता सी, डी, , रिबेसिंग शाखाएं शामिल हैं)
    • डेस्कटॉप सर्वर से धक्का (सर्वर तेजी ) को आगे
    • जब लैपटॉप सर्वर से खींचती है, किसी मर्ज में परिणाम (बी के बाद से नहीं कर सकते हैं तेजी से आगे के लिए)।
    • लैपटॉप विलय करता है, और सर्वर
    • डेस्कटॉप में परिवर्तन को धक्का देता है, अब डेस्कटॉप को भी विलय करना पड़ता है।

    उस अतिरिक्त प्रतिबद्धता के कारण जो एक अनजाने नई गलती थी, इसने मुझे यह सोचने का नेतृत्व किया कि यह हमेशा एक विलय होगा। Xentac के सुझाव पर, मैं वापस गया और लैपटॉप पर पाया कि मैंने एक विलय किया था जिसे सर्वर पर धक्का नहीं दिया गया था, जो अपराधी था, और एक बार जब मैं तीनों को वास्तव में सिंक में मिला, git pull --ff (केवल फास्ट फॉरवर्ड विलय को मजबूर करना) बस ठीक काम करता है, और विलय करने से पहले कुछ सिंक से बाहर होने पर मुझे चेतावनी देता है।

  • उत्तर

    4

    क्योंकि आपने अपने लैपटॉप की मास्टर शाखा में काम किया है जो आपके सर्वर की मास्टर शाखा में नहीं है, हर बार जब सर्वर बदलता है, तो लैपटॉप मास्टर शाखा सूचक को अपडेट नहीं कर सकता है। यही कारण है कि आप मर्ज काम कर रहे हैं।

    यदि आप अपने सर्वर पर संग्रहीत परिवर्तन नहीं करना चाहते हैं, लेकिन बस अपने लैपटॉप पर संग्रहीत करना चाहते हैं, तो आप git fetch और फिर git rebase origin/master पर जाना चाहेंगे। प्राप्तकर्ता सर्वर से काम करता है लेकिन आपकी स्थानीय शाखाओं को नहीं बदलता है और रीबेस सर्वर की मास्टर शाखा (मूल/मास्टर) के शीर्ष पर आपके लैपटॉप की मास्टर शाखा परिवर्तनों को फिर से बनाएगा।

    यह शायद बेहतर होगा कि वे आसपास के आसपास लटकने के लिए बेहतर न हों। क्या उन्हें एक सामान्य इतिहास के लिए पूरे कोडबेस में एकीकृत नहीं किया जा सकता है?

    1

    मैं --ff ध्वज का उपयोग करने का सुझाव देने जा रहा था, लेकिन यह मैन पेज कहता है कि यह डिफ़ॉल्ट व्यवहार है। आप git pull --ff आज़मा सकते हैं और देख सकते हैं कि इससे कोई फर्क पड़ता है।

    यदि आपको विलय प्रतिबद्धता मिल रही है, तो यह सुझाव देगा कि आप अपने लैपटॉप पर काम कर चुके हैं जो सर्वर पर नहीं है।

    क्या आपका लैपटॉप सर्वर के दर्पण के रूप में स्थापित है, जैसे आपका डेस्कटॉप है?

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