গিতে মাল্টি-জিবি এসভিএন রেপো সরানো হচ্ছে


13

বর্তমানে আমার সংস্থার একটি এসভিএন রেপোতে একটি ভিজ্যুয়াল স্টুডিও সলিউশন রয়েছে যা নিম্নলিখিত হিসাবে সংগঠিত হয়েছে:

SolutionFolder (~3.5 GB)
|-> SolutionName.sln
|-> .. Some source code folders... (~250 MB)
|-> ThirdParty (~3 GB)
|-> Tools
    | -> Tool1
    | -> Tool2

Tool1 এবং Tool2 স্বতন্ত্রভাবে বিল্ড করা হয় (তাদের নিজস্ব সমাধান রয়েছে), তবে মূল নির্মানে ব্যবহৃত এক্সিকিউটেবলের উত্পাদন করুন। থার্ডপার্টি ফোল্ডারে প্রকল্পের সমস্ত নির্ভরতা রয়েছে, কিছু প্রাক-সংকলিত 100+ এমবি .লিব ফাইল এবং বুস্টের মতো বড় লাইব্রেরি সহ।

এটি সমস্ত একটি এসভিএন রেপোতে রাখা সুবিধাজনক যাতে (1) বিকাশকারীকে কেবল একটি মাত্র চেক-আউট করতে হয়, এবং (২) আমাদের বিল্ডের প্রতিটি সংস্করণের জন্য নির্ভরশীলতার কোন সংস্করণগুলি প্রয়োজন তা ট্র্যাক করার দরকার নেই। ফ্লিপ দিকে, এই রেপোটি পরীক্ষা করতে কিছুক্ষণ সময় নেয়।

এই প্রকল্পের কাঠামোটি গিটে স্থানান্তর করার সর্বোত্তম উপায় কী হবে? সম্ভবত থার্ডপার্টি এবং সম্ভাব্য সরঞ্জামগুলি মূল রেপো থেকে বাদ দেওয়া ভাল তবে আমরা তৃতীয় পক্ষকে এক ধাপে সহজেই ডাউনলোডযোগ্য করে রাখতে চাই এবং আমাদের এটির সংস্করণ (এবং মূল রেপো এবং থার্ডপার্টি / সরঞ্জামগুলির মধ্যে সংস্করণ মিল নেই) ভাল লাগে।

এই মুহুর্তে আমি ইতিহাস সংরক্ষণে আগ্রহী নই, কেবল এই জাতীয় প্রকল্পটি কীভাবে সংগঠিত করব তা নির্ধারণের মধ্যে।


ইতিহাস সহ os আকারগুলি কি রেপোসের মধ্যে রয়েছে বা স্থানীয় ওয়ার্কিং কপির সেই আকারগুলি কি?
ডক ব্রাউন

1
@ ডকব্রাউন শুধুমাত্র স্থানীয় ওয়ার্কিং কপি, ইতিহাস অন্তর্ভুক্ত করে না।
ik

উত্তর:


10

কাজের জন্য উপযুক্ত সরঞ্জামটি ব্যবহার করুন। উইন্ডোজে, এর অর্থ

তৃতীয় পক্ষের নির্ভরতার জন্য নিউগেট ব্যবহার করুন

এইভাবে, আপনি তৃতীয় পক্ষের নির্ভরতাগুলি ভার্সনযুক্ত উপায়ে রাখুন, তবে আপনি আপনার সংগ্রহশালা বিনা শৃঙ্খলাতে ফেটে যাবেন না। চেকআউটগুলি অনেক দ্রুত হয় এবং প্রকল্পটি যেমনটি হওয়া উচিত তেমনি সংগঠিত হয়। আপনি ভিজুয়াল স্টুডিওতে একটি বিকল্প সক্ষম করতে পারেন যাতে এটি সর্বদা সমস্ত নির্ভরতা স্বয়ংক্রিয়ভাবে ডাউনলোড হয়।

অবশ্যই আপনি একটি সমাধান ব্যবহার করতে পারেন যা কেবল গিট ব্যবহার করে (অন্য রেপো, সাবমডিউলগুলি ইত্যাদি), তবে এটি কেবল হ্যাক্স। এটি সঠিকভাবে করলে তা দ্রুত পরিশোধ হয়ে যাবে এবং আপনাকে ভবিষ্যতের প্রুফ সিস্টেমের সাথে ছেড়ে দেবে।

মন্তব্যের পরে সম্পাদনা করুন: নুগেট ব্যবহারের সর্বোত্তম উপায় হ'ল একটি ভাগ করা ড্রাইভ, বা একটি সম্পূর্ণ নুগেট সার্ভারে স্থানীয় নুগেট উত্স সেটআপ করা। সেটআপটি কোনওভাবেই কয়েক মিনিটের বেশি সময় নেওয়া উচিত নয়। এইভাবে, আপনি গ্যারান্টি দিতে পারেন যে আপনার প্রয়োজনীয় সমস্ত প্যাকেজগুলি সর্বদা উপলব্ধ,


নিউগেট কি কমান্ড লাইন তৈরি করে? আমি সর্বদা একটি পোর্টেবল বিল্ডের সন্ধান করি যা জেনকিন্সকে আমার জন্য তৈরি এবং পরীক্ষার জন্য পেতে পারি। নুগেট জেনকিনসের মতো সিআই সার্ভারকে সমর্থন করে?
চাচা

আরও একবার চিন্তাভাবনা, আপনার পণ্যকে আর কতক্ষণ সমর্থন করা দরকার? যদি আপনাকে খুব দীর্ঘ সময়ের জন্য সমর্থন সরবরাহের প্রয়োজন হয় তবে আমি আপনার তৃতীয় পক্ষের লাইবসের সঠিক সংস্করণটি নুগিতে উপলভ্য করতে পারব না। আপনি এখন থেকে 2-3 বছর পরেও তৃতীয় পক্ষের সরঞ্জামগুলির সঠিক সংমিশ্রণ পেতে নুগেটের মতো সরঞ্জামগুলিতে নির্ভর করে খুব বড় সমস্যার মধ্যে পড়তে পারেন।
চাচা দিন

3
@ আনকলটল: হ্যাঁ, নুগেটের একটি সম্পূর্ণ কমান্ড লাইন ইন্টারফেস রয়েছে। এবং ধারণাটি হল একটি স্থানীয় নুগেট সংগ্রহস্থল সেটআপ করা, যা কেবলমাত্র একটি নেটওয়ার্ক শেয়ারের ফোল্ডার হতে পারে ("ফিড" নামে পরিচিত, ডকস.নোজেট.আর / ডকস / ক্রিয়েটিং- প্যাকেজস /… )
ডক ব্রাউন

হ্যাঁ, আমি অবশ্যই ধরে নিয়েছি যে আপনি একটি স্থানীয় আয়না ব্যবহার করেন। আমি উত্তর আপডেট করব।
উইলবার্ট

2
@ কিন্ত বাহ্যিক নির্ভরতার জন্য নুগেট প্যাকেজগুলি তৈরি করা বেশ সহজ এবং সোজা-এগিয়ে রয়েছে। আমার আগে 50 দিন আগে 9 টি নির্ভরতা প্যাকেজ করতে প্রায় অর্ধেক দিন প্রয়োজন ছিল done
উইলবার্ট

5

আপনি সরঞ্জামগুলির জন্য সাবমডিউলগুলি ব্যবহার করতে পারেন । সেভাবে আপনি এখনকার মতো তাদেরকে একটি উপ-ডিরেক্টরিতে রাখতে পারেন এবং তাদের সংস্করণ করার জন্য একটি পৃথক রেপো ব্যবহার করতে পারেন। এর অর্থ হ'ল আপনি সরঞ্জামগুলি ক্লোন করতে (চেকআউট) করতে এবং সেগুলি পৃথকভাবে বিকাশ করতে পারবেন এবং অন্যান্য প্রকল্পগুলি rep ভবনের উপর নির্ভর করতে পারে - এবং সেগুলির নির্দিষ্ট, যুগোপযোগী সংস্করণগুলিতেও।

আপনি তৃতীয় পক্ষের গ্রন্থাগারগুলির জন্য সাবমডিউলগুলিও ব্যবহার করতে পারেন, তবে যদি সম্ভব হয় তবে আমি তাদের জন্য নির্ভরতা ব্যবস্থাপক ব্যবহার করার পরামর্শ দেব।


4

আপনি গিট সংগ্রহস্থলগুলিতে পরিণত হওয়া সত্তাগুলি হ'ল সেই সংস্করণগুলি যা আপনার সংস্করণ এবং শাখা করে; যদি SolutionFolder/Tools/Tool1এই জাতীয় কোনও জিনিসের সাথে মিলে যায় তবে তা সত্তার স্তর। এটি কারণ, গিট ডিরেক্টরি গাছের পুরো রাজ্যটিকে সংস্করণযোগ্য সত্তা হিসাবে বিবেচনা করে, যখন এসএনএন দিয়ে এটি সম্ভব (এমনকি একটি ভাল ধারণা নাও) থাকতে পারে trunk, branchesএবং tagsগাছের মধ্যে কোথাও।

উত্সকৃত নিদর্শনগুলি সংরক্ষণাগারে রাখা উচিত নয়, বা বাহ্যিক গ্রন্থাগারগুলিও রাখা উচিত নয়। সেগুলি পরিচালনা করার আরও ভাল উপায় আছে। (আপনি যদি জাভা নিয়ে কাজ করছেন তবে একটি বেসরকারী মাভেন সংগ্রহশালা ব্যবহার করার কথা বিবেচনা করুন; তারা তুলনামূলকভাবে কাজ করা সহজ এবং অন্যান্য অনেক কিছুর সাথে সুন্দরভাবে সংহত করে))

যদি আপনি এমন ওয়ার্কফ্লোতে অভ্যস্ত হন যা চেকআউট স্বাচ্ছন্দ্যের জন্য একটি রেপোতে সমস্ত কিছুতে থাকে তবে পরিবর্তে জিনিসগুলি সেট করে এমন একটি স্ক্রিপ্ট থাকার কথা বিবেচনা করুন।


বাহ্যিক গ্রন্থাগার পরিচালনার জন্য বিকল্পগুলি কী কী? আমরা সি ++ এবং সি # দিয়ে ভিজ্যুয়াল স্টুডিওতে কাজ করি, তাই মাভেন ভাল ফিটের মতো দেখায় না। এখানে মূল সমস্যাটি হ'ল ThirdPartyরেপোতে ফোল্ডারটি থাকা এতটাই সুবিধাজনক, এবং ভাল বিকল্প নিয়ে আসা শক্ত।
ikh

2
@ikh: একটি ভিসুয়াল স্টুডিও পরিবেশে আপনি সাধারণত এই জন্য Nuget, ব্যবহার করেন docs.nuget.org যা ইতিমধ্যেই বনাম 2012 এবং নতুন সংস্করণে অন্তর্ভুক্ত করা হয়।
ডক ব্রাউন

2

সত্যি কথা বলতে কি আমি আপনার সেটআপে কোনও পরিবর্তন করব না। আমরা এখন যা করছি ঠিক এটিই। আমরা যে তৃতীয় পক্ষটি ব্যবহার করি তা হ্যান্ডেল করার জন্য একটি পৃথক গিট সংগ্রহস্থল স্থাপনের সাথে আমি খেলছিলাম তবে আমি মনে করি না যে এটি বহনযোগ্যতার জন্য ব্যয় করতে পারে। এখন যে কোনও বিকাশকারী কোনও ম্যানুয়াল সেটআপ পদক্ষেপ না করে কেবল চেকআউট এবং শুরু করতে পারবেন। এবং আমি যে কোনও বিল্ড সার্ভার / স্লেভ প্রকল্পটি তৈরি করতে পারি। ত্রিপক্ষীয় সরঞ্জামগুলি ভাগ করে নেওয়ার জন্য যদি আপনার একাধিক রেপো না থাকে আমি আপনার বর্তমান সেটআপটি দিয়েই থাকব।

আমি যা ঘুরে দেখলাম তা হল একটি পৃথক রেপোতে তৃতীয় পক্ষের সরঞ্জামগুলি সেট আপ করা। তারপরে আমার কাছে একটি সাধারণ ব্যাচের স্ক্রিপ্ট ছিল একটি sha1 রেফ সহ একটি পাঠ্য ফাইল পড়ে এবং সঠিক সংস্করণটি চেকআউট করে। এটি আমাকে বিভিন্ন প্রকল্পের জন্য বিভিন্ন তৃতীয় পক্ষের সংস্করণ রাখার অনুমতি দেবে। আমি এই ধারণাটি ফেসবুক বাক্স বিল্ড সরঞ্জাম থেকে পেয়েছি। তবে শেষ পর্যন্ত অনেক বিকাশকারী কমান্ড লাইন সরঞ্জামগুলি (এমএস ভিসি শপ এখানে এখানে) ব্যবহার করতে পছন্দ করেন না তাই আমি এই ধারণাটি ছেড়ে দিলাম।

আপনার তৃতীয় পক্ষের লাইবসগুলি যখন আপনার প্রয়োজন হয় (ডুগেট ব্যবহার করে) ডাউনলোড না করার একটি প্রধান কারণ হ'ল যদি আপনার পণ্যটি দীর্ঘ সময়ের জন্য সমর্থন করার প্রয়োজন হয়। আমার শিল্পে, আমাদের কিছু সময় পুরানো সংস্করণগুলির জন্য আপডেটগুলি সরবরাহ করা দরকার যা পুরানো তৃতীয় পক্ষের উপর নির্ভর করে। আমরা কোন লিবিকে আপগ্রেড করতে পারি বা না করতে পারি তা বাছাই করার জন্য আমরা প্রচুর সময় ব্যয় করতে চাই না এবং সেই সংস্করণে ব্যবহৃত লিবগুলি কেবল ব্যবহার করতে পারি। এখন কল্পনা করুন যে আপনি নুগেট, ওফস ব্যবহার করেন ... আপনার প্রয়োজনীয় লাইবটির সর্বশেষ সংস্করণটি 3.98 হয় তবে আপনার 2.0.0 প্রয়োজন ..... আপনার বসকে কীভাবে ব্যাখ্যা করবেন যে আপনাকে সক্ষম হতে পুরানো সংস্করণটি আপগ্রেড করতে 2 মাস ব্যয় করতে হবে তিনি যখন সামান্য পরিবর্তনের প্রত্যাশা করছিলেন তখন সর্বশেষতম libs ব্যবহার করতে!


3
যদিও আমি আপনাকে একটি +1 দিয়েছি, যেহেতু "সমস্ত কিছু যেমন হয় তেমন ছেড়ে দিন" একটি বাস্তববাদী সমাধান, আমি মনে করি "একাধিক রেপো" কেবল সমস্যা নয় be গীটের মতো ডিভিসিএস একাধিক স্থানীয় শাখা রাখতে উত্সাহ দেয় এবং প্রতিটি শাখায় সমস্ত কিছুর সম্পূর্ণ স্থানীয় অনুলিপি করে। সুতরাং এটি স্থানীয় অনুলিপি হিসাবে একাধিকবার একই বড় তৃতীয় পক্ষের লাইব্রেরি (সাধারণত একই সংস্করণ!) হতে পারে। এটি কিছু পরিস্থিতিতে সম্ভব হতে পারে, অন্যথায় আমি ধারণা করতে পারি যে এটি শাখা এবং মার্জিংয়ের কার্যকারিতাতে নেতিবাচক প্রভাব ফেলবে।
ডক ব্রাউন

যতদূর আমি জানি, একটি শাখা গিতে খুব সস্তা অপারেশন যা কেবলমাত্র একটি পয়েন্টার তৈরি করে এবং প্রায় শূন্য স্থান নেয়।
চাচা

1
@ ডকব্রাউন সম্পর্কিত: গিতে "

আমি যদি কিছু মিস না করি তবে শাখাগুলি গিতে "ফ্রি"। আমি কেবলমাত্র আমার .git / রেফস / হেডগুলি পরীক্ষা করেছি এবং সমস্ত শাখা 1KB পাঠ্য ফাইল, .git / লগ / রেফস / হেডে লগগুলি থাকে যেখানে সবচেয়ে বড় মাস্টারটির জন্য 11KB হয় My আমার সাধারণ প্রকল্প কাঠামোটি কোডে প্রায় 500MB, তৃতীয় পক্ষের libs এবং অন্যান্য সরঞ্জাম। আমি একটি শাখা তৈরি করার জন্য
1KB

1
@ মিশেলটি: শাখা শাখাটি নিখরচায় অবশ্যই নিখরচায়, তবে আমি সেই পরিস্থিতিটির সাথে কথা বলছি যেখানে আপনার স্থানীয় ওয়ার্কস্টেশনে সমান্তরালভাবে আপনার বিভিন্ন শাখার একাধিক ওয়ার্কিং কপি রয়েছে। এবং যদি আপনি মূল প্রশ্নের নীচে মন্তব্যগুলি পরীক্ষা করেন, অপিটি 3 গিগাবাইট তৃতীয় পক্ষের সরঞ্জামগুলি ওয়ার্কিং কপির আকার হিসাবে উল্লেখ করছে।
ডক ব্রাউন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.