2009-04-21 11 views
5

क्या गिट या मर्कुरियल में एक गैर-दृश्यमान शाखा बनाना संभव है, मैं बैकअप के रूप में उपयोग कर सकता हूं? जैसे दिन के अंत में मेरे पास अधूरा काम है (सिंटैक्स त्रुटियों के साथ भी छोड़ा जा सकता है) लेकिन मैं चाहता हूं कि इसे ऑनलाइन भंडार में बैक अप किया जाए, बिना किसी गड़बड़ी के लोगों को परेशान किए।बैकअप के लिए निजी Mercurial/गिट शाखा?

उत्तर

0

यह वास्तव में एससीएम का उद्देश्य नहीं है। शायद किसी सर्वर पर अपलोड करने के लिए rsync जैसे कुछ बेहतर विचार होगा?

1

Mercurial के साथ, जब आप विलय करते हैं, तो आप अपने सभी परिवर्तन मर्ज करते हैं, जिनमें शामिल हैं "केवल अधूरा काम सहेजने के लिए"। यदि आप नहीं चाहते हैं कि वे पेड़ में खत्म हो जाएं तो उन्हें प्रतिबद्ध न करें।

गिट के लिए, जहां तक ​​मुझे पता है, डिफ़ॉल्ट व्यवहार समान है और उन्हें हटाने के लिए प्रतिबद्ध इतिहास को संपादित करना भी परेशान है।

तो, जैसा कि सुझाव दिया गया है, rsync एक बेहतर विकल्प की तरह दिखता है।

+1

यही कारण है कि एक व्यक्तिगत शाखा में विकास आम/लोकप्रिय है, और यह बहुमत वितरित वीसीएस बनाता है। प्रतिबद्ध करने से पहले, आप उत्पादन शाखा में बदल सकते हैं, रीबेज कर सकते हैं या विलय कर सकते हैं कि आप इसे कैसे देखना चाहते हैं, और फिर केवल वही परिवर्तनों को दबाएं जिन्हें आप चाहते थे।प्रश्न को संभालने के लिए रुपयेसीएनसी एक खराब विकल्प है। –

2

यदि आप भंडार के दो दूरस्थ क्लोन था यह पूरा कर सकते हैं:

stable 
unstable 

अस्थिर (अपने बैकअप) के लिए पुश जब तक आप एक सुविधा समाप्त कर लें। एक बार सुविधा समाप्त हो जाने के बाद, शाखा को स्थिर करने के लिए दबाएं। लाओ, कुल्ला, दोहराना।

1

TortoiseHg का नवीनतम संस्करण आपको shelve your changes पर अनुमति देता है।

संक्षेप में:

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

परिवर्तन ठंडे बस्ते में डालने भी को आंशिक रूप से पूरा काम को दूर करने के लिए उपयोगी यकीन है कि यह अन्य परिवर्तन की डिबगिंग साथ हस्तक्षेप नहीं करता आप बनाने कर रहे हैं है।

3

गिट आपको अपने भंडार को बहुत आसानी से दर्पण करने की अनुमति देता है;

मान लें कि आपके पास 'बैकअप' नामक रिमोट रेपो है, उदा।,

git remote add --mirror backup server.com:/home/koen/backup_repo.git 

फिर बैकअप लेने के रूप में आसान के रूप में

git push backup 

कुछ नोट है:

  • अगर आप --mirror का उपयोग नहीं किया जब दूरस्थ रेपो जोड़ने, तो में --mirror का उपयोग अपने पुश कमांड
  • रिमोट रेपो एक "नंगे" भंडार होना चाहिए (क्योंकि आप इसमें धक्का दे रहे हैं)
  • चेकआउट --mirror
7

डिफ़ॉल्ट git clone करके और git fetch/merge refs/सिर में केवल डाउनलोड refs के बारे में git push और git remote मदद/*। तो आप कहीं और कहीं भी दबाएंगे अन्य लोगों द्वारा डाउनलोड नहीं किए जाएंगे (जब तक वे स्पष्ट रूप से उनसे पूछें या git clone --mirror जैसे कुछ करें)। तो, उदाहरण के लिए, आप कर सकते हैं:

git push origin HEAD:refs/koen/my_work 

अपनी वर्तमान प्रतिबद्धता को धक्का देने के लिए। कि पूरा refspec का उपयोग करना, आप भी एक और चेकआउट से खींच कर सकते हैं:

git pull origin refs/koen/my_work 

अपने सिर को आगे बढ़ाने को स्वचालित करने के लिए, आप की तरह

[remote "origin"] 
    url = [email protected]:pieter/gitx.git 
    push = : 
     push = refs/heads/*:refs/koen/* 

कुछ है कि परेशान कर के बिना दूरस्थ करने के लिए अपने सभी शाखाओं चली जाएगी कर सकता है कोई और। यह आपके द्वारा उपयोग किए जाने वाले डिफ़ॉल्ट पुश व्यवहार को भी रखेगा। यदि आप यह नहीं चाहते हैं, तो push = : लाइन हटाएं।

1

मुझे लगता है कि यह इस बात पर निर्भर करता है कि आपकी रिपोजिटरी कैसे दिखाई दे रही है और आपके पास कौन सी अनुमतियां हैं। सिद्धांत रूप में, आपको केवल "सहेजने वाले क्षेत्र" के रूप में उपयोग करने के लिए एक अस्थायी शाखा की आवश्यकता होती है जिसे आप हब रेपो में दबाते हैं --- मुझे लगता है कि आप पहले से ही इसे जानते हैं। क्या शाखा को "दृश्यमान नहीं" के रूप में फ़्लैग करने का कोई सामान्य तरीका है? मैं, तो विश्वास नहीं है, हालांकि आप अपने स्थानीय सिर धक्का के साथ प्रयोग कर सकता है अजीब तरह से नामित करने के लिए दूसरे छोर पर refs, जैसे रेफरी:

git push central refs/heads/master:refs/remotes/tmp/master 

यह "refs/रिमोट/tmp/मास्टर" बनाने की कोशिश करेंगे , जो एक वैध refname है, लेकिन आमतौर पर एक शाखा माना जाता है। उदाहरण के लिए, gitweb इस तरह का एक रेफरी दिखाएगा यदि यह रेफरी/हेड्स के तहत शाखाओं में से किसी एक के इतिहास में दिखाई देता है/लेकिन सभी रिमोट रेफरी की सूची नहीं दिखाएगा।

वैकल्पिक रूप से, सिर्फ गोली काटने और एक दृश्य शाखा "शायद-टूट उपयोग-में अपने-संकट" कहा जाता है के लिए धक्का;)

0

हमारे तेज परियोजना पर हम कई शाखाओं का उपयोग करें। डिफ़ॉल्ट शाखा "ट्रंक" की तरह है। हर बार जब मैं एक फीचर शुरू करता हूं तो मैं बाहर निकलता हूं और वहां विकसित होता हूं। मैं प्रतिबद्ध करता हूं, धक्का देता हूं, दूसरी जगह जाता हूं, खींचता हूं, प्रतिबद्ध करता हूं, धक्का देता हूं। डिफ़ॉल्ट शाखा अस्पृश्य रहती है और हर कोई मेरी शाखा को नहीं करता है। जब मैं करूँगा, तो मैं शाखा को डिफ़ॉल्ट रूप से विलय करता हूं।

1
Git के साथ

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

तो फिर तुम सार्वजनिक भंडार, नंगे जिसका अर्थ है कि यह काम कर रहा भंडार नहीं है है। आप इस सार्वजनिक भंडार को दबाते हैं (उदाहरण के लिए आपके काम को स्थिर करते समय आपके निजी भंडार से repo.or.cz, GitHub या Gitorious) जैसे गिट होस्टिंग साइटों में से एक पर होस्ट किया जा सकता है। आप इस सार्वजनिक प्रकाशन भंडार (उदाहरण के Git मेंटेनर, Junio ​​सी Hamano के लिए, सार्वजनिक git.git repositoris में सुविधा शाखाओं धक्का नहीं है) करने के लिए अपने निजी विकास रिपोजिटरी से शाखाओं का केवल सबसेट धक्का कर सकते हैं। यह सार्वजनिक भंडार वह जगह है जहां से अन्य लोग आते हैं।

इस अलगाव का लाभ यह है कि आप "गिट प्रतिबद्ध - एमेन्ड" का उपयोग करके उदाहरणों को ठीक कर सकते हैं) उदाहरण के लिए सार्वजनिक भंडार में नहीं धकेलते हैं, और अन्यथा इतिहास के कुछ हिस्सों को फिर से लिखते हैं जो केवल निजी विकास भंडार में मौजूद हैं।

1

हालांकि यह निजी नहीं है (अपनी कंपनी में किसी को भी उन्हें, बस डिफ़ॉल्ट रूप से नहीं, प्राप्त कर सकते हैं तो यह कष्टप्रद नहीं है), यह मैं क्या कर रहा है:

~/.gitconfig

 
[alias] 
    backup = !git push -v origin +refs/heads/*:refs/wip/`git config --get user.email`/* 
में

तो, कि जिस तरह से, आप कर सकते हैं अपने स्थानीय रेपो रन पर किसी भी समय:

git backup 

अपने स्थानीय शाखाओं के सभी (के तहत refs/सिर वैसे भी) refs के तहत "मूल" रेपो पर पुश किया जाएगा/wip/your_email/name अंतरिक्ष, बिना शर्त (पुश-एफ के समान)।

एक बार जब आप मूल/मास्टर को धक्का देने के लिए तैयार हो जाते हैं, तो यदि आप अपने काम को प्रगति पर बैक अप लेने के लिए इसका उपयोग कर रहे हैं, तो पुश वास्तव में तेज़ होगा, क्योंकि SHA1 ऑब्जेक्ट्स के अधिकांश (सभी) पहले से ही होंगे मूल सर्वर पर।

ध्यान दें कि समय-समय पर आप बैकअप को शुद्ध करना चाहते हैं, ताकि मूल रेपो कचरा सामान एकत्र कर सके। देखें:

 
git ls-remote origin refs/wip/`git config --get user.email`/* 

है कि आप शाखाओं आप बैकअप करने के लिए आगे बढ़ाया है जो की एक सूची दे देंगे, तो आपको पता है/को स्वचालित क्या साफ करने के लिए कर सकते हैं।

3

साझा भंडार में जो कुछ भी आप धक्का देते हैं वह सार्वभौमिक रूप से देखा/उपलब्ध होगा। आपका दो सरल विकल्प हैं:

  • एक अलग स्थान पर अपनी खुद की दूसरी भंडार बना सकते हैं और हर दिन के अंत में वहाँ के लिए अपने विकास शाखा धक्का। आप अपनी विकास शाखा को हर किसी के उपयोग के लिए स्थिर नहीं करेंगे।

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

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