2011-06-18 5 views
5

पर एक नंगे भंडार क्लोन कर सकते हैं मुझे यकीन है कि यह किया जा सकता है, मुझे बस सही तरीके से यकीन नहीं है।गिट एक अन्य नंगे भंडार

मेरा परिदृश्य एक यूएसबी ड्राइव, एक स्थानीय हार्ड ड्राइव और नेटवर्क ड्राइव को इस बिंदु पर मेरे पीसी से कनेक्ट करने के लिए है। स्थानीय हार्ड ड्राइव में मेरे स्थानीय काम के लिए स्थानीय सक्रिय रेपो शामिल होगा। नेटवर्क ड्राइव (एक लंबे यूएनसी पथ के साथ!) में मुख्य नंगे रेपो होगा जो अपस्ट्रीम संदर्भ प्रति (कार्यालय में 2 या 3 सहयोगी) के रूप में कार्य करता है, जबकि यूएसबी ड्राइव कुछ बाहरी पीसी को स्नीकरनेटिंग के लिए मेरी मोबाइल प्रति के रूप में कार्य करता है (मेरे अन्य सहयोगियों के पास अपने स्वयं के ड्राइव हैं, जो उत्तर को प्रभावित कर सकते हैं)। (यह विंडोज़ msysgit पर है)।

यह यूएसबी ड्राइव कि चिंता का विषय है, और यकीन है कि मुझे सही दिशा में कार्यप्रवाह निर्देशन कर रहा हूँ बना रही है की स्थापना (using-git-on-usb-stick-for-travelling-code देख रहा है।

  • मैं अपने स्थानीय रेपो क्लोनिंग किया जाना चाहिए, या नेटवर्क रेपो क्लोनिंग?
  • क्या विशेष झंडे हैं सुनिश्चित करने के लिए कि यूएसबी ड्राइव dismounts सही ढंग से? (-nohardlinks?)
  • आदि
+0

आपके पास एक (लॉजिकल) डिस्क से दूसरे में हार्डलिंक नहीं हो सकते हैं। – svick

उत्तर

0

आप या तो से क्लोन कर सकते हैं। जैसे ही यूएसबी ड्राइव खत्म हो जाती है, आप इसे हटा सकते हैं। आप के बाद से

git fsck --full 
+0

रेपो को किसी भी विचार पर क्लोन किया जाना चाहिए? मैं शुरुआत में अपस्ट्रीम नेटवर्क नंगे रेपो क्लोनिंग के बारे में सोचा था, लेकिन अब मैं सोच रहा हूं कि मुझे अपने स्थानीय (कामकाजी) रेपो क्लोनिंग करना चाहिए। –

+0

"डबल चेक अखंडता": निश्चित रूप से एक सार्थक कदम ;-) –

8

आप

cd /e/src 
git clone --bare //server/path/to/your/network/repo.git

साथ यूएसबी स्टिक के लिए लंबी यूएनसी पथ के साथ रेपो से एक नंगे करने के लिए नंगे क्लोन बना सकते हैं अखंडता की जाँच डबल कर सकते हैं लेकिन मुझे शक है कि यह आप खरीदता है एक कदम में इसे करने के लिए बहुत कुछ।

यह देखते हुए कि आप अपने स्थानीय सक्रिय रेपो में काम करेंगे, मैं यूएसबी स्टिक

cd git init --bare /e/src/myproject.git

पर एक नंगे रेपो बनाएंगे, अपने स्थानीय सक्रिय रेपो में एक दूरस्थ बनाने

git remote add usb file:///e/src/myproject.git

और फिर आवश्यकतानुसार इसे दबाएं।

git push usb philip/cool-new-feature

ऊपर दिए गए आदेश आपके यूएसबी स्टिक को मानते हैं ई: और यह कि आपकी कार्यशील निर्देशिका आपके स्थानीय सक्रिय रेपो के भीतर है।

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

सुझाव:

  1. स्थिति है जहाँ आप या किसी और मनोनीत विलय हो जाता है से बचें। इसके बजाए, आप टीम के सभी सदस्यों को जितनी बार संभव हो सके एकीकृत करने के लिए छोटे और प्रबंधनीय विरोधाभासी परिवर्तनों की संभावना रखने के लिए चाहते हैं।
  2. सहयोगियों को अलग करने से जोखिम बढ़ जाता है कि कोई ऐसी सुविधा को तोड़ देगा जो किसी और पर निर्भर करता है, या तो असुरक्षित परिवर्तनों के माध्यम से या गलत तरीके से विलय विवादों को हल करता है। आपके पास यह निर्धारित करने के लिए एक त्वरित, एक-बटन विधि होनी चाहिए कि आपके कोड में कोई भी प्रतिक्रिया या नई बग फंस गई है या नहीं।
  3. सहयोगियों के प्रत्येक समूह, यानी, जिनके पास एक दूसरे के भंडार या आपके यूएसबी स्टिक की तुलना में साझा भंडार की अधिक लगातार पहुंच है, उन्हें अपने आप में निरंतर एकीकरण करना चाहिए। जब यूएसबी स्टिक से नया काम उपलब्ध होता है, तो शेष टीम से नए कोड के साथ उनके पास जो कुछ है, उसे एकीकृत करना शीर्ष प्राथमिकता बनना चाहिए।

एक तरीका यह है कि आप ऐसा कर सकते हैं कि हर कोई एक स्वच्छ मास्टर रखे और अन्य शाखाओं में परिवर्तन करे। यूएसबी स्टिक के भौतिक कब्जे एक प्राकृतिक एकीकरण टोकन है, इसलिए जब किसी दिए गए सहयोगी यह है, अनुक्रम

git checkout master 
git pull usb master  # should always be a fast-forward 
git merge feature1 
make test    # or whatever, and repeat until no breakage 
git commit 
git push usb master 
git push shared master # if appropriate 
git merge feature2  # if necessary 
...
+0

मैं भाग्यशाली हूं कि हम बहुत अच्छी तरह से सहयोग करते हैं। समस्या का एक हिस्सा मशीनों के बीच स्वैपिंग है (और कॉर्पोरेट सिस्टम के नीचे फिटिंग ;-) –

3

चला जाता है मैं अपने मुख्य नेटवर्क रेपो का एक दर्पण क्लोन बनाने की सलाह देते:

cd /path/to/usb/drive 
git clone --mirror url://to/main/network/repo/project.git 

एक दर्पण क्लोन मूल भंडार के रूप में सभी शाखाओं, टैग इत्यादि के साथ एक नंगे भंडार है।

--no-hardlinks पास करने के बारे में चिंता न करें क्योंकि फ़ाइल सिस्टम के बीच हार्डलिंक करना संभव नहीं है।

जब भी आप अपने यूएसबी दर्पण अद्यतन करना चाहते, बस इसे माउंट और निम्नलिखित चलाएँ:

cd /path/to/usb/drive/project.git 
git remote update -p 

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

# initial setup 
cd /path/to/local/project 
git remote add usb /path/to/usb/drive/project.git 

# grab the commits from the usb drive 
git remote update -p 

# merge the usb drive commits into your local master branch 
git merge usb/master 

# push the result up to the main network repo 
git push 
+0

मैं शायद इस (मेरे वर्तमान) वर्कफ़्लो के लिए "आपके मुख्य नेटवर्क रेपो का दर्पण क्लोन बनाने की अनुशंसा करता हूं" हम प्रत्येक कोड के नए बिट्स विकसित कर रहे हैं और जब तक हम तैयार नहीं होते हैं, तब तक उन्हें मुख्य (नेटवर्क) रेपो तक नहीं दबाया जाएगा, लेकिन ऑफ नेट मशीन (इसलिए यूएसबी ट्रांसफर) पर सामान की कोशिश कर रहे हैं। मैं वर्कफ़्लो देख सकता हूं हालांकि यह सही बात होगी। –

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

  • कोई संबंधित समस्या नहीं^_^