दिलचस्प पोस्ट
JQuery के लिए अनुशंसित JavaScript HTML टेम्पलेट लाइब्रेरी? बाश में सिंगल और डबल स्क्वायर ब्रैकेट्स में क्या फर्क है? jQuery सेट चुनें सूचकांक कुछ सीपीयू पर तंग छोरों में एडीसी / एसबीबी और आईएनसी / डीईसी के साथ समस्याएं X तत्वों के कुछ हिस्सों में एक रूबी सरणी कैसे विभाजित करें? फ़ॉर्मेट नंबर जैसे स्टैक ओवरफ़्लो (हजारों लोगों के लिए किफ़ास्ट के साथ गोल) Excel 2010 x64 के साथ काम करने के लिए ScriptControl हो रही है Excel VBA में एक पंक्ति हटाएं बाइट अर्रे को छवि रूपांतरण एलेप्से में आवेदन ढेर के आकार को कैसे बढ़ाएं? एएनएसआई बनाम गैर- ANSI एसक्यूएल शामिल वाक्यविन्यास कैसे snackBar के लेआउट को अनुकूलित करने के लिए? जावास्क्रिप्ट एक नई विंडो में खुला है, नहीं टैब नियंत्रक में पोस्ट विधि को देखने और वापस करने के लिए ऑब्जेक्ट की सूची कैसे भेजनी है I पायथन वैरिएबल घोषणा

गैर-बेअर जीआईटी रिपॉजिटरी में धक्का

मैं आमतौर पर एक दूरस्थ सर्वर पर ssh (स्क्रीन और वीम) के माध्यम से काम करता हूं, जहां मेरे पास एक गीतम भंडार है I कभी-कभी मैं ऑनलाइन नहीं हूं, इसलिए मेरे लैपटॉप पर मेरे पास अलग भंडार है (मेरे रिमोट से क्लोन किया गया)

हालांकि, मैं इस रिपाईटरी से दूरस्थ पक्ष पर नहीं खींच सकता क्योंकि मैं आमतौर पर फ़ायरवॉल के पीछे हूं या मेरे पास सार्वजनिक आईपी नहीं है

मैंने पढ़ा है कि मुझे सिर्फ एक नंगे रेजिसिटरी में धक्का देना चाहिए मुझे अपने रिमोट रिपॉजिटरी में अपने बदलावों को कैसे धक्का देना चाहिए?

वेब के समाधान से एकत्रित समाधान "गैर-बेअर जीआईटी रिपॉजिटरी में धक्का"

प्राप्त.डेनीटवर्ंट ब्रांच अपडेटइसके अलावा , गीट 2.3 में जोड़ा गया , यह सर्वर के काम के पेड़ को भी अपडेट करता है यदि यह साफ है।

इसलिए यदि आप यह सुनिश्चित करते हैं कि आप स्थानीय स्तर पर खींचने से पहले हमेशा प्रतिबद्ध रहते हैं, और सर्वर पर एक साफ काम के पेड़ को रखने के लिए (जो आपको मर्ज टकराव से बचने के लिए करना चाहिए), तो यह विकल्प एक अच्छा समाधान है।

नमूना उपयोग:

 git init server cd server touch a git add . git commit -m 0 git config --local receive.denyCurrentBranch updateInstead cd .. git clone server local cd local touch b git add . git commit -m 1 git push origin master:master cd ../server ls 

आउटपुट:

 a b 

सर्वोत्तम विकल्प

संभवत: आपके गैर-बेजोड़ रिमोट रिपॉजिटरी में धकेलने के लिए सबसे साफ, कम से कम भ्रामक और सुरक्षित तरीके, दूरदराज के समर्पित शाखाओं को धक्का देना है जो आपके लैपटॉप शाखाओं का प्रतिनिधित्व करते हैं।

आइए सबसे आसान मामला देखें और मान लें कि आपके पास प्रत्येक रेपो में सिर्फ एक शाखा है: मास्टर जब आप अपने लैपटॉप से ​​दूरदराज के रेपो में धक्का जाते हैं – मास्टर -> मास्टर, मास्टर पुश -> लैपटॉप-मास्टर (या समान नाम) को आगे बढ़ाने के बजाय इस तरह धक्का दूरस्थ रीपो में वर्तमान में चेक-आउट मास्टर शाखा को प्रभावित नहीं करता है। लैपटॉप से ​​ऐसा करने के लिए, कमांड बहुत आसान है:

 git push origin master:laptop-master 

इसका मतलब है कि स्थानीय मास्टर शाखा को दूरस्थ रिपॉजिटरी में "laptop-master" नामक शाखा में धकेल दिया जाएगा। आपके दूरस्थ रेपो में, आपके पास "लैपटॉप-मास्टर" नाम की एक नई शाखा होगी, जब आप तैयार होंगी तब आप अपने दूरस्थ मास्टर में विलय कर सकते हैं।

वैकल्पिक विकल्प

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

यदि आप केवल मास्टर -> मास्टर को पुश करने की कोशिश करना चाहते हैं, तो कमांड ही है:

 git push origin 

लेकिन जब आप दूरस्थ रीपो पर वापस जाते हैं, तो आप सबसे अधिक संभावना git reset --hard HEAD करना चाहते हैं – git reset --hard HEAD ट्री को उस सामग्री के साथ समन्वयित करने के लिए जो कि धक्का दिया गया था। यह खतरनाक हो सकता है , क्योंकि अगर रिमोट वर्क ट्री में कोई असमाविष्ट परिवर्तन हैं जो आप इसे रखना चाहते हैं तो उन्हें मिटा देगा। सुनिश्चित करें कि आप जानते हैं कि इससे पहले कि आप इसका प्रयास करेंगे, या कम से कम पहले बैकअप लेंगे!

Git 2.3 के बाद से संपादित करें , आप "पुश-टू-तैनात" गिट धक्का का उपयोग कर सकते हैं: https://github.com/blog/1957-git-2-3-has-been-released लेकिन एक अलग शाखा को आगे बढ़ाने और फिर विलय करने से आम तौर पर बेहतर होता है क्योंकि यह वास्तविक मर्ज करता है (इसलिए केवल मर्ज की तरह अव्यवस्थित परिवर्तनों के साथ काम करता है)।

मैं अपने सर्वर में एक नंगे-रिपॉजिटरी और एक स्थानीय कामकाज (गैर-बेअर) रेपो का सुझाव दूंगा। आप लैपटॉप से ​​सर्वर बेतरर रेपो में परिवर्तन कर सकते हैं और फिर उस रेवेन से लेकर सर्वर का काम कर रहे रेपो तक खींच सकते हैं। इसके कारण मैं यह कह रहा हूं क्योंकि आपके पास कई पूर्ण / अपूर्ण शाखाएं हैं जो आप लैपटॉप पर दोहराना चाहते हैं।

इस तरह आपको शाखा की स्थिति के बारे में चिंता करने की ज़रूरत नहीं है, सर्वर पर परिवर्तनों को धक्का करते हुए सर्वर पर काम कर रहे रेपो की जांच की गई।

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

 # start the tunnel from the natted box you wish to pull from (local) $ ssh -R 1234:localhost:22 user@remote # on the other box (remote) $ git remote add other-side ssh://user@localhost:1234/the/repo $ git pull other-side 

और अगर आप चाहते हैं कि सुरंग को पृष्ठभूमि में चलाना है

 $ ssh -fNnR 1234:localhost:22 user@remote