৮.৪ গিট কাস্টমাইজ করা – একটি নমুনা গিট-এনফোর্সড পলিসি
গিট-এনফোর্সড পলিসি
এই অনুচ্ছেদে আপনি এমন একটি গিট ওয়ার্কফ্লো তৈরি করা শিখবেন, যা একটি কাস্টম কমিট মেসেজ ফরম্যাট চেক করে এবং প্রজেক্টে কিছু নির্দিষ্ট ব্যবহারকারীকে কিছু নির্দিষ্ট সাব-ডিরেক্টরি মডিফাই করার পারমিশন দেয়। এছাড়াও আপনি ক্লায়েন্ট স্ক্রিপ্ট তৈরি করবেন যা ডেভলপারকে জানাবে তার পুশ রিজেক্ট করা হয়েছে কিনা এবং সার্ভার সাইড স্ক্রিপ্ট লিখবেন যা এই ধরনের পলিসি বাস্তবায়ন করবে।
যে স্ক্রিপ্টগুলো আমরা দেখাবো তা Ruby দিয়ে লেখা; এর কারণ কিছুটা আমাদের স্বাচ্ছন্দ্যের জন্য, আর Ruby খুবই সহজবোধ্য ভাষা, এমনকি আপনি যদি এটা নাও লিখতে জানেন। যাইহোক, যেকোনো ভাষাই কাজ করবে – গিটের অন্তর্ভুক্ত সব নমুনা হুক স্ক্রিপ্ট Perl বা Bash দিয়ে লেখা, তাই নমুনাগুলোতে ঐসব ভাষায় হুকের অনেক উদাহরণ দেখতে পারবেন।
সার্ভার-সাইড হুক
সার্ভার-সাইড হুকগুলো hooks ডিরেক্টরির ভিতর update ফাইলে থাকে। পুশ করা প্রত্যেকটি ব্রাঞ্চের জন্য update হুকটি একবার চলবে এবং এটা তিনটি আর্গুমেন্ট নেয়ঃ
- পুশ করা রেফারেন্সের নাম
- ব্রাঞ্চের পুরাতন রিভিশন
- যে নতুন রিভিশন পুশ করা হয়েছে
যদি SSH দিয়ে পুশ করা হয়, তাহলে যে ব্যবহারকারী পুশ করেছে তার তথ্য এক্সেস করতে পারবেন। যদি আপনি সবাইকে public-key অথেনটিকেশন এর মাধ্যমে একটি নির্দিষ্ট ব্যবহারকারী হিসেবে (যেমন “git” ) কাজ করার সুযোগ দিয়ে থাকেন, তাহলে আপনাকে একটি shell wrapper দিতে হবে, যা public key দিয়ে নির্ধারণ করবে, কোন ব্যবহারকারীটি সংযুক্ত আছে, এবং সেভাবে একটি এনভায়রনমেন্ট ভ্যারিয়েবল সেট করতে হবে। এখানে আমরা ধরে নিচ্ছি সংযুক্ত ব্যবহারকারীটি $USER এনভায়রনমেন্ট ভ্যারিয়েবলএ আছে, প্রয়োজনীয় সকল তথ্য দিয়ে আপডেট স্ক্রিপ্টটি এভাবে শুরু হয়ঃ
#!/usr/bin/env ruby
$refname = ARGV[0]
$oldrev = ARGV[1]
$newrev = ARGV[2]
$user = ENV['USER']
puts "Enforcing Policies..."
puts "(#{$refname}) (#{$oldrev[0,6]}) (#{$newrev[0,6]})"
এগুলো গ্লোবাল ভ্যারিয়েবল। চিন্তা করার কিছু নেই, এগুলো এভাবে দেখানোই ভাল।
নির্দিষ্ট ফরম্যাটের কমিট-মেসেজ প্রবর্তন
আপনার প্রথম চ্যালেঞ্জ হল প্রতিটি কমিটের মেসেজের একটি নির্দিষ্ট বিন্যাস মেনে চলে তা প্রয়োগ করা।শুধু একটি টার্গেট রাখার জন্য, ধরে নিন যে প্রতিটি বার্তাকে একটি স্ট্রিং অন্তর্ভুক্ত করতে হবে যা “`রেফ: ১২৩৪`” এর মতো দেখায় কারণ আপনি প্রতিটি কমিট আপনার টিকিটিং সিস্টেমে একটি কাজের আইটেমের সাথে লিঙ্ক করতে চান। আপনাকে অবশ্যই পুশ আপ করা প্রতিটি কমিটের দিকে তাকাতে হবে, সেই স্ট্রিংটি কমিট মেসেজে আছে কিনা তা দেখতে হবে এবং, যদি কোনো কমিট থেকে স্ট্রিংটি অনুপস্থিত থাকে, তাহলে নন-জিরো থেকে প্রস্থান করুন যাতে পুশ প্রত্যাখ্যান করা হয়।