গিট হুক স্ক্রিপ্টগুলি কি সংগ্রহস্থলের পাশাপাশি পরিচালনা করা যায়?


335

প্রাক-ফর্ম্যাটিং প্রতিশ্রুতিবদ্ধ বার্তার মতো জিনিসের জন্য আমরা কয়েকটি বেসিক হুক স্ক্রিপ্ট তৈরি করতে চাই যা আমরা সবাই ভাগ করে নিতে পারি। গিটটির জন্য সাধারণত স্ক্রিপ্টগুলি হুক স্ক্রিপ্ট রয়েছে <project>/.git/hooks/। যাইহোক, লোকেরা যখন কোনও ক্লোন করেন এবং সেগুলি সংস্করণ নিয়ন্ত্রিত হয় না তখন এই স্ক্রিপ্টগুলি প্রচার করা হয় না।

প্রত্যেককে সঠিক হুক স্ক্রিপ্টগুলি পেতে সহায়তা করার কি কোনও ভাল উপায় আছে? আমি কি সেই হুক স্ক্রিপ্টগুলিকে আমার রেপোতে সংস্করণ নিয়ন্ত্রিত স্ক্রিপ্টগুলিতে নির্দেশ করতে পারি?


5
একটি ভাল প্রশ্ন। আমি কেবল এটির চেয়ে আরও ভাল উত্তর পেতে চাই (@ মিপাডির কোনও অভিযোগ না থাকলে, আমি কেবল গিটকে আরও স্বয়ংক্রিয় উপায়ে এটি করার উপায় করতে চাইতাম - এমনকি যদি গিট ক্লোন নির্দিষ্ট করে দেওয়া
বিকল্পও ছিল

আমি সম্মত, @ লিন্ডস! তবে সম্ভবত ইচ্ছাকৃতভাবে এই হুকগুলি ভাগ করে নেওয়া সীমাবদ্ধ? আমি মনে করি উইন্ডোজ ব্যবহারকারীদের জন্য জিনিসগুলি অগোছালো হয়ে উঠবে।
ক্রিশ্চিয়ানোম

@ ক্রিশ্চিয়ানোম: এটি বিভিন্ন ধরণের কারণেই অগোছালো হতে পারে এমন বিভিন্ন কারণ রয়েছে ... এবং কখনও কখনও যখন এটি সেখানে রাখা ভাল। আমি কেবল চাই যে কোনও বিকল্প বা এমন কিছু ছিল যা হুকগুলি অনুলিপি করবে। আমার ধারণা আমি গিট-কোর কোডটি একবারে পরীক্ষা করে দেখতে এবং একটি প্যাচ তৈরি করব। :) (অথবা আশাবাদ ব্যক্ত করেন যে অন্য কেউ আছে ... অথবা কার্যসংক্রান্ত সঙ্গে লাইভ mipadi এর উত্তর , বা যাই হোক না কেন।)
lindes

pre-commitপ্রাক-কমিট হুকের জন্য এটি সহজ করে তোলে। কোনও যথেচ্ছ গিট হুক পরিচালনার বিষয়ে ওপি-র প্রশ্নের উত্তর দেয় না, তবে প্রাক-কমিট হুক সম্ভবত কোড মানের উদ্দেশ্যে সবচেয়ে বেশি ব্যবহৃত হয়।
এরিকোসো

উত্তর:


143

তাত্ত্বিকভাবে, আপনি hooksসমস্ত স্ক্রিপ্টগুলির সাহায্যে আপনার প্রকল্প ডিরেক্টরিতে একটি ডিরেক্টরি (বা আপনি যে নামটি পছন্দ করেন) তৈরি করতে পারেন এবং তারপরে সেগুলিকে সিঙ্ক করে .git/hooks। অবশ্যই, রেপো ক্লোন করা প্রতিটি ব্যক্তিকে এই সিমলিংকগুলি স্থাপন করতে হবে (যদিও আপনি সত্যই অভিনব হতে পারেন এবং একটি ডিপ্লয় স্ক্রিপ্ট থাকতে পারে যে ক্লোনার সেগুলি স্বয়ংক্রিয়ভাবে সেট আপ করতে চালাতে পারে)।

* নিক্সে সিমিলিংক করতে, আপনাকে যা করতে হবে তা হ'ল:

root="$(pwd)"
ln -s "$root/hooks" "$root/.git/hooks"

ln -sfআপনি কী এতে ওভাররাইট করতে প্রস্তুত তা ব্যবহার করুন.git/hooks


38
এটি অ-তুচ্ছ ছিল, সুতরাং আমি কীভাবে সঠিকভাবে সিমলিংক
ডেভিড টি।

17
গিট সংস্করণ ২.৯-এ এখন core.hooksPathহুক ফোল্ডারের সাথে লিঙ্ক করার জন্য .git এর বাইরে একটি ফাইল সেট আপ করার জন্য একটি কনফিগার বিকল্প রয়েছে ।
অ্যারন রবিনউইজ

215

ইন গীত 2.9 , কনফিগারেশন বিকল্প core.hooksPathএকটি কাস্টম আঙ্গুলসমূহ ডিরেক্টরির নির্দিষ্ট করে।

আপনার হুকগুলি hooksআপনার সংগ্রহস্থলের একটি ট্র্যাক ডিরেক্টরিতে নিয়ে যান । তারপরে, ট্র্যাকগুলি ব্যবহারের পরিবর্তে সংগ্রহস্থলের প্রতিটি উদাহরণ কনফিগার করুন :hooks$GIT_DIR/hooks

git config core.hooksPath hooks

সাধারণভাবে, পথটি নিখুঁত হতে পারে, বা হুকগুলি সঞ্চালিত ডিরেক্টরিটির সাথে তুলনামূলকভাবে হতে পারে (সাধারণত কার্যকরী গাছের গোড়া; এর বিবরণ বিভাগ দেখুন man githooks)।


15
... এবং হুক ডিরেক্টরিতে নির্দেশ করতে আলাদা হুকের সংগ্রহস্থল হতে পারে;)
রেনি লিঙ্ক

10
আচ্ছা, আপনি যখন গিট ক্লোন করবেন তখন কি এই কনফিগার প্যারামিটার স্বয়ংক্রিয় সেট রয়েছে?
রিং

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

1
দলের কেউ যদি অন্য একটি শাখায় গিট চেকআউট করে? তাদের এটি প্রতিটি শাখায় অন্তর্ভুক্ত করতে হবে ..
জোকারস্টার

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

15

যদি আপনার প্রকল্পটি জাভাস্ক্রিপ্ট প্রকল্প হয় এবং আপনি npmপ্যাকেজ পরিচালক হিসাবে ব্যবহার করতে পারেন গিথগুলি প্রয়োগ ভাগ করা-গিট-হুকnpm install


5
এখন আমি জানি যে কারা হস্তক্ষেপে এই ছদ্মবেশগুলিতে যুক্ত হয়েছে .git/hooks
gavenkoa

সতর্কতা - উইন্ডোজ সমর্থন করে না (যদি না এটি গিট ব্যাশের প্রশাসক হিসাবে চালিত হয়)। সরল সমাধান হ'ল "প্রিনস্টল": প্যাকেজ.জসনের স্ক্রিপ্ট হিসাবে "গিট কনফিগার কোর হুকসপথ হুকস"। অর্থাত্ হুকগুলি এমন একটি ফোল্ডার যেখানে আপনার গিট স্ক্রিপ্টগুলি থাকে।
শেন গ্যানন

8

জন্য Nodejs ব্যবহারকারীদের একটি সহজ সমাধান আপডেট হয় package.json সঙ্গে

{
  "name": "name",
  "version": "0.0.1",
  ......
  "scripts": {
    "preinstall": "git config core.hooksPath hooks", 

ইনস্টল করার আগে চালানো হবে

এনপিএম ইনস্টল

এবং \ হুক্স (বা আপনি যে কোনও নামই চয়ন করুন) ডিরেক্টরিটিতে হুক সন্ধানের জন্য গিটকে পুনর্নির্দেশ করে । এই ডিরেক্টরিটি নকল করা উচিত file । গিট file ফাইলের নাম (বিয়োগ বি। নমুনা) এবং কাঠামোর শর্তাবলী।

কল্পনা করুন মাভেন এবং অন্যান্য বিল্ড সরঞ্জামগুলির মধ্যে प्री ইনস্টল করার সমতুল্য থাকবে ।

এটি সমস্ত প্ল্যাটফর্ম জুড়েও কাজ করা উচিত।

আপনার যদি আরও কোনও তথ্যের প্রয়োজন হয় তবে https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/ দেখুন


5

গিট-হুক সম্পর্কে কীভাবে , এটি .git/hooksপ্রকল্পের ডিরেক্টরিতে স্ক্রিপ্টের দিকে যাত্রা করে githooks

আপনাকে পুরো জায়গা জুড়ে অনুলিপি এবং সিমলিংক হুক সক্ষম করতে সক্ষম করার জন্য প্রচুর বৈশিষ্ট্য রয়েছে।


5

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

উদাহরণ:

https://github.com/rudikershaw/git-build-hook

https://github.com/olukyrich/githook-maven-plugin

https://www.npmjs.com/package/git-hooks


আমি আমার প্রকল্পগুলিতে ব্যবহার করার জন্য জেনারিক উপায়ে তা অর্জন করার চেষ্টা করেছি, তাই আমি এই সরঞ্জামটি লিখেছি: পাইপ.আই.আর
লোভাটো

3

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

মনে রাখবেন যে এটি কোনও সাধারণ সমাধান নয়, কারণ কিছু প্রকল্পের অবশ্যই কিছু নির্মাণের দরকার নেই।


2

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

  1. গোপনীয়তাগুলি মার্জ করে সনাক্ত করুন এবং প্রতিরোধ করুন ।
  2. যথাযথ গিট ব্যবহারকারী কনফিগারেশন প্রয়োগ করুন ।
  3. জিরা টিকিট সংহতকরণ প্রয়োগ করুন - টিকের অনুরোধের নাম / প্রতিশ্রুতি বার্তায় টিকিটের নম্বর উল্লেখ করুন।

এটি আপনার সমস্ত হুক প্রতিস্থাপন করবে না, তবে এটি প্রতিটি বিকাশকারী কম্পিউটার / রেপোতে হুকগুলি ইনস্টল করার কনফিগারেশন নরক ছাড়াই আপনার বিকাশকারীদের সবচেয়ে সুস্পষ্ট বিষয়গুলির সাথে সহায়তা করতে পারে।

দাবি অস্বীকার: আমি ডেটারিসের অন্যতম প্রতিষ্ঠাতা


1

আপনি আপনার হুকস ফোল্ডারটিকে অন্য একটি গিট সংগ্রহস্থল তৈরি করতে পারেন এবং এটিকে একটি সাবমোডিয়ুল হিসাবে সংযুক্ত করতে পারেন ... আমার মনে হয় কেবলমাত্র যদি আপনার অনেক সদস্য এবং হুক নিয়মিত পরিবর্তিত হয়।


1

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

সুতরাং, আপনার লক্ষ্য অর্জনের জন্য আপনি পাইথন বা গো কোড লিখতে পারেন এবং এটি হুকস ফোল্ডারের নীচে রাখতে পারেন। এটি কাজ করবে তবে এটি সংগ্রহস্থলের পাশাপাশি পরিচালনা করা হবে না।

দুটি বিকল্প

ক) বহু লিপি

আপনি আপনার সাহায্যের অভ্যন্তরে আপনার হুকগুলি কোড করতে পারেন, এবং আপনার নিখুঁত স্ক্রিপ্টটি কল করতে, হুকগুলিতে কোডের একটি ছোট্ট টুকরো যুক্ত করতে পারেন:

$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js

খ) একক লিপি

একটি শীতল বিকল্পটি হ'ল কয়েকটি স্ক্রিপ্টের পরিবর্তে সমস্তগুলি শাসন করার জন্য একটি স্ক্রিপ্ট যুক্ত করা। সুতরাং, আপনি একটি হুক / mysuperhook.go তৈরি করেন এবং প্রতিটি হুক আপনি এটি করতে চান তা নির্দেশ করুন।

$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)

প্যারামিটারটি আপনার স্ক্রিপ্ট সরবরাহ করবে যা হুকটি ট্রিগার হয়েছিল এবং আপনি এটি আপনার কোডের মধ্যে আলাদা করতে পারেন। কেন? কখনও কখনও আপনি কমিট এবং ধাক্কা জন্য একই চেক চালাতে চাইবেন, উদাহরণস্বরূপ।

এবং তারপর?

তারপরে, আপনার আরও কার্যকারিতা থাকতে পারে যেমন:

  • প্রতিশ্রুতিবদ্ধ বা ধাক্কা দেওয়ার আগেও সবকিছু ঠিক আছে কিনা তা পরীক্ষা করতে ম্যানুয়ালি হুকটি ট্রিগার করুন। আপনি যদি কেবল আপনার স্ক্রিপ্টকে কল করেন (বিকল্প a বা b) কৌশলটি করবে।
  • সিআই-তে হুকগুলি ট্রিগার করুন, সুতরাং আপনাকে সিআই-র জন্য একই চেকগুলি পুনরায় লেখার দরকার নেই, উদাহরণস্বরূপ এটি কেবল প্রতিশ্রুতি কল করা এবং ট্রিগারগুলিকে ধাক্কা দেওয়া হবে। উপরের মত একই এটি সমাধান করা উচিত।
  • মার্কডাউন বৈধকারক বা একটি ওয়াইএএমএল বৈধকারকের মতো বাহ্যিক সরঞ্জামগুলিকে কল করুন। আপনি সিস্কলগুলি তৈরি করতে পারেন এবং এসটিডিআউট এবং এসটিডিআরআর পরিচালনা করতে হবে।
  • সমস্ত বিকাশকারীদের হুকগুলি ইনস্টল করার সহজ উপায় রয়েছে তা নিশ্চিত করুন, তাই ডিফল্ট হুকগুলি সঠিকগুলির সাথে প্রতিস্থাপনের জন্য একটি দুর্দান্ত স্ক্রিপ্ট সংগ্রহস্থলটিতে যুক্ত করা দরকার
  • কিছু গ্লোবাল সহায়ক রয়েছে যেমন শাখাগুলি বিকাশ এবং মাস্টারকে প্রতিরোধ করার জন্য প্রতিরোধ করার জন্য চেকের মতো, এটি প্রতিটি ভান্ডারে যুক্ত না করে not আপনি বিশ্বব্যাপী স্ক্রিপ্টগুলির সাথে অন্য একটি সংগ্রহস্থল রেখে এটি সমাধান করতে পারেন।

এটি সহজ হতে পারে?

হ্যাঁ, গিট-হুক পরিচালনা করতে আপনাকে সহায়তা করার জন্য বেশ কয়েকটি সরঞ্জাম রয়েছে। তাদের প্রত্যেকেই ভিন্ন দৃষ্টিকোণ থেকে সমস্যাটি মোকাবেলার জন্য তৈরি করা হয়েছে এবং আপনার বা আপনার দলের পক্ষে সবচেয়ে ভাল এমন একটি পেতে আপনার সকলের বুঝতে হবে। GitHooks.com হুকিং সম্পর্কে প্রচুর পড়া এবং আজ উপলভ্য বেশ কয়েকটি সরঞ্জাম সরবরাহ করে।

আজ অবধি, 21 টি প্রকল্প এখানে গিট হুক পরিচালনা করার জন্য বিভিন্ন কৌশল সহ তালিকাভুক্ত রয়েছে। কিছু এটি কেবল একটি একক হুকের জন্য করে, কিছু নির্দিষ্ট ভাষার জন্য করে এবং আরও অনেক কিছু।

এই সরঞ্জামগুলির মধ্যে একটি, আমার দ্বারা লিখিত এবং একটি মুক্ত উত্স প্রকল্প হিসাবে বিনামূল্যে অফার করা হয়েছে, তাকে হুকস 4 গিট বলে । এটি পাইথনে লেখা হয়েছে (কারণ আমি এটি পছন্দ করি) তবে ধারণাটি হ'ল উপরে রেকর্ড করা সমস্ত আইটেমকে .hooks4git.ini নামক একক কনফিগারেশন ফাইলের মধ্যে পরিচালনা করা হবে যা আপনার ভান্ডারের অভ্যন্তরে থাকে এবং যে কোনও স্ক্রিপ্টকে যে কোনও ভাষায় কল করতে পারে can ।

গিট হুক ব্যবহার করা একেবারে দুর্দান্ত, তবে সাধারণত যেভাবে তাদের দেওয়া হয় তা কেবল লোককে এ থেকে দূরে সরিয়ে দেয়।


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

1

গ্রেড ব্যবহারকারীদের জন্য

আমি এই স্ক্রিপ্টগুলি পেয়েছি গ্রেড প্রকল্পগুলির জন্য খুব দরকারী বলে মনে করি।

build.gradle

apply from: rootProject.file('gradle/install-git-hooks.gradle')

gradle / install-Git-hooks.gradle

tasks.create(name: 'gitExecutableHooks') {
    doLast {
        Runtime.getRuntime().exec("chmod -R +x .git/hooks/");
    }
}
task installGitHooks(type: Copy) {
    from new File(rootProject.rootDir, 'pre-commit')
    into { new File(rootProject.rootDir, '.git/hooks') }
}
gitExecutableHooks.dependsOn installGitHooks
clean.dependsOn gitExecutableHooks

প্রাক কমিট

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