2008-11-17 21 views
9

अनुभाग अंतिम लिंक stashing: stashing और reflog http://ftp.newartisans.com/pub/git.from.bottom.up.pdf में अक्सर stashing की सिफारिश प्रगति में अपने काम की फोटो लेने के लिए। लेखक जहां तक ​​अनुशंसा करते हैं कि आप मैन्युअल रूप से स्टैश किए बिना नियमित रूप से अपने काम को छूने के लिए क्रॉन नौकरी का उपयोग कर सकते हैं।स्वचालित रूप से श्रृंखला में

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

$ cat <<EOF > /usr/local/bin/git-snapshot 
#!/bin/sh 
git stash && git stash apply 
EOF 
$ chmod +x $_ 
$ git snapshot 

का कोई कारण ही आप हर घंटे एक क्रॉन जॉब से नहीं चल सकता है, reflog चल के साथ हर हफ्ते या महीने की अवधि समाप्त करें।

इस दृष्टिकोण के साथ समस्या है:

  1. अपने काम की नकल के लिए कोई परिवर्तन नहीं हैं, तो "git छिपाने की जगह लागू करें" अपने अंतिम गुप्त कोष में अपने काम की नकल पर लागू हो जाएंगी।
  2. क्रॉन नौकरी निष्पादित करते समय और काम करने वाली प्रतिलिपि पर काम करने वाले उपयोगकर्ता के बीच दौड़ की स्थिति हो सकती है। उदाहरण के लिए, "गिट स्टैश" चलता है, तो उपयोगकर्ता फ़ाइल खोलता है, फिर स्क्रिप्ट का "गिट स्टैश लागू" निष्पादित किया जाता है।

क्या किसी के पास इस स्वचालित छेड़छाड़ के काम को और अधिक विश्वसनीय बनाने के लिए सुझाव हैं?

+0

शीर्ष पर आपका लिंक टूटी हुई है। यूआरएल है: http://www.newartisans.com/2008/04/git-from-the-bottom-up.html – Colin

+0

SO मुझे मेरी टिप्पणी हटाने नहीं देगा, लेकिन मुझे गलती हुई थी। लिंक वास्तव में http://ftp.newartisans.com/pub/git.from.bottom.up.pdf – Colin

+0

धन्यवाद - लिंक अपडेट किया गया है। – Readonly

उत्तर

13

मैं निश्चित रूप से है कि (अन्यथा उत्कृष्ट) आलेख में वर्णित के रूप में वास्तव में कारणों से आप का हवाला देते हैं के लिए, स्वत: stashing की स्थापना नहीं होता।

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

8

git छिपाने की जगह वास्तव में सिर्फ एक छोटे से खोल स्क्रिप्ट बनाता है कि एक प्रतिबद्ध है जो किसी भी शाखा में संदर्भित नहीं किया जाता है। आप दौड़ की स्थिति के बिना इस व्यवहार का अनुकरण कर सकते हैं:

#!/bin/sh 
GIT_DIR=$(git rev-parse --git-dir) || exit 
ref_stash=refs/stash 

w_commit=$(git stash create) # creates a commit for the wip 

# gather some info 
head=$(git log --no-color --abbrev-commit --pretty=oneline -n 1 HEAD --) 
branch=$(git symbolic-ref -q HEAD) 
branch=${branch#refs/heads/} 
msg=$(printf 'WIP on %s: %s' "$branch" "$head") 

# Make sure the reflog for stash is kept. 
: >>"$GIT_DIR/logs/$ref_stash" 

git update-ref -m "$msg" $ref_stash $w_commit 

स्क्रिप्ट कुछ चमकाने की आवश्यकता हो सकती है, लेकिन मुझे आशा है कि आप विचार :)

+0

स्क्रिप्ट काम करने लगती है और यदि आप हेड पर वापस लौटने के बिना अपने कामकाजी बदलावों को सहेजना चाहते हैं तो मैं इसे उपयोगी बना सकता हूं। मुझे ग्रेग की प्रतिक्रिया से आश्वस्त है कि हमें इस पर 'बैकअप' उद्देश्यों के लिए भरोसा नहीं करना चाहिए :) – Readonly

2

मैं गुप्त कोष प्रबंधन से पहले शाखा प्रबंधन पसंद करते हैं मिलता है: एक बार देख ले here

1

समर्थन चीजों के लिए ऊपर मैं ऑनलाइन बैकअप सेवा, तुम सचमुच कुछ भी करने की जरूरत नहीं है dropbox.com के लिए इसी तरह की सलाह देते हैं, यह सिर्फ सभी परिवर्तनों को आप के लिए दिन के दौरान कर ट्रैक करता है।

मैं इसे अपने सभी Git संग्रह जो सिर्फ मेरे हाथ में वास्तविक काम पर ध्यान केंद्रित करने में मदद करता के लिए सक्षम है।

3

मेरी personnal उपयोग के लिए (3 वर्षों के दौरान के साथ काम), मैं उर्फ ​​config अनुभाग में इस लाइन को शामिल किया है: तो फिर

s = !sh -c \"git stash save | grep 'No local changes to save' && git $* || (git $* && git stash pop) \" 

, मैं सिर्फ एक जोड़कर ऑटो stashing के साथ हर Git आदेश चला सकते हैं पहले 'कि आपके मामले में की तरह: Git रों snaspshot

शायद बहुत देर हो चुकी है, लेकिन आशा है कि यह किसी एक दिन में मदद मिलेगी ...

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