এক্সকোডের সাহায্যে গিট কীভাবে ব্যবহার করবেন?


94

আমি কিছুক্ষণের জন্য আইফোন বিকাশকারী হয়েছি এবং আমি সম্প্রতি আমার কর্মপ্রবাহে গিটকে অন্তর্ভুক্ত করছি। আমি এখন পর্যন্ত আমার কর্মপ্রবাহের জন্য http://shanesbrain.net/2008/7/9/using-xcode-wit-git- এ পাওয়া গিট সেটিংস ব্যবহার করেছি।

এই সেটিংগুলি * .pbxprojটিকে মার্জ থেকে বাদ দিতে গিটকে বলে? এটি করার কোনও বাস্তব কারণ আছে? উদাহরণস্বরূপ, যখন আমি প্রকল্পে একটি ফাইল যুক্ত করব এবং উত্সে এগিয়ে চলেছি তখন আমার সহকর্মী বিকাশকারীরা টান দেওয়ার সময় সেই ফাইলটি তাদের এক্সকোড প্রকল্পে যুক্ত হবে না। তারপরে যদি তাদের মধ্যে একটি মুক্তি দেয় তবে এই ফাইলটি অন্তর্ভুক্ত করা যাবে না। আমি কি গিটকে প্রজেক্ট ফাইলের জন্য মার্জগুলি পরিচালনা করতে পারি না? কেন বা কেন এই ফাইলটি মার্জ হওয়া উচিত নয় এবং যখন প্রকল্পে ফাইলগুলি যুক্ত করা হয় তখন পরিস্থিতিটি কীভাবে সঠিকভাবে পরিচালনা করতে হবে?


9
আমি এক্সকোডের সাথে কাজ করি না, তবে * .pbxproj ফাইলগুলি যদি ভিজ্যুয়াল স্টুডিওর * .csproj ফাইলগুলির মতো (কিছু ফাইলের তালিকার একটি তালিকা) থাকে তবে এই সেটিংটি আমার কাছে বোকামি বলে মনে হচ্ছে seems দেখে মনে হচ্ছে যে কেউ এই প্রকল্পে ফাইল যুক্ত করার সময় একত্রীকরণের দ্বন্দ্ব নিয়ে ক্লান্ত হয়ে পড়েছিল এবং ভেবেছিল সবচেয়ে ভাল সমাধান হ'ল সব কিছু সরিয়ে দেওয়া ...
আর মার্টিনহো ফার্নান্দেস

এক্সকোডের সমস্যা (ভিজ্যুয়াল স্টুডিও সম্পর্কে নিশ্চিত নয়) এটি হ'ল .pbxproj ফাইলগুলি সবেমাত্র মানব-পঠনযোগ্য, তাই দ্বন্দ্বগুলি হাতে কলমে সমাধান করার কোনও মানে হয় না।
টম

7
* .pbxproj ফাইলগুলি আসলে বেশ সুন্দরভাবে কাঠামোযুক্ত, আপনার ব্লক প্রান্ত এবং প্রারম্ভিক বিভাগগুলির মধ্যে দীর্ঘ দীর্ঘ প্রসারিত রয়েছে। সংরক্ষণের অনুগ্রহটি হ'ল ফাইলটি খুব ভাল রেখাযুক্ত রেখাগুলি ফেলেছে তাই এটিকে গণ্ডগোল করা খুব সহজ lines লাইনগুলিকে সংশোধন করা এবং অটোমার্জ সাধারণত খুব ভালভাবে কাজ করে। এর অর্থ হ'ল মার্জ ব্লকগুলি সাধারণভাবে বোঝা সহজ - আপনি কয়েকটি সেট সংযুক্ত ফাইলের একপাশে দেখতে পাচ্ছেন, অন্যদিকে ফাইলের বিভিন্ন সেট যুক্ত রয়েছে।
কেন্ডাল হেলস্টেটার জেলনার

উত্তর:


136

এসডিকে আরম্ভ হওয়ার পর থেকে আমি আইফোন অ্যাপ্লিকেশনগুলিতে পুরো সময় কাজ করেছি, বেশিরভাগ সময় একাধিক বিকাশকারীদের নিয়ে দলগুলিতে কাজ করে।

সত্যটি হ'ল এটি .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/*
*.pbxuser
*.mode1v3
*~

# old skool
.svn

# osx noise
.DS_Store
profile

4
আপনি কি আপনার এক্সকোড প্রকল্পের জন্য একটি .gitattributes ফাইল ব্যবহার করেন? এবং আপনার অন্তর্দৃষ্টি জন্য আপনাকে ধন্যবাদ। আমি মনে করি ভবিষ্যতে পিবিএক্সপ্রজ ফাইলগুলি মার্জ করার চেষ্টা করা আরও সহজ হবে।
রিচারিসন

4
আজ অবধি আমরা হয়ে ওঠিনি, যদিও এর কয়েকটি দিক আকর্ষণীয় দেখায় - তবে আমি যাদের সাথে কাজ করেছি তারা উন্নত গিট ব্যবহারকারী হয় নি, এবং অতএব উন্নত বৈশিষ্ট্যগুলির পক্ষে সমর্থন জোরালো নয়।
কেন্ডল হেলস্টেটার জেলনার

4
".Pbxproj ফাইলটি কেবল JSON (এক্সএমএলের অনুরূপ)” " প্রকৃতপক্ষে, এটি একটি ওপেনস্টেপ-ফর্ম্যাটযুক্ত সম্পত্তি তালিকা। জেএসএন হিসাবে একই বুনিয়াদি ধারণা, তবে বাক্য গঠন কয়েকটি জায়গায় পৃথক হয়।
পিটার হোসে

4
আরেকটা জিনিস চেষ্টা - সেট একত্রীকরণ = ইউনিয়ন: stackoverflow.com/questions/2729109/...
কেন্ডাল Helmstetter Gelner

4
আমি পরিবর্তে @KendallHelmstetterGelner আপনার স্ক্রিপ্টের, যা তাদের বিশেষ লাইন সরিয়ে ফেলা হবে চলমান সঙ্গে, আপনার সাথে আপনার .gitattribute আপডেট পারে একমত unionসুইচ: *.pbxproj text/plain -crlf -diff -merge union
বেসি

9

এটি আমার জন্য এক্সকোড 4.6 এবং গিট 1.7.5 এ কাজ করে।

এটি যুক্ত করে গিগাট্রিবিউট ফাইল যুক্ত করুন:

*.pbxproj binary merge=union

আমি এটি অন্য দলের সদস্যের সাথে পরীক্ষা করেছি এবং দুর্দান্ত কাজ করেছি।

থেকে নেওয়া: http://robots.thoughtbot.com/post/33796217972/xcode-and-git-bridging-the-gap


মার্জ = ইউনিয়ন ভাল তবে মার্জপব্যাক্স সরঞ্জামটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
আল্পার

8

সত্যই, বিদ্যমান উত্তরগুলি বিভ্রান্তিমূলক।

আপনি যদি ফাইলগুলি মুছতে বা পুনরায় নামকরণ না করেন , তবে merge=unionকৌশলটি যা বিভিন্ন কমিটের মধ্যে সরাসরি পার্থক্যগুলি সরাসরি সংযুক্ত করে এটি ব্যবহার করা ভাল ধারণা।

তবে, বাস্তব বিশ্বে আমাদের মাঝে মাঝে ফাইলগুলি মুছতে বা পুনরায় নামকরণ করা দরকার। কোনও পরিবর্তন ছাড়াই পার্থক্যগুলি মার্জ করার ফলে এই পরিস্থিতিতে প্রচুর সমস্যা দেখা দেবে এবং এই সমস্যাগুলি সাধারণত "ওয়ার্কস্পেস ইন্টিগ্রিটি - প্রজেক্টটি লোড করা যায়নি" বাড়ে যা আপনাকে এমনকি প্রকল্পটি চালাতে সক্ষম করে না।

আমি এখনও অবধি সেরা সমাধানটি পেয়েছি:

1) প্রকল্পটি ভালভাবে ডিজাইন করুন এবং শুরুতে সমস্ত প্রয়োজনীয় ফাইল যুক্ত করুন, তাই আপনার খুব কমই পরিবর্তন করতে হবে project.pbxproj

2) আপনার বৈশিষ্ট্যগুলি ক্ষুদ্র করুন। কোনও শাখায় খুব বেশি কিছু করবেন না।

3) যে কোনও কারণে, যদি আপনার ফাইলের কাঠামোটি সংশোধন করতে হয় এবং দ্বন্দ্ব পেতে project.pbxprojহয় তবে সেগুলি ম্যানুয়ালি সমাধান করতে আপনার প্রিয় পাঠ্য সম্পাদকটি ব্যবহার করুন। আপনি নিজের কাজগুলিকে ছোট করে তুললে, দ্বন্দ্বগুলি সমাধান করা সহজ হতে পারে।


3

সংক্ষিপ্ত উত্তরটি হ'ল আপনি যদি সেই লাইনটি অন্তর্ভুক্ত .gitattributesনা করেন তবে আপনি সহজেই একটি .pbxproj এর দুটি পরিবর্তিত সংস্করণ মার্জ করতে পারবেন না। গিটকে এটি বাইনারি হিসাবে বিবেচনা করা ভাল।

বিশদ জন্য এখানে দেখুন: গিট এবং pbxproj

আপডেট: গিট বইটি এখনও এই উত্তরটির সাথে একমত হলেও , আমি আর করি না। আমি .pbxprojঅন্যান্য নন-বাইনারি উত্স ফাইলের মতোই আমার সংস্করণটি নিয়ন্ত্রণ করি ।


শোনাচ্ছে আপনি simplejsonসূচকে যাওয়ার পথে ফাইলটি পাঠাতে একটি কমিট ফিল্টার সেট করতে পারেন বা এই জাতীয় কোনও টিডিয়ার। এটি এখনও কাজ করার গ্যারান্টিযুক্ত হবে না।
23-30

4
এটি কোনও JSON ফর্ম্যাট ফাইল নয়। দেখতে অনুরূপ তবে বিস্তারিত অনেক পার্থক্য রয়েছে।
ইওনিল

এটি গিট বইতে এর জেএসওএন বলেছে, তবে মনে হচ্ছে এটি ভুল। git-scm.com/book/ch7-2.html
হুগি

4
ঠিক আছে. .pbxprojফাইলটি আসলে একটি পুরাতন স্টাইলের NeXT / কোকো প্লিস্ট ফাইল যা পুরানো এবং জেএসএনের চেয়ে অনেক আগে সংজ্ঞায়িত হয়েছে এবং এখন অ্যাপল দ্বারা অবহেলিত। (তবে তারা এখনও এটি কয়েকটি জায়গায় ব্যবহার করছেন) বইটিতে ফাইলটি সম্পর্কে উল্লেখ সম্পূর্ণ ভুল। আমি ভোটটি সরিয়ে দিয়েছি কারণ আপনি এটি স্পষ্টভাবে উল্লেখ করেছেন।
eonil

2

আমি পাইথন স্ক্রিপ্ট তৈরি করেছি যা এক্সকোড প্রকল্প ফাইলগুলিতে মার্জ সংঘাতগুলি পরিচালনা করতে পারে।

আপনি যদি এটি চেষ্টা করতে চান তবে আপনি এটি এখানে পরীক্ষা করে দেখতে পারেন: https://github.com/simonwagner/সমpbx

আপনাকে এটি মার্জ ড্রাইভার হিসাবে ইনস্টল করতে হবে, সুতরাং আপনার প্রকল্পের ফাইলে যখন মার্জ সংঘাত হয় তখন এটি স্বয়ংক্রিয়ভাবে কল হয়ে যায় (README.md আপনাকে কীভাবে এটি করতে হবে তা বলবে)।

এটি ব্যবহার তুলনায় অনেক ভালো কাজ করা উচিত merge=unionহিসাবে mergepbxআপনার প্রকল্পের ফাইলের শব্দার্থবিদ্যা বুঝতে পারে এবং এর ফলে সঠিকভাবে বিরোধ সমাধান হবে।

তবে প্রকল্পটি এখনও আলফা আছে, এটি প্রতিটি প্রজেক্ট ফাইল যে এটি আছে তা বোঝার আশা করবেন না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.