मैंने एसडीके लॉन्च के बाद से पूरे समय iPhone अनुप्रयोगों पर काम किया है, उस समय का अधिकांश समय कई डेवलपर्स के साथ टीमों पर काम करने में बिताया।
सच्चाई यह है कि यह .pbxproj फ़ाइल को मर्ज करने में मदद करने से अधिक हानिकारक है। जैसा कि आप कहते हैं, जब आप एक फ़ाइल जोड़ते हैं जब तक कि अन्य लोगों को वह फ़ाइल नहीं मिलती है, तो उन्हें इसे अपनी परियोजना में भी जोड़ना होगा - किसी भी आकार के आवेदन में, यह बेकार है और इसमें स्रोत कोड नियंत्रण का एक बड़ा लाभ भी है वास्तव में सिर्फ git के माध्यम से एक पूर्ण पहले परियोजना की स्थिति में वापस नहीं आ सकता है।
.Pbxproj फ़ाइल बस एक संपत्ति सूची (XML के समान) है। अनुभव से, बस केवल मर्ज संघर्ष के बारे में आप कभी भी मिल रहे थे यदि दो लोगों ने एक ही समय में फाइलें जोड़ी हैं। मर्ज संघर्ष मामलों के 99% में समाधान मर्ज के दोनों किनारों को रखने के लिए है, जो कम से कम बस के लिए किसी भी >>>>, <<<<, और ==== लाइनों को हटाने शामिल है। वास्तव में यह इतना सामान्य है कि मैंने git से एक मर्ज अवस्था में .pbxproj फ़ाइल को ठीक करने के लिए एक सरल शेल स्क्रिप्ट बनाई है, मैं इसे प्रोजेक्ट डायरेक्टरी के भीतर (क्लासेस स्तर पर) से चलाता हूं:
#!/bin/sh
projectfile=`find -d . -name 'project.pbxproj'`
projectdir=`echo *.xcodeproj`
projectfile="${projectdir}/project.pbxproj"
tempfile="${projectdir}/project.pbxproj.out"
savefile="${projectdir}/project.pbxproj.mergesave"
cat $projectfile | grep -v "<<<<<<< HEAD" | grep -v "=======" | grep -v "^>>>>>>> " > $tempfile
cp $projectfile $savefile
mv $tempfile $projectfile
सबसे खराब स्थिति यदि यह विफल हो जाता है (आप XCode को प्रोजेक्ट लोड करने के लिए कहते हैं और यह लोड करने में विफल रहता है), तो आप बस .pbxproj फ़ाइल को हटा दें, मास्टर को गिट से जांचें, और अपनी फ़ाइलों को फिर से जोड़ें। लेकिन मैं इस स्क्रिप्ट के साथ कई महीनों के उपयोग में कभी नहीं हुआ, फिर से कई अन्य डेवलपर्स के साथ iPhone अनुप्रयोगों पर पूर्णकालिक काम कर रहा हूं।
एक अन्य विकल्प (नीचे टिप्पणियों में इंगित किया गया है) जिसे आप स्क्रिप्ट के स्थान पर उपयोग करने का प्रयास कर सकते हैं, इस पंक्ति को .gitattributven फ़ाइल में जोड़ना है:
*.pbxproj text -crlf -diff -merge=union
फिर git हमेशा .pbxproject फ़ाइलों के लिए एक मर्ज के दोनों किनारों को ले जाएगा, उसी स्क्रिप्ट के समान प्रभाव वाले जो मैंने बिना किसी अतिरिक्त काम के प्रदान किए।
अंत में, यहाँ मेरी पूरी .gitignore फ़ाइल है, जो दिखाती है कि मैंने इसे अनदेखा करने के लिए सेट कर दिया है क्योंकि कुछ चीजें हैं जो आप नहीं चाहते हैं - मेरे मामले में वास्तव में अवशेष और पूरे बिल्ड निर्देशिका को खाली करता है:
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile