এসডিকে আরম্ভ হওয়ার পর থেকে আমি আইফোন অ্যাপ্লিকেশনগুলিতে পুরো সময় কাজ করেছি, বেশিরভাগ সময় একাধিক বিকাশকারীদের নিয়ে দলগুলিতে কাজ করে।
সত্যটি হ'ল এটি .pbxproj ফাইলটি সহায়তার চেয়ে মার্জ করার অনুমতি না দেওয়ার পক্ষে আরও ক্ষতিকর। যেমন আপনি বলেছেন, আপনি যখন ফাইল যুক্ত করেন তবে অন্য লোকেরা সেই ফাইলটি না পেলে তাদের প্রজেক্টে এটি যুক্ত করতে হয় - যে কোনও আকারের প্রয়োগে, এটি সফল হয় এবং এটি আপনার উত্স কোড নিয়ন্ত্রণের একটি বিশাল সুবিধাও হরণ করে গিটের মাধ্যমে সত্যিই কোনও পূর্ববর্তী প্রকল্পের রাজ্যে ফিরে যেতে পারে না।
.Pbxproj ফাইলটি কেবল একটি সম্পত্তি তালিকা (এক্সএমএলের অনুরূপ)। অভিজ্ঞতা থেকে, কেবলমাত্র একত্রীকরণের দ্বন্দ্বটি আপনি কখনই পেয়েছিলেন যদি দুটি ব্যক্তি একই সাথে ফাইল যুক্ত করে। মার্জ সংঘাতের মামলার 99% সমাধান হ'ল মার্জ উভয় পক্ষের রাখা, যা গিটের জন্য কমপক্ষে কোনও >>>>, <<<< এবং ==== লাইন অপসারণের অন্তর্ভুক্ত। আসলে এটি এত সাধারণ যে আমি গিট থেকে একীভূত অবস্থায় একটি .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
সবচেয়ে খারাপ ক্ষেত্রে যদি এটি ব্যর্থ হয় (আপনি এক্সকোডটিকে প্রকল্পটি লোড করতে বলেন এবং এটি লোড করতে ব্যর্থ হয়), আপনি কেবল .pbxproj ফাইলটি মুছুন, গিট থেকে মাস্টারটি পরীক্ষা করে দেখুন এবং আপনার ফাইলগুলি পুনরায় যুক্ত করুন। তবে আমি এই স্ক্রিপ্টটি ব্যবহারের অনেক মাসের মধ্যে কখনও কখনও ঘটিনি, আবার বেশ কয়েকটি অন্যান্য বিকাশকারীদের সাথে আইফোন অ্যাপ্লিকেশনগুলিতে পুরো সময় কাজ করে।
আরেকটি বিকল্প (নীচের মন্তব্যে নির্দেশিত) যা আপনি স্ক্রিপ্টের জায়গায় ব্যবহার করতে চেষ্টা করতে পারেন তা হ'ল এই লিঙ্কটি একটি .gitattributes ফাইলে যুক্ত করা:
*.pbxproj text -crlf -diff -merge=union
তারপরে গিট সর্বদা .pbxproject ফাইলগুলির জন্য একত্রীকরণের উভয় পক্ষ গ্রহণ করবে, কেবলমাত্র কোনও অতিরিক্ত কাজ ছাড়াই আমি সরবরাহিত স্ক্রিপ্টের মতোই প্রভাব ফেলব।
শেষ অবধি, এখানে আমার সম্পূর্ণ .gitignore ফাইলটি দেখানো হচ্ছে যা আমি চাই না তা কিছু উপেক্ষা করার মতো সেট আছে যা আপনি চান না - আমার ক্ষেত্রে সত্যই কেবল অবশিষ্টাংশগুলি এবং পুরো বিল্ড ডিরেক্টরিটি ইমেক করে:
# xcode noise
build