2009-05-12 6 views
29

यदि मैं rsync -a या cp -R का उपयोग करके एक ट्रैक किए गए फ़ोल्डर की एक प्रति बना देता हूं, तो क्या मैं प्रतिलिपि का उपयोग कर सकता हूं जैसे कि यह एक गिट क्लोन था, या क्या यह अजीब समस्याओं के सभी प्रकार का कारण बनता है? यह सब मेरे कंप्यूटर पर चल रहा है, इसलिए कोई भी भंडार तक नहीं पहुंच रहा है।क्या कॉपी किए गए गिट रेपो का उपयोग करना सुरक्षित है?

जाहिर है, गिट-क्लोन डीआईआर को पता है कि इसकी प्रतिलिपि बनाई गई थी, इसलिए मैं git pull को स्रोत निर्दिष्ट किए बिना कर सकता हूं, लेकिन मुझे लगता है कि मैं इसके बिना जीने के लिए तैयार हूं, क्या मुझे चिंता करने की ज़रूरत है?

एक प्रयोग के रूप में, मैंने एक छोटी परियोजना बनाई, clone डी और rsync इसे संपादित करें, और diff परिणामी फ़ोल्डरों को संपादित करें। यहाँ परिणाम हैं:

[email protected] ~ 
$ git clone project/.git project2 
Initialized empty Git repository in /home/itsadok/project2/.git/ 

[email protected] ~ 
$ rsync -a project/ project3/ 

[email protected] ~ 
$ diff -r project2 project3 
Only in project3/.git: COMMIT_EDITMSG 
diff -r project2/.git/config project3/.git/config 
7,12d6 
< [remote "origin"] 
<  url = /home/itsadok/project/.git 
<  fetch = +refs/heads/*:refs/remotes/origin/* 
< [branch "master"] 
<  remote = origin 
<  merge = refs/heads/master 
Files project2/.git/index and project3/.git/index differ 
diff -r project2/.git/logs/HEAD project3/.git/logs/HEAD 
1c1 
< 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <[email protected](none)> 1242131284 +0300  clone: from /home/itsadok/project/.git 
--- 
> 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <[email protected](none)> 1242131066 +0300  commit (initial): first commit 
diff -r project2/.git/logs/refs/heads/master project3/.git/logs/refs/heads/master 
1c1 
< 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <[email protected](none)> 1242131284 +0300  clone: from /home/itsadok/project/.git 
--- 
> 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <[email protected](none)> 1242131066 +0300  commit (initial): first commit 
Only in project2/.git/logs/refs: remotes 
Only in project2/.git: packed-refs 
Only in project2/.git/refs: remotes 

वहाँ काफी अंतर का एक सा है, लेकिन इसमें से अधिकांश मूल के संदर्भ के बारे में हो रहा है। क्या मैं सही हू?

+0

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

+1

मेरे लिए दो बार पहले से उत्पन्न होने की आवश्यकता है, एक बार बैकअप फ़ोल्डर के लिए जिस पर मैंने कुछ बदलाव किए थे, और एक बार जब मैं एक रेपो क्लोन करना चाहता था जो एक एनएटी के पीछे एक विंडोज मशीन पर था जिस पर एसएसडी नहीं था ... लेकिन ज्यादातर, मैं गिट काम करता है की बेहतर समझ लेना चाहता हूं। – itsadok

उत्तर

27

यह सुरक्षित है।

"गिट क्लोन" का उपयोग करने में अंतर यह है कि यह स्वचालित रूप से मूल भंडार सेट करता है, ताकि आप दो भंडारों को सिंक्रनाइज़ करने के लिए आसानी से "गिट पुल" और "गिट पुश" का उपयोग कर सकें। इसके अलावा "गिट क्लोन" लॉग, इंडेक्स और अन्य कॉन्फ़िगरेशन के लिए स्थानीय कॉन्फ़िगरेशन की प्रतिलिपि नहीं करता है। यह केवल भंडार के संस्करण इतिहास की प्रतिलिपि बनाता है (और यहां तक ​​कि इसे बाइट-स्तर पर अलग-अलग संग्रहीत किया जा सकता है, क्योंकि हर बार गिट और फिर "git gc" का उपयोग करते समय अपने डेटाबेस को संपीड़ित करता है)।

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

+2

यह डालने का एक और तरीका यह है कि गिट क्लोन वास्तव में "ऑब्जेक्ट्स" निर्देशिका को पूरी तरह से क्लोन करता है जब इसे उसी मशीन पर रेपो क्लोन करने के लिए उपयोग किया जाता है --- यह केवल सब कुछ कॉपी करने के लिए सीपीओ का उपयोग करता है, हार्ड लिंक में कनवर्ट करता है गंतव्य एक ही फाइल सिस्टम है। ऑब्जेक्ट निर्देशिका के बाहर सब कुछ वैसे भी स्थानीय जानकारी है। बस उन्हें पुनर्निर्मित करने के बजाय उन थोक (एक ला सीपी-आर) की प्रतिलिपि बनाना (जो कि गिट क्लोन करता है) काफी सुरक्षित होना चाहिए। बशर्ते कॉपी किए गए हुक निश्चित रूप से कुछ भी विचित्र न करें। – araqnid

4

आप किसी और की भंडार क्लोन है, यह मूल रूप से सिर्फ प्रतियां इस निर्देशिका की सामग्री अपने कंप्यूटर के लिए।

वास्तविक अच्छे Git Internals (Scott Chacon) from Peepcode Press से। (पृष्ठ 44) तो जहां तक ​​मैं चिंतित हूं/मैं देखता हूं, मूल के संदर्भ में बस गायब है।

सर्वोत्तम संबंधों के साथ।

+3

मुझे लगता है कि आप peepcode मतलब peepcode नहीं है। :) –

1

यह बिल्कुल है ही, ठीक है, लगभग, आप 'project3' में एक ही चाहते हैं, तो बस करो:

git remote add origin /home/itsadok/project 
git branch -f master origin/master 
संबंधित मुद्दे