সংস্করণ নিয়ন্ত্রণে আপনি কীভাবে মুক্তিপ্রাপ্ত বাইনারি রাখবেন?


14

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


"কোন জিনিসটি পরিবর্তন হয়েছে তা ট্র্যাক করুন" বলতে কী বোঝ? রিলিজ বাইনারিগুলির কোন বৈশিষ্ট্যগুলি আপনি ট্র্যাকিং করছেন (বা হতে চান)? এটি কেবল অদ্ভুত বলে মনে হচ্ছে, তাই আমি কৌতূহলী।
জেরেমি হিলার

উদাহরণস্বরূপ v1.0.0 এবং v1.0.1 এর মধ্যে, কেবলমাত্র ABC.exe পরিবর্তন করা হয়, যখন নির্ভরতা DEF.dll অপরিবর্তিত থাকে

1
বাইনারি দেখে আপনি এটি কীভাবে নির্ধারণ করবেন?
জেরেমি হিলার

একই ফাইলের পুরানো এবং নতুন সংস্করণটির পার্থক্য

উত্তর:


21

দুটি বিকল্প:

ক) না। কেবলমাত্র নিশ্চিত করুন যে আপনার পুনরুত্পাদনযোগ্য ডিটারমিনিস্টিক বিল্ড রয়েছে, অর্থাৎ একই কনফিগারেশন দিয়ে একই উত্স নিয়ন্ত্রণ পুনর্বিবেচনা তৈরি করা সর্বদা সঠিক একই বাইনারি তৈরি করে।

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

যে কোনও উপায়ে, বাইনারি এবং অন্যান্য বিল্ড আউটপুট বিভিন্ন কারণে উত্স নিয়ন্ত্রণের অন্তর্ভুক্ত নয়।


7
ক) প্রায়ই অবশ্যই সম্ভব নয় blogs.msdn.com/b/ericlippert/archive/2012/05/31/...
জে।

@ জে কে: দুর্দান্ত লিঙ্ক। আমার ধারণা বিল্ড স্টেজের জন্য সোর্স কোড এবং সমস্ত ইনপুট ফাইলগুলি সম্পূর্ণরূপে উত্স নিয়ন্ত্রণের অধীনে রয়েছে (এবং সঠিক সংকলক সংস্করণ ইনস্টল করা) অনেকগুলি বাস্তব-জগতের পরিস্থিতিতে "যথেষ্ট পরিমাণে নির্বাহী" হতে পারে (এবং অন্যদের পক্ষে যথেষ্ট নয় অবশ্যই) )। এটি পুনরুত্পাদনযোগ্য বাইনারিগুলি বিট-বিট করা কতটা গুরুত্বপূর্ণ তা নির্ভরশীল case
ডক ব্রাউন

10

বাইনারিগুলির জন্য একটি আর্টিক্ট রিপোজিটরি ব্যবহার করুন, কোনও সংস্করণ নিয়ন্ত্রণ ব্যবস্থা নয়। একটি প্রকাশিত বাইনারিটির একটি নির্দিষ্ট সংস্করণ সময়ের সাথে সাথে পরিবর্তিত হওয়ার কথা নয়, সুতরাং ফাইল (গুলি) পরিবর্তন না হওয়ায় সংস্করণ নিয়ন্ত্রণটি বোঝায় না।

উদাহরণস্বরূপ আর্কাইভ / প্রকাশ / অফার রিলিজ এবং অন্যান্য বাইনারি (যেমন ডকুমেন্টেশন) এর সংগ্রহশালা হিসাবে মেভেন সংগ্রহস্থলগুলি দেখুন


একটি প্রকাশিত উত্স ফাইলের একটি নির্দিষ্ট সংস্করণ সময়ের সাথে সাথে পরিবর্তনেরও কথা নয়। পাঠানো বাইনারি লাগানোর জন্য এসসিএম হ'ল একটি দুর্দান্ত জায়গা, আপনি কেবল এটি তৈরি করতে ব্যবহৃত উত্স ফাইলগুলির পাশাপাশি এটি সংরক্ষণ করেন।
gbjbaanb

2
gbjbaanb, এসসিএম এর অর্থ "উত্স নিয়ন্ত্রণ নিয়ন্ত্রণ"। এটি যে কাউকে একটি ইঙ্গিত দেয় যে এই সিস্টেমগুলি বাইনারিগুলি সংরক্ষণের জন্য নয় তবে উত্স হিসাবে তৈরি করা হয়েছে। আপনি যদি এখনও বাইনারি সঞ্চয় করতে চান তবে এগিয়ে যান। আমি করব না।
মহল্লার

4
এসসিএম মানে "সফটওয়্যার কন্ট্রোল ম্যানেজমেন্ট" তবে দুর্দান্ত চেষ্টা। "সোর্স কোড" প্রায়শই কেবল টেক্সট ফাইল নয়, চিত্র, নথি, ডায়াগ্রাম ইত্যাদি
gbjbaanb

সাধারণত, "সফ্টওয়্যার কনফিগারেশন ম্যানেজমেন্ট।" "সফটওয়্যার কন্ট্রোল ম্যানেজমেন্ট" এর কথা আমি কখনও শুনিনি।
জেমস ম্যাকলিউড 23

7

কেবল এগুলি প্রবেশ করুন unless এতে কোনও সমস্যা নেই, যদি না আপনি গিট ব্যবহার করেন (যা বাইনারিগুলি ভালভাবে মার্জ করে না, তাই আপনাকে সেগুলি নিজেই পরিচালনা করতে হবে) বা আপনি তাদেরকে অনেকবার প্রতিশ্রুতিবদ্ধ করছেন (কেবল তখনই প্রতিশ্রুতি করুন যখন এটি হয় জাহাজে প্রস্তুত, আপনি এটি তৈরির সময় নয়)।

বেশিরভাগ এসসিএম-এর ডেল্টা বাইনারিগুলি বেশ ভাল, আমরা আমাদের এসভিএন-তে একটি 2 এমবি রিসোর্স ডেল রাখতাম এবং এটি প্রতিবার কয়েক কেবিতে ডেল্টা দিত।

আমি অনেক আর্গুমেন্ট শুনেছি যে এসসিএমগুলি উত্সের জন্য, বাইনারি নয় তবে এটি স্পষ্টতই মিথ্যা হয় যখন আপনি বেশিরভাগ সফ্টওয়্যার ইমেজ সমন্বিত বিবেচনা করেন, এমনকি যদি তারা কেবল আইকন ফাইল হয়। এগুলি বাইনারি, তবে তারা উত্সের অংশ, তাই এগুলিতে রাখুন এবং এ সম্পর্কে এতটা কৌতূহলযুক্ত না হন। আমি আরও শুনেছি যে প্রয়োজনের সময় আপনি কেবল বাইনারি পুনর্নির্মাণ করতে পারেন, প্রায়শই এটি হয় তবে এটি সক্রিয়ভাবে সমর্থিত নয় এমন পুরানো সিস্টেমগুলির জন্য এটি একটি বিশাল সময়-অপচয় প্রচেষ্টা হতে পারে। আপনার যদি 3 বছর আগে বাইনারি তৈরিতে ব্যবহৃত সিস্টেমের সাথে যোগাযোগের জন্য কেবলমাত্র পুরানো সার্ভিস প্যাক বা প্যাচগুলি সহ একটি সিস্টেম পুনরায় তৈরি করতে হয় তবে আপনি খুশি হবেন যে আপনি তখন আপনার এসসিএম-এ বিনটি যুক্ত করেছিলেন।

আপনার এসসিএম-তে বিল্ড যুক্ত করার বিষয়ে আপনাকে কেবল একবার চিন্তা করার দরকার যদি আপনি বিল্ড সার্ভার প্রক্রিয়াটির অংশ হিসাবে এটি স্বয়ংক্রিয়ভাবে করছেন - এটি করবেন না। আপনি আপনার এসসিএমটি এমন বিল্ডগুলিতে পূরণ করবেন যার কোনও লাভ নেই। পরিবর্তে কেবল এগুলি যুক্ত হলে তাদের ছেড়ে দেওয়া হবে। আপনার গ্রাহকের কী আছে তা আপনি ঠিক জানেন এবং তারা যে বাইনারিগুলি ব্যবহার করছেন তার সাথে আপনি যে কোনও গ্রাহক-প্রতিবেদনিত সমস্যাগুলি পুনরুত্পাদন করতে পারেন এবং আপনি যেগুলি পুনর্নির্মাণ করেছেন তা নয় (সংকলক বা ওএসের সর্বশেষ আপডেটগুলি)


1
@ মার্নেনলাইবো-কোসার আপনি স্পষ্টতই দীর্ঘদিন ধরে এই শিল্পে কাজ করেন নি। সময়ের সাথে সাথে পরিবেশের পরিবর্তন তৈরি করুন, যাতে আপনি কোনও পুরানোটিকে পুনর্নির্মাণ করতে পারেন, ডান পুরানো সরঞ্জাম এবং এসডিকে দিয়ে theর্ষা পুনর্নির্মাণের জন্য আপনাকে বেশ কয়েক দিন ব্যয় করতে হবে ces যা আমি আশা করি আপনি সংস্করণ করেছেন ....
gbjbaanb

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

1
@gjbaanb আমি এটাও স্বীকার করব যে আপনি আমার থেকে অন্যরকম উপায়ে অন্যরকম পরিস্থিতিতে আছেন: আমার সমস্ত বাহ্যিক নির্ভরতা ওএসএস, তাই তারা এড়াতে পারবেন না কারণ কিছু সংস্থা তাদের ছেড়ে দেওয়ার উপযুক্ত মনে করে না।
মার্নেন লাইবো-কোসার

1
আমার পয়েন্ট SCMs সবকিছু সঞ্চয় করতে পারবেন, তাই করার কোন প্রয়োজন নেই হয় না তার উৎস থেকে আলাদাভাবে বাইনারি সংরক্ষণ করি। এটি সুবিধাজনক এবং সহজ এবং গ্যারান্টি দেয় যে আপনি কী বছর পরে জানেন। এটি করার কোনও খারাপ দিক নেই। প্রদত্ত যে কোনও রিলিজ নিজেই কেবল একটি নির্দিষ্ট উত্স প্রতিশ্রুতির সাথে সিঙ্ক হয়। আমি সমস্যাটি দেখতে পাচ্ছি না, ব্যতীত কিছু লোক মনে করে এসসিএম মানে কেবল উত্স কোড পাঠ্য। না, এটি প্রায় সব কিছু সঞ্চয় করতে ব্যবহার করুন (কখনও কখনও তারা বিল্ডিংয়ের সরঞ্জাম বা libs যদি তারা বিশাল না হয়), জীবন অনেক সহজ হয়ে যায়।
gbjbaanb

1
@gjbaanb এবং আমার বক্তব্যটি হ'ল আপনি সে সম্পর্কে ভুল। :) অবশ্যই, ভিসিএসগুলি সমস্ত কিছু সংরক্ষণ করতে পারে তবে কেবলমাত্র একটি প্রতিশ্রুতিবদ্ধভাবেই ফাইলগুলি সংরক্ষণ করার জন্য সেগুলি ভালভাবে সেট করা হয় না (সর্বোপরি, আপনি আরপি 50 এ আরপি 500 তৈরি করতে চান না; এটি কেবল বিভ্রান্তিকর হবে) । রেপোতে বিল্ড আর্টফিটগুলি সংরক্ষণের মূল সমস্যাটি এটি নয় যে তারা বাইনারি , তবে তারা ডেটা প্রাপ্ত এবং একই রেপোতে তাদের উত্সের সাথে সিঙ্কের বাইরে চলে যাবে। আমি যে একই যুক্তি ব্যবহার করছি তা উত্পন্ন পাঠ্য ফাইলগুলিতে প্রযোজ্য।
মার্নেন লাইবো-কোসার

5

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

রিলিজের মধ্যে পরিবর্তনগুলি ট্র্যাক করার জন্য, আমি মুক্তির সংস্করণ নম্বর সহ আমার সংস্করণ নিয়ন্ত্রণ সিস্টেমে রিলিজগুলি ট্যাগ বা লেবেল করব। তবে এটি কেবলমাত্র উত্স ফাইলগুলি বাইনারিগুলি নয়, ট্র্যাক করার জন্য। বাইনারিগুলি বিল্ডের নিদর্শন এবং সংস্করণ নিয়ন্ত্রণে থাকা প্রয়োজন হয় না।


1

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

এটি নিয়মিতভাবে প্রকাশিত বাইনারিগুলিকে ভান্ডারগুলিতে প্রকৃতপক্ষে বাইনারিগুলি সংরক্ষণ না করেই সংগ্রহস্থলের সামগ্রীর সাথে যুক্ত করে।

উদাহরণস্বরূপ, আপনি যদি এসভিএন ব্যবহার করছেন তবে শাখা-প্রধান সাংগঠনিক স্কিম ব্যবহার করুন; / ট্রাঙ্কে সমস্ত দিন-দিন বিকাশ করুন এবং এটি প্রস্তুত হয়ে গেলে প্রতিটি প্রকাশের জন্য একটি / ট্যাগ তৈরি করুন।

ট্যাগগুলি এবং ট্রাঙ্ক থেকে তৈরি করতে আপনার সিআই সিস্টেমটি কনফিগার করুন এবং এটিকে এমন একটি ডিরেক্টরি ডিরেক্টরিতে আউটপুট লিখতে পান যার কাঠামোটি রেপোর শীর্ষ স্তরের কাঠামোটি আয়না করে:

  • / তৈরী করে / ট্রাঙ্ক / [Rev] [তারিখ] [build_id] /
  • / তৈরী করে / ট্যাগ / release_0_1_3beta4 / [Rev] [তারিখ] [build_id] /

বিল্ড সিস্টেমে / বিল্ডস / ট্রাঙ্ক / ডিরেক্টরিটিকে একটি বিজ্ঞপ্তি বাফারের মতো আচরণ করতে হবে , শেষ এন বিল্ডগুলি সংরক্ষণ করে, পুরানো বিল্ডগুলি যেমন যায় তেমন মুছে ফেলা হয়।

/ তৈরী করে / ট্যাগ / ডিরেক্টরির অন্যদিকে, একটি স্থায়ী দোকান হয়। বিল্ড শিল্পকর্মগুলি নিজেরাই ডিরেক্টরিতে নিম্নলিখিত স্কিম অনুযায়ী উত্পন্ন নাম সহ সংরক্ষণ করা হয়:

  • [Rev] [তারিখ] [build_id]

যেখানে [Rev] SVN পুনর্বিবেচনা আইডি নয়, [DATE] YYYYMMDD ফর্ম্যাট তারিখ, এবং [build_id] অগ্রে প্রথম বিল্ড থেকে বৃদ্ধিশীল, একটি 3 অঙ্ক অনন্য কাউন্টার, প্রতিটি বিল্ড ডিরেক্টরি অনন্য করে।

উপরে বর্ণিত প্রক্রিয়াটি আপনাকে নিম্নলিখিত সুবিধাগুলি দেয়:

  1. বিল্ড আর্টিক্টসগুলি উত্সটি উত্পন্ন করে এমন পদ্ধতিতে বাঁধা থাকে যা আপনি কোনও নির্দিষ্ট বিল্ড আর্টিক্টের উত্স খুব সহজেই খুঁজে পেতে পারেন (এবং বিপরীতে)।

  2. এটি আরও রিলিজ অটোমেশনের জন্য ভিত্তি গঠন করে। উদাহরণস্বরূপ, মুক্তির দস্তাবেজগুলির স্বয়ংক্রিয় উত্পন্নকরণ ...

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