समाधान 3
यह कई परियोजनाओं के लिए एकल निर्देशिका का उपयोग करने के लिए है। मैं कुछ बारीकी से संबंधित परियोजनाओं के लिए इस तकनीक का उपयोग करता हूं जहां मुझे अक्सर एक परियोजना से दूसरे में परिवर्तन खींचने की आवश्यकता होती है। यह अनाथ शाखाओं के विचार के समान है, लेकिन शाखाओं को अनाथ होने की आवश्यकता नहीं है। बस एक ही खाली निर्देशिका राज्य से सभी परियोजनाओं को शुरू करें।
सभी परियोजनाओं को एक खाली खाली निर्देशिका से शुरू करें
इस समाधान से चमत्कार की उम्मीद न करें। जैसा कि मैंने इसे देखा है, आपको हमेशा अनट्रैक फ़ाइलों के साथ झुंझलाहट होने वाली है। Git का वास्तव में कोई सुराग नहीं है कि उनके साथ क्या करना है और इसलिए यदि कोई संकलक द्वारा बनाई गई मध्यवर्ती फाइलें हैं और आपकी .gitignore फ़ाइल को अनदेखा किया गया है, तो संभावना है कि यदि आप तेजी से स्वैप करने की कोशिश करते हैं तो वे कुछ समय के लिए लटक जाएंगे। बीच - उदाहरण के लिए - आपकी सॉफ्टवेयर परियोजना और PH.D थीसिस परियोजना।
हालाँकि यहाँ योजना है। खाली रिपॉजिटरी के द्वारा, जैसा कि आप किसी भी git प्रोजेक्ट्स को शुरू करने के लिए करना चाहते हैं, शुरू करें, और फिर अपनी सभी प्रॉजेक्ट्स को उसी खाली स्टेट से शुरू करें। इस तरह से आप निश्चित हैं कि दो बहुत सारी फाइलें काफी स्वतंत्र हैं। इसके अलावा, अपनी शाखाओं को एक उचित नाम दें और आलसी न केवल "मास्टर" का उपयोग करें। आपकी परियोजनाओं को अलग करने की आवश्यकता है इसलिए उन्हें उपयुक्त नाम दें।
Git कमिट करता है (और इसलिए टैग और शाखाएं) मूल रूप से एक डायरेक्टरी की स्थिति और उसकी उपनिर्देशिका को स्टोर करता है और Git को इस बात का कोई अंदाजा नहीं है कि ये एक ही या अलग-अलग प्रोजेक्ट्स के हिस्से हैं या नहीं, इसलिए वास्तव में एक ही रिपीटेटरी में विभिन्न प्रोजेक्ट्स को स्टोर करने के लिए कोई समस्या नहीं है। समस्या तब है जब आप किसी प्रोजेक्ट के अनट्रैक की गई फ़ाइलों को किसी अन्य का उपयोग करते हुए, या बाद में प्रोजेक्ट्स को अलग करते हुए हटा दें।
एक खाली भंडार बनाएँ
cd some_empty_directory
git init
touch .gitignore
git add .gitignore
git commit -m empty
git tag EMPTY
अपनी परियोजनाओं को खाली से शुरू करें।
किसी एक प्रोजेक्ट पर काम करते हैं।
git branch software EMPTY
git checkout software
echo "array board[8,8] of piece" > chess.prog
git add chess.prog
git commit -m "chess program"
दूसरा प्रोजेक्ट शुरू करें
जब तुम चाहो।
git branch thesis EMPTY
git checkout thesis
echo "the meaning of meaning" > philosophy_doctorate.txt
git add philosophy_doctorate.txt
git commit -m "Ph.D"
आगे और पीछे स्विच करें
जब भी आप चाहें परियोजनाओं के बीच वापस और आगे बढ़ें। यह उदाहरण शतरंज सॉफ्टवेयर परियोजना पर वापस जाता है।
git checkout software
echo "while not end_of_game do make_move()" >> chess.prog
git add chess.prog
git commit -m "improved chess program"
अनट्रैक की गई फाइलें कष्टप्रद हैं
हालाँकि आप प्रोजेक्ट्स / शाखाओं के बीच स्वैप करने पर अनट्रैक की गई फ़ाइलों से नाराज हो जाएंगे।
touch untracked_software_file.prog
git checkout thesis
ls
philosophy_doctorate.txt untracked_software_file.prog
यह एक अचूक समस्या नहीं है
परिभाषा के अनुसार, git को वास्तव में पता नहीं है कि अनट्रैक की गई फ़ाइलों का क्या करना है और उनसे निपटना आपके लिए है। आप किसी भी प्रकार की फ़ाइलों को बिना किसी शाखा से इधर उधर किए जाने से रोक सकते हैं।
git checkout EMPTY
ls
untracked_software_file.prog
rm -r *
(directory is now really empty, apart from the repository stuff!)
git checkout thesis
ls
philosophy_doctorate.txt
यह सुनिश्चित करके कि हमारी नई परियोजना की जाँच करने से पहले निर्देशिका खाली थी, हमने यह सुनिश्चित किया कि किसी अन्य परियोजना से लटकी हुई अनकही फाइलें नहीं थीं।
एक शोधन
$ GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01T01:01:01' git commit -m empty
यदि खाली रिपॉजिटरी करते समय समान तिथियां निर्दिष्ट की जाती हैं, तो स्वतंत्र रूप से बनाए गए खाली रिपॉजिटरी में समान SHA1 कोड हो सकते हैं। यह दो रिपॉजिटरी को स्वतंत्र रूप से बनाने की अनुमति देता है और फिर बाद में एक रिपॉजिटरी में एक आम पेड़ के साथ एक एकल पेड़ में विलय कर दिया जाता है।
उदाहरण
# Create thesis repository.
# Merge existing chess repository branch into it
mkdir single_repo_for_thesis_and_chess
cd single_repo_for_thesis_and_chess
git init
touch .gitignore
git add .gitignore
GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01:T01:01:01' git commit -m empty
git tag EMPTY
echo "the meaning of meaning" > thesis.txt
git add thesis.txt
git commit -m "Wrote my PH.D"
git branch -m master thesis
# It's as simple as this ...
git remote add chess ../chessrepository/.git
git fetch chess chess:chess
परिणाम

प्रति परियोजना उपनिर्देशिका का उपयोग करें?
यदि आप फ़ाइलों को रखने के बजाय संभव हो तो अपनी परियोजनाओं को उपनिर्देशिकाओं में रखने में मदद कर सकते हैं
chess.prog
philosophy_doctorate.txt
है
chess/chess.prog
thesis/philosophy_doctorate.txt
इस मामले में आपकी अनट्रैक सॉफ्टवेयर फ़ाइल होगी chess/untracked_software_file.prog। thesisनिर्देशिका में काम करते समय आपको अनट्रैकड शतरंज प्रोग्राम फ़ाइलों से परेशान नहीं होना चाहिए, और आपको ऐसे अवसर मिल सकते हैं जब आप अन्य प्रोजेक्ट्स से अनट्रैक्ड फ़ाइलों को हटाए बिना खुशी से काम कर सकते हैं।
साथ ही, यदि आप अन्य प्रोजेक्ट्स से अनटैक की गई फाइल्स को हटाना चाहते हैं, तो अनचाहे डायरेक्टरी को डंप करने की अपेक्षा अनचाहे डायरेक्टरी को डंप करने के लिए यह क्विक (और कम त्रुटि वाला) होगा।
शाखा नामों में '/' अक्षर शामिल हो सकते हैं
इसलिए आप अपनी शाखाओं का नाम कुछ इस तरह रखना चाहते हैं
project1/master
project1/featureABC
project2/master
project2/featureXYZ