2009-09-09 12 views
20

यह सवाल शायद .gits और सामान्य रूप में Git संग्रह की भूमिका की समझ की मेरी कमी पर आधारित है लेकिन:rsync .git निर्देशिका

मुझे लगता है कि मैं मशीनों के बीच git init साथ बनाई गई सामग्री के साथ एक निर्देशिका rsync कर सकते हैं ?

मेरे पास अपने लैपटॉप पर एक भंडार है, और वहां से इसे दूर करने का एकमात्र तरीका एक दूरस्थ मेजबान के लिए scp/rsync है, जिससे मैं इसे फिर से डाउनलोड कर सकता हूं। क्या मैं इन होस्टों के बीच पूर्ण निर्देशिका संरचना को rsync कर सकता हूं?

उत्तर

8

हां, यह संभव है। आईआईआरसी, गिट एक सापेक्ष दृष्टिकोण का उपयोग करता है। इसलिए इसे किसी अन्य कंप्यूटर से सिंक करना सुरक्षित है।

+1

यह (चेतावनी के साथ संभव है कि फाइलसिस्टम-आधारित रिमोट्स और वैकल्पिक काम नहीं कर सकते हैं) यदि आप rsync के दौरान भंडार पर कोई काम नहीं करते हैं। –

1

हां, rsync.git डीआईआर संभव है और परिणामस्वरूप भंडार का एक पूर्ण क्लोन होगा।

4

हाँ आप कर सकते हैं, लेकिन आपको this thread में दिखाए गए अनुसार एक नंगे भंडार के साथ ऐसा करना चाहिए।

$ git clone --bare ./projet projet.git 
$ rsync -a --stats --delete ./projet.git/ votre.serveur:~/projets/projet.git/ 

नोट: 6 + साल बाद, (मार्च 2016) git 2.8 आधिकारिक तौर पर बहिष्कार करें और पूरी तरह से Git rsync प्रोटोकॉल निकाल देंगे!

commit 0d0bac6 (30 जनवरी 2016) Jeff King (peff) द्वारा देखें।
(commit 9f03176 में Junio C Hamano -- gitster -- द्वारा विलय, 17 फ़र 2016)

यह पता चला "git clone" rsync से अधिक परिवहन से टूटा हुआ है जब स्रोत भंडार एक लंबे समय के संदर्भ पैक किया है, और कोई भी नहीं देखा न ही इसके बारे में शिकायत की।

Jeff King (peff) से सभी विवरण हैं।

+2

बेयर रिपोजिटरी केवल तभी जरूरी है जब आप उस रेपो को धक्का देना चाहते हों। बिट अगर आप हर बार रेपो कॉपी करते हैं, तो आप इसे एक पूर्ण रेपो के साथ कर सकते हैं। – Ikke

+2

आप पूर्ण भंडार के लिए भी rsync का उपयोग कर सकते हैं। यदि आप rsync का उपयोग करते हैं तो नंगे भंडार के बारे में कुछ खास नहीं है। –

+0

@Ikke: सच है, मैं आमतौर पर उस तरह के ऑपरेशन को धक्का देने के इरादे से करता हूं। – VonC

6

आप किसी भी समस्या के बिना rsync कर सकते हैं, लेकिन यदि आपके पास होस्टनाम के साथ घोषित कुछ रिमोट हैं जो मशीन के लिए स्थानीय हैं (यानी केवल/etc/hosts में संग्रहीत) तो वे स्पष्ट रूप से काम नहीं करेंगे।

हालांकि, क्या कोई कारण है कि आप सामग्री को सिंक करने के लिए गिट का उपयोग क्यों नहीं करते हैं?

+0

मैं यह समझ रहा था कि मेरे रिमोट सर्वर में गिट नहीं है, इसलिए मैं इसे – svrist

+1

पर धक्का दे सकता हूं, यदि आप एसएसएच के माध्यम से पुश का उपयोग करना चाहते हैं, तो आपको सर्वर पर भी गिट रखना होगा (लेकिन आप इसे स्थानीय रूप से इंस्टॉल कर सकते हैं, और उपयोग कर सकते हैं 'ग्रिट-पुश' के लिए'rereive-pack' विकल्प, और fetch/pull/clone के लिए समान विकल्प)। यदि आप HTTP के माध्यम से धक्का देना चाहते हैं, तो आपको वेबडावी के साथ केवल वेब सर्वर होना चाहिए, जो आपके लिए पुश एक्सेस की अनुमति देने के लिए कॉन्फ़िगर किया गया है (सर्वर पर कोई गिट आवश्यक नहीं है)। –

27

कुछ संभावनाएं हैं:

  • आप कर सकते हैं बस rsync.git भंडार (या कार्यशील निर्देशिका के साथ यहां तक ​​कि पूरी भंडार एक साथ), ing प्रदान की rsync दौरान यह है कि आप भंडार में किसी भी गतिविधि नहीं है (rsync:// प्रोटोकॉल का उपयोग करने के लिए एक ही अस्वीकरण)।

  • आप को क्लोन या पदावनतrsync प्रोटोकॉल का उपयोग लाने (जहां भंडार यूआरएल/स्थान इस तरह दिखता है: "rsync://host.xz/path/to/repo.git/") कर सकते हैं। ध्यान दें कि इस प्रोटोकॉल को बहिष्कृत किया गया है, क्योंकि अगर भंडार में कोई गतिविधि है, तो आप दूषित क्लोन (या fetch) प्राप्त कर सकते हैं।

    साथ ही, जैसा कि मैंने सुना है, यह 2007 से पैक किए गए रेफरी की उपस्थिति में सही ढंग से काम नहीं करता है, और हाल ही में किसी ने भी ध्यान नहीं दिया। यह गिट 2.8 में गायब हो जाएगा (यह हुआ)।

  • या आप git bundle बना सकते हैं, यह rsync या अन्य मशीन पर यह scp, और फिर क्लोन या बंडल से लाने।

+1

जैसा कि मैंने नोट किया है [नीचे दिए गए मेरे उत्तर में] (http://stackoverflow.com/a/1398041/6309), git 'rsync: //' प्रोटोकॉल * आखिरकार * गिट 2.8 में गायब हो जाएगा (मार्च 2016, 10+ के बाद "बहिष्कृत" के रूप में घोषित शुरू किया जा रहा है!) – VonC

0

बैकअप .git को rsync का उपयोग करना संभव है, लेकिन एक पकड़ (कम से कम अपने आप को) साथ यह अद्यतन नहीं किया जा सकता है। अगली बार जब आप इसे फिर से rsync करने का प्रयास करेंगे, तो आपको भारी ऑब्जेक्ट का नाम बदल जाएगा .. और आप उन्हें हटा नहीं सकते .. rsync या linux system से परिचित नहीं थे, मैं इसे पहले rsync से पहले .git बैकअप को शुद्ध करता हूं।

कौन सा है:

> chmod -R 777 /path/of/your/backup/.git 
> rm -fr /path/of/your/backup/.git 
> rsync /path/of/your/origin/.git /path/of/your/backup/.git 

मुझे पता है, यह बहुत कर लगाने और मूर्ख है .. कृपया मुझे पता है वहाँ यह करने के लिए एक बेहतर तरीका है ..

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