किसी अन्य कंप्यूटर पर एक निर्यात करें


296

मुझे दूसरे कंप्यूटर पर एक स्टैक्ड परिवर्तन को निर्यात करने का एक तरीका चाहिए।

Computer1 पर मैंने किया

$ git stash save feature

मैं एक फ़ाइल को छिपाने की जगह पाने की कोशिश कर रहा हूं और फिर इसे दूसरे कंप्यूटर पर आयात कर रहा हूं

$ git stash show -p > patch

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

धन्यवाद


6
fyi git stash saveअब के पक्ष में पदावनत हैgit stash push
Ewan

जवाबों:


290

आप बस चलाकर एक पैच फ़ाइल (परिवर्तनों को अभी तक किए बिना) लागू कर सकते हैं

git apply patchfile

तब आप वर्तमान में काम कर रहे डायरेक्टरी से नया स्टैश बना सकते हैं:

git stash

2
@ मार्सेलो ए: सुनने में अच्छा है, लेकिन कृपया उत्तर के वोट संख्या के नीचे दिए गए बड़े चेकमार्क पर क्लिक करके आपके द्वारा स्वीकार किए गए उत्तरों को चिह्नित करें। इस तरह आपके प्रश्न को हल के रूप में चिह्नित किया जाएगा।
प्रहार

2
ध्यान दें कि सिस्टम कुछ समय (15 मिनट, जब तक मुझे लगता है) के रूप में ओपी को "स्वीकृत" के रूप में एक उत्तर देने की अनुमति नहीं देगा, सवाल पूछे जाने के समय से समाप्त हो गया है।
ग्रेग हेविगेल

23
इस उत्तर को पढ़ने के बाद एक बात जो मैं सोच रहा था वह यह था कि मैं अपने सभी स्टैम्स में से एक विशेष स्लैश का चयन कैसे करूं। इसका जवाब यहां है: stackoverflow.com/a/1910142/1148702 । इस मामले में मैंने git stash show "stash@{0}" -p > patchओपी की दूसरी शेल कमांड के बजाय : कर समाप्त कर दिया।
टिम कैम्बर

1
@TimCamber मुझे नहीं लगता कि आपको दोहरे उद्धरण चिह्नों की आवश्यकता है stash@{0}..
अरी सोना

2
@arigold आपके द्वारा उपयोग किए जा रहे शेल पर निर्भर करता है। PowerShell में उदाहरण के लिए, आपको उनकी आवश्यकता है क्योंकि घुंघराले ब्रेसिज़ एक विशेष वाक्यविन्यास हैं।
प्रहार

18

वैकल्पिक रूप से आप अपने कंप्यूटर (कंप्यूटर पर 1) से एक शाखा बना सकते हैं, का उपयोग कर

git stash branch stashed_changes_branch

अपने परिवर्तन करें:

git commit -a

फिर इसे कंप्यूटर पर रिमोट के रूप में जोड़ें 2:

git remote add pc1 user@computer1:/path/to/repo

अब आप दूरस्थ सूचना का उपयोग करके पुनः प्राप्त कर सकते हैं

git fetch pc1

अब आप अपनी इच्छानुसार कमिट आयात कर सकते हैं; git चेरी-पिक , git rebase या जो कुछ भी आपको पसंद है ... का उपयोग करके ... यदि आप चाहते हैं कि यह ठीक वैसे ही दिखे जैसे आपने git stash लागू किया था ; आप git चेरी-पिक -नो-कमिट का उपयोग कर सकते हैं


यदि आपके पास computer1 और computer2 के बीच कोई सीधा संबंध नहीं है; आप रिमोट का उपयोग कर सकते हैं (जैसे जीथब या कुछ समान):

git push origin stashed_changes_branch

और कंप्यूटर 2 पर:

git fetch

1
यह मानता है कि स्रोत सिस्टम (कंप्यूटर 1) बाहरी कनेक्शन प्राप्त करने के लिए खुला है, जो कि यहां उतरने वाले अधिकांश लोगों के लिए सच होने की संभावना नहीं है। यदि आप शाखा मार्ग पर जाना चाहते हैं, तो बस एक अस्थायी शाखा को दूरस्थ मूल पर क्यों न धकेलें और कंप्यूटर 2 से खींचें? जैसे ही आप इसे इधर-उधर नहीं रखना चाहते हैं, आप जैसे ही खींचेंगे, आप दूरस्थ शाखा को हटा सकते हैं। जीआईटी में शाखाएं इतनी सस्ती हैं कि आमतौर पर उनका उपयोग न करने के कुछ कारण हैं।
अविभाजित

@indiv अदृश्य मैं असहमत हैं आज इंटरनेट पर दो कंप्यूटरों को जोड़ने के बहुत सारे अवसर हैं। उत्तर में वर्णित तकनीक एक लैन पर एक लैपटॉप से ​​डेस्कटॉप पर प्रगति में काम स्थानांतरित करने के लिए उपयोगी हो सकती है। यहां तक ​​कि हमाची जैसी एक आभासी वीपीएन सेवा का उपयोग इंटरनेट पर फ़ाइलों को स्थानांतरित करने के लिए किया जाएगा, जो सीधे कंप्यूटर पर चलने वाले कंप्यूटरों के बीच होता है।
भाप से चलने वाला

1
@steampowered, निश्चित रूप से यह कुछ लोगों / स्थितियों के लिए सही हो सकता है, लेकिन मैंने सोचा कि यह भविष्य के पाठकों के लिए ध्यान देने योग्य है क्योंकि यह इस समाधान के लिए एक कठिन आवश्यकता है कि आपके स्थानीय env / सिस्टम को काम करने और संशोधित करने के लिए आने वाले ट्रैफ़िक को स्वीकार करने में गैर तुच्छ विन्यास लगता है। मेरी राय में, इस तरह के कार्य के लिए "ओवरकिल" है। यदि आपका सिस्टम पहले से खुला है तो हर तरह से इस उत्तर का उपयोग करें - यह गलत नहीं है। मुझे लगता है कि यहां उतरने वाले अधिकांश उपयोगकर्ता ऐसी स्थिति में नहीं होंगे।
अविभाज्य

स्टैम्स कमिटेड ऑब्जेक्ट्स हैं और इस तरह पहले से ही एक कमिट हैश (देखें) git stash list --oneline ) है, इसलिए आपको तकनीकी रूप से स्टैश को नई मेमोरी ऑब्जेक्ट पर लागू नहीं करना है। दूसरे शब्दों में, एक नई शाखा बनाना आवश्यक नहीं है। हालाँकि, किसी स्टैश को सीधे रिमोट पर धकेलना कम से कम कहना मुश्किल है।
टायलर क्रॉम्पटन

15

वैकल्पिक रूप से आप निम्न प्रकार से पूरे स्थानीय स्टैड्स को दूसरे कंपार्टमेंट में निर्यात कर सकते हैं

  • git pull यह सुनिश्चित करने के लिए कि आपके पास पुराने और नए दोनों प्रकार के गिट निर्देशिका हैं, दोनों में नवीनतम परिवर्तन हैं।
  • पुराने git डायरेक्टरी से .it फोल्डर को नए रिपॉजिटरी में कॉपी करें

1
यद्यपि .it की संपीड़ित टार 700M + थी, लेकिन यह अन्य प्रस्तावित समाधानों की तुलना में कहीं अधिक आसान था, खासकर जब से मैंने कई बार संघर्ष किया था।
क्रिस वॉर्थ

5

SourceTree में निर्यात स्लैश कैसे करें:

  1. एक शाखा से एक नई शाखा "StashTransfer" बनाएं जहां आप अपने Stash का उपयोग करने जा रहे हैं
  2. उस पर अपनी लकीर लगाइए और कमिट कीजिए

  3. अपने कमिट पर क्लिक करें और उसमें से एक पैच बनाएं, पैच फाइल को अपने साथ रखें।

  4. एक अलग रिपॉजिटरी में जाएं, उसी मूल शाखा का चयन करें जिसे आपने सिर्फ 1 में इस्तेमाल किया था)

  5. क्रिया / पैच लागू करें, मोड का चयन करें: कार्यशील प्रतिलिपि फ़ाइलों को संशोधित करें, पैच लागू करें अब आपने अपने वर्तमान परिवेश में पैच से अनधिकृत संशोधन किए हैं

  6. वर्तमान रेपो के लिए एक नया स्टैश बनाएं


4

आप एक मशीन से पैच फ़ाइल के रूप में स्टैश बना सकते हैं, फिर उस पैच फ़ाइल को अन्य मशीनों में साझा कर सकते हैं।

एक पैच के रूप में स्टैश बनाना

$ git stash show "stash@{0}" -p > changes.patch

"Stash @ {0}" stash का परिचायक है। यह नवीनतम स्‍टैश के साथ पैच फाइल बनाएगा। यदि आप $ git stash listअपनी सूची को देखने के लिए अलग-अलग एक कमांड का उपयोग करना चाहते हैं और वह चुनें जिसे आप पैच करना चाहते हैं।

पैच लगाना

अब उस स्टाॅश को दूसरी मशीन में ट्रांसफर करें और अपने प्रोजेक्ट के रूट फोल्डर में पेस्ट करें। फिर इस कमांड को रन करें

$ git apply changes.patch

अगर गलती है और आप बदलाव को उलटना चाहते हैं

$ git apply changes.patch --reverse

3

एक अन्य विकल्प एक कंप्यूटर से दूसरे कंप्यूटर rsyncके .gitफ़ोल्डर में है। rsyncप्रक्रियाएं केवल फ़ाइल परिवर्तन (प्रतिलिपि की तुलना में तेज़) होती हैं।

इस दृष्टिकोण में एक नकारात्मक पहलू यह है कि विन्यास भी अधिलेखित हो जाएगा, जो कि वांछित नहीं हो सकता है यदि आप अलग-अलग चलाते हैं। दो मशीनों के बीच। लेकिन आप --excludeविकल्प के साथ फ़ाइलों को छोड़कर इसे दूर कर सकते हैं rsync

कुल मिलाकर मुझे लगता है कि एक देशी Git समाधान क्लीनर है, लेकिन यह rsyncहैक जल्दबाजी में किसी के लिए अच्छा हो सकता है जो git की तुलना में rsync से अधिक परिचित हो सकता है।


3

मूल पोस्ट से स्टार्टअप कमांड:

git stash show -p stash@{x} > patch_file

मेरे लिए काम नहीं किया (किसी कारण से यह अनुपयोगी पैच फ़ाइलें बनाई गई)। इसके बजाय मुझे:

git stash apply stash@{x}
git commit

प्रत्येक स्टैश के लिए मैं स्थानांतरण करना चाहता था। फिर, मैंने फ़ाइल के भीतर 'पैरेंट' रेपो रखा: /// 'चाइल्ड' रेपो तक पहुंच, और निम्नलिखित प्रत्येक स्टैट कमिट के लिए किया:

git fetch file:///path_to_parent_git && git cherry-pick commit_sha
git reset --soft HEAD^
git stash save my_new_stash_on_child

यह अधिक जटिल है लेकिन मेरे लिए चाल चली गई।


0

यदि आप अपने परिवर्तनों को एक मशीन से दूसरी मशीन पर ले जाना चाहते हैं, तो आप हमेशा अपने मशीन पर अपने परिवर्तन कर सकते हैं और फिर उनकी मशीन पर एक सॉफ्ट रीसेट कर सकते हैं।

कार्यालय

git commit -m "-stash-"

रसोई

git reset --soft HEAD~1

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.