উত্তর:
আমি সাধারণত একাধিক অতিরিক্ত পরামর্শ সহ সিসটেলের সাথে একমত হই, এটির পক্ষে পৃথক উত্তরের উপযুক্ত enough
প্রথমত, আপনাকে এমন একটি স্ক্রিপ্ট লিখতে হবে যা উপযুক্ত প্রতিলিঙ্ক তৈরি করে, বিশেষত যদি এই হুকগুলি নীতি প্রয়োগ বা কার্যকর বিজ্ঞপ্তি তৈরির বিষয়ে হয়। লোকেরা হুকগুলি ব্যবহার করার অনেক বেশি সম্ভাবনা bin/create-hook-symlinks
থাকবে যদি তারা নিজেরাই তা করতে হয় তবে কেবল টাইপ করতে পারে।
দ্বিতীয়ত, সরাসরি সিমলিংকিং হুক ব্যবহারকারীদের নিজস্ব ব্যক্তিগত হুক যোগ করতে বাধা দেয়। উদাহরণস্বরূপ, আমি বরং নমুনা প্রাক কমিট হুক পছন্দ করি যা নিশ্চিত করে যে আমার কোনও সাদা জায়গা ত্রুটি নেই। এর চারপাশের দুর্দান্ত উপায় হ'ল আপনার রেপোতে একটি হুক র্যাপার স্ক্রিপ্টটি ফেলে দেওয়া এবং এটিতে সমস্ত হুকের সিমিলিংক করা। এর পরে মোড়কটি পরীক্ষা করতে পারে $0
(এটি একটি বাশ স্ক্রিপ্ট ধরে নেওয়া; argv[0]
অন্যথায় এর সমতুল্য ) এটি চিহ্নিত করা হয়েছিল যে এটি কোন হুক হিসাবে চিহ্নিত হয়েছিল, তারপরে আপনার রেপোর মধ্যে যথাযথ হুকটি অনুরোধ করুন, পাশাপাশি উপযুক্ত ব্যবহারকারীর হুকটিও নামকরণ করতে হবে , প্রতিটি আর্গুমেন্ট পাস। স্মৃতি থেকে দ্রুত উদাহরণ:
#!/bin/bash
if [ -x $0.local ]; then
$0.local "$@" || exit $?
fi
if [ -x tracked_hooks/$(basename $0) ]; then
tracked_hooks/$(basename $0) "$@" || exit $?
fi
ইনস্টলেশন স্ক্রিপ্ট সমস্ত পূর্ব-বিদ্যমান হুকগুলি পাশের দিকে সরিয়ে নিয়ে যাবে ( .local
তাদের নামগুলিতে সংযোজন করবে) এবং উপরের স্ক্রিপ্টে সমস্ত পরিচিত হুকের নাম সিমিলিংক করবে:
#!/bin/bash
HOOK_NAMES="applypatch-msg pre-applypatch post-applypatch pre-commit prepare-commit-msg commit-msg post-commit pre-rebase post-checkout post-merge pre-receive update post-receive post-update pre-auto-gc"
# assuming the script is in a bin directory, one level into the repo
HOOK_DIR=$(git rev-parse --show-toplevel)/.git/hooks
for hook in $HOOK_NAMES; do
# If the hook already exists, is executable, and is not a symlink
if [ ! -h $HOOK_DIR/$hook -a -x $HOOK_DIR/$hook ]; then
mv $HOOK_DIR/$hook $HOOK_DIR/$hook.local
fi
# create the symlink, overwriting the file if it exists
# probably the only way this would happen is if you're using an old version of git
# -- back when the sample hooks were not executable, instead of being named ____.sample
ln -s -f ../../bin/hooks-wrapper $HOOK_DIR/$hook
done
HOOK_DIR=$(git rev-parse --show-toplevel)/.git/hooks
।
না, সেগুলি সংগ্রহস্থলে রাখাই ভাল, আমি এমনকি এটি করার পরামর্শ দিই (যদি তারা অন্যদের জন্যও কার্যকর হয়) are ব্যবহারকারীকে তাদের সুস্পষ্টভাবে সক্ষম করতে হবে (যেমন আপনি বলেছিলেন, উদাহরণস্বরূপ সিমলিংক করে) যা একদিকে যেমন কিছুটা ব্যথা হয় তবে অন্যদিকে ব্যবহারকারীদের তাদের সম্মতি ছাড়াই নির্বিচারে কোড চালানো থেকে রক্ষা করে।
আজকাল আপনি যদি একটি ডিরেক্টরি সংস্করণ নিয়ন্ত্রণে থাকেন তবে আপনার Git আঙ্গুলসমূহ ডিরেক্টরি হতে সেট করতে নিচের কাজগুলো করতে পারেন, যেমন, MY_REPO_DIR/.githooks
হবে
git config --local core.hooksPath .githooks/
এখনও সরাসরি প্রয়োগযোগ্য নয় তবে আপনি যদি আপনার README (বা যাই হোক না কেন) একটি নোট যোগ করেন তবে এর জন্য প্রতিটি বিকাশকারীর পক্ষে সর্বনিম্ন প্রচেষ্টা প্রয়োজন।
Http://git-scm.com/docs/git-init#_template_directory থেকে , আপনি প্রতিটি সদ্য নির্মিত গিট রেপোর .git / হুক দির আপডেট করতে এই পদ্ধতিগুলির একটি ব্যবহার করতে পারেন:
টেমপ্লেট ডিরেক্টরিতে ফাইল এবং ডিরেক্টরি রয়েছে যা এটি তৈরির পরে $ GIT_DIR এ অনুলিপি করা হবে।
টেম্পলেট ডিরেক্টরি নিম্নলিখিতগুলির মধ্যে একটি হবে (ক্রম):
--template বিকল্পের সাহায্যে প্রদত্ত যুক্তি;
vari GIT_TEMPLATE_DIR এনভায়রনমেন্ট ভেরিয়েবলের সামগ্রী;
init.templateDir কনফিগারেশন পরিবর্তনশীল; অথবা
ডিফল্ট টেম্পলেট ডিরেক্টরি: / usr / ভাগ / গিট-কোর / টেম্পলেট।
অন্যরা তাদের উত্তরে বলেছে যে, যদি আপনার হুকগুলি আপনার নির্দিষ্ট প্রকল্পগুলির জন্য নির্দিষ্ট থাকে তবে সেগুলি নিজেই গিট দ্বারা পরিচালিত প্রকল্পে অন্তর্ভুক্ত করুন। আমি এটিকে আরও এগিয়ে নিয়ে যাব এবং বলব যে, আপনার প্রকল্পটি একটি একক স্ক্রিপ্ট বা কমান্ড ব্যবহার করে তৈরি করা ভাল অনুশীলন, আপনার হুকগুলি বিল্ড করার সময় ইনস্টল করা উচিত।
আমি গিট হুক পরিচালনা সম্পর্কে একটি নিবন্ধ লিখেছিলাম , আপনি যদি আরও কিছুটা গভীরতার সাথে এই বিষয়ে পড়তে আগ্রহী হন।
সম্পূর্ণ অস্বীকৃতি; আমি নীচে বর্ণিত মাভেন প্লাগইন লিখেছি।
আপনি যদি আপনার জাভা প্রকল্পগুলির জন্য মাভেনের সাথে বিল্ড ম্যানেজমেন্ট পরিচালনা করছেন, তবে নীচের মাভেন প্লাগইন আপনার প্রকল্পের কোনও স্থান থেকে হুক ইনস্টল করতে পরিচালনা করবে।
https://github.com/rudikershaw/git-build-hook
আপনার সমস্ত গিট হুকগুলি আপনার প্রকল্পের একটি ডিরেক্টরিতে রাখুন, তারপরে আপনার pom.xml
নিম্নলিখিত প্লাগইন ঘোষণা, লক্ষ্য এবং কনফিগারেশন অন্তর্ভুক্ত করতে কনফিগার করুন।
<build>
<plugins>
<plugin>
<groupId>com.rudikershaw.gitbuildhook</groupId>
<artifactId>git-build-hook-maven-plugin</artifactId>
<configuration>
<gitConfig>
<!-- The location of the directory you are using to store the Git hooks in your project. -->
<core.hooksPath>hooks-directory/</core.hooksPath>
</gitConfig>
</configuration>
<executions>
<execution>
<goals>
<!-- Sets git config specified under configuration > gitConfig. -->
<goal>configure</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- ... etc ... -->
</plugins>
</build>
আপনি যখন আপনার প্রকল্পটি পরিচালনা করেন প্লাগইন নির্দিষ্ট ডিরেক্টরি থেকে হুক চালানোর জন্য গিটকে কনফিগার করবে। এটি কার্যকরভাবে আপনার প্রকল্পে কাজ করা প্রত্যেকের জন্য ডিরেক্টরিতে হুকগুলি সেট আপ করবে।
NPM জন্যে রয়েছে নির্ভরতা বলা হয় বলবান আপনি জাভাস্ক্রিপ্ট লেখা বেশী সহ আঙ্গুলসমূহ ইনস্টল করতে দেয়।
// package.json
{
"husky": {
"hooks": {
"pre-commit": "npm test",
"pre-push": "npm test",
"...": "..."
}
}
}
অতিরিক্ত হিসাবে, পাইথন প্রকল্পগুলির জন্য প্রাক-প্রতিশ্রুতি রয়েছে , রুবি প্রকল্পের জন্য ওভারকমিট এবং রুবি বা নোড প্রকল্পের লেফথুক রয়েছে ।
Https://www.npmjs.com/package/pre-commit আপনার package.json মধ্যে npm প্যাকেজ হ্যান্ডলগুলি এই এইরূপ সূচারূভাবে আপনাকে তা নির্দিষ্ট করার অনুমতি প্রাক কমিট আঙ্গুলসমূহ।
সুরকার ভিত্তিক পিএইচপি প্রকল্পগুলির জন্য আপনি ইঞ্জিনিয়ারগুলিতে স্বয়ংক্রিয়ভাবে বিতরণ করতে পারেন। প্রাক-কমিট এবং কমিট-হিক্স হুকের উদাহরণ এখানে is
একটি hooks
ফোল্ডার তৈরি করুন , তারপরে আপনার রচয়িতা জসনে:
},
"scripts": {
"post-install-cmd": [
"cp -r 'hooks/' '.git/hooks/'",
"php -r \"copy('hooks/pre-commit', '.git/hooks/pre-commit');\"",
"php -r \"copy('hooks/commit-msg', '.git/hooks/commit-msg');\"",
"php -r \"chmod('.git/hooks/pre-commit', 0777);\"",
"php -r \"chmod('.git/hooks/commit-msg', 0777);\"",
],
তারপরে আপনি এগুলিকে আপডেট করতে পারেন যেমন প্রকল্পটি composer install
নিয়মিতভাবে চলমান থাকায় চলতে থাকে।
এখানে একটি স্ক্রিপ্ট রয়েছে, অ্যাড-গিট- হুক.শ, যা আপনি সংগ্রহস্থলের নিয়মিত ফাইল হিসাবে চালনা করতে পারেন এবং স্ক্রিপ্ট ফাইলে গিট হুক সংযোজন করার জন্য কার্যকর করা যেতে পারে। কোন হুকটি ব্যবহার করতে হবে (প্রাক-কমিট, পোস্ট কমিট, প্রাক-পুশ, ইত্যাদি) এবং বিড়াল হেরডোকের হুকের সংজ্ঞাটি সমন্বয় করুন।
#!/usr/bin/bash
# Adds the git-hook described below. Appends to the hook file
# if it already exists or creates the file if it does not.
# Note: CWD must be inside target repository
HOOK_DIR=$(git rev-parse --show-toplevel)/.git/hooks
HOOK_FILE="$HOOK_DIR"/post-commit
# Create script file if doesn't exist
if [ ! -e "$HOOK_FILE" ] ; then
echo '#!/usr/bin/bash' >> "$HOOK_FILE"
chmod 700 "$HOOK_FILE"
fi
# Append hook code into script
cat >> "$HOOK_FILE" <<EOF
########################################
# ... post-commit hook script here ... #
########################################
EOF
এই স্ক্রিপ্টটি এক্সিকিউটেবল অনুমতি থাকতে পারে বা ব্যবহারকারী এটি সরাসরি চালাতে পারে। আমি প্রতিশ্রুতিবদ্ধ হওয়ার পরে অন্যান্য মেশিনগুলিতে স্বয়ংক্রিয়ভাবে গিট টানতে এটি ব্যবহার করেছি।
সম্পাদনা - আমি সহজ প্রশ্নের উত্তর দিয়েছি যা যা জিজ্ঞাসা করা হয়নি এবং ওপি যা খুঁজছিল তা নয়। নীচে দেওয়া মন্তব্যে বহিরাগতভাবে পরিচালনা করার জন্য রেপোতে হুক স্ক্রিপ্টগুলি শিপিংয়ের জন্য আমি ব্যবহার-সংক্রান্ত মামলা এবং তর্কগুলি প্রকাশ করেছি। আশা করি আপনি যা খুঁজছিলেন তা আরও ছিল।
প্রাক কমিটের মতো প্রাক কমিট হুক পরিচালনার জন্য আপনি একটি পরিচালিত সমাধান ব্যবহার করতে পারেন । অথবা সার্ভার-সাইড গিট-হুকের জন্য ডেটারি.ওয়ের জন্য কেন্দ্রীয় সমাধান । এটিতে অন্তর্নির্মিত নীতিগুলি রয়েছে:
এটি আপনার সমস্ত হুক প্রতিস্থাপন করবে না, তবে এটি আপনার বিকাশকারীদের প্রতিটি বিকাশকারী কম্পিউটার / রেপোতে হুকগুলি ইনস্টল করার কনফিগারেশন নরকে ছাড়াই সবচেয়ে সুস্পষ্ট বিষয়গুলির সাহায্য করতে পারে।
দাবি অস্বীকার: আমি ডেটারিসের অন্যতম প্রতিষ্ঠাতা
chmod +x .git/hooks/*
আপনারbin/create-hook-symlinks
এটি যুক্ত করতে যোগ ।