हमारे पास एन फ़ोल्डरों के साथ एक गिट भंडार है।गिट submodules, gitslave, गिट subtree या एक सरल समाधान
Repo
|-Folder1
|-Folder2
|- ...
|-FolderN
विभिन्न सहयोगियों के साथ हम विभिन्न फ़ोल्डरों को साझा करना चाहते हैं। प्रत्येक सहयोगी को केवल फ़ोल्डरों के अपने अनुमत सबसेट तक पहुंच होनी चाहिए। गिट का उपयोग करके इसे हासिल करने का "अच्छा" तरीका क्या है?
एक उत्तर git submodules
का उपयोग करना था। लेकिन जब मैं इस आलेख को पढ़ता हूं: https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/ मुझे समझ में आया कि git submodules
का उपयोग करते समय आपको समस्याएं नहीं होने के कारण आपको गिट की अच्छी निपुणता (जो हमारे सहयोगियों का मामला नहीं है) की आवश्यकता है।
मैंने gitslave
, और git subtree
जैसे कुछ संभावित विकल्पों के बारे में पढ़ा। gitslave
एक अच्छा समाधान प्रतीत होता था लेकिन अभी भी मेरी राय में एक जटिल समाधान है।
यहाँ मेरी सरल उपाय है और मुझे पता है कि यह कुछ बहुत बुरा कमियां हैं कर सकते हैं अगर चाहते हैं:
प्रत्येक फ़ोल्डर के लिए एक सरल भंडार और रेपो के लिए भंडार -Having। फिर फ़ोल्डर 1 में सभी फाइलें जोड़ें, ..., मुख्य रिपो में फ़ोल्डर एन।
-globalpush स्क्रिप्ट:
function globalpush(){
REPOS="$HOME/Repo/
$HOME/Repo/Folder1
$HOME/Repo/Folder2
$HOME/Repo/Folder3
# ...
$HOME/Repo/FolderN"
#do not show untracked files
git config status.showuntrackedfiles no
read -p "Commit description: " description
for repo in ${REPOS}
do
# if the repo folder exists
if [ -d $repo ]
then
# Go inside the repo
cd $repo
echo "-----PUSHING REPO : "$repo"-----"
#add all modified all deleted TRACKED files
git add -u .
git commit --allow-empty -m "$description"
git push
else
echo "-----COULD NOT FIND : "$repo"-----"
fi
done
#show untracked files again
git config status.showuntrackedfiles normal
}
-globalpull स्क्रिप्ट:
function globalpull(){
REPOS="$HOME/Repo/
$HOME/Repo/Folder1
$HOME/Repo/Folder2
$HOME/Repo/Folder3
# ...
$HOME/Repo/FolderN"
for repo in ${REPOS}
do
# if the repo folder exists
if [ -d $repo ]
then
# Go inside the repo
cd $repo
# pull the modifs.
echo "-----PULLING REPO : "$repo"-----"
git pull
else
echo "-----COULD NOT FIND : "$repo"-----"
fi
done
}
इस समाधान का लाभ हैं:
1 - सरल समाधान है कि हर कोई समझ सकता है।
2 - प्रत्येक फ़ोल्डर के लिए स्वतंत्र रूप से पहुंच अधिकार देने की संभावना।
3 - मुख्य डेवलपर्स (जिनके पास रेपो तक पहुंच है) के लिए रिपोजिटरी रेपो स्वयं निहित है, और इसमें सभी इतिहास शामिल हैं (यदि फ़ोल्डर 1, ..., फ़ोल्डर के भंडारों में कुछ गलत हो जाता है)।
4 - जब कोई मुख्य डेवलपर किसी दिए गए विवरण के साथ प्रतिबद्ध करता है, तो उसी फ़ोल्डर के साथ एक प्रतिबद्धता सभी फ़ोल्डर्स रिपॉजिटरीज़ के लिए बनाई जाएगी, यहां तक कि बिना किसी संशोधन (- खाली-खाली), जो निश्चित रूप से नहीं है सही नहीं है लेकिन मुख्य डेवलपर्स द्वारा सबमिट किए गए संस्करणों को ट्रैक करने में मदद करता है।
संपादित करें:
एक नया आदेश मैं git subrepo
के बारे में पता नहीं था ... हो रहा है
वहाँ है कि मेरी स्क्रिप्ट के लिए कुछ ऐसा ही किसी भी उपकरण है? –
मेरा [अनधिकृत कांटा गिटस्लेव] देखें (https://github.com/joelpurra/gitslave), आशा है कि मूल से अधिक सक्रिय 2.0.2 के बाद से किया गया है। –