স্বয়ংক্রিয়ভাবে থাকার কোনও উপায় আছে git submodule update
(বা git submodule update --init
যখনই git pull
সম্পন্ন হয় তখন কল করা হয়?
এটির জন্য গিট কনফিগার সেটিং বা একটি গিট ওরফেস খুঁজছেন।
স্বয়ংক্রিয়ভাবে থাকার কোনও উপায় আছে git submodule update
(বা git submodule update --init
যখনই git pull
সম্পন্ন হয় তখন কল করা হয়?
এটির জন্য গিট কনফিগার সেটিং বা একটি গিট ওরফেস খুঁজছেন।
উত্তর:
গিট ২.১৪ হিসাবে আপনি ব্যবহার করতে পারেন git pull --recurse-submodules
(এবং এটি আপনার পছন্দসই নাম হিসাবে ব্যবহার করুন )।
গিট 2.15 হিসাবে , আপনি submodule.recurse
পছন্দসই আচরণ সক্ষম করতে সত্যতে সেট করতে পারেন।
আপনি এটি চালিয়ে বিশ্বব্যাপী করতে পারেন:
git config --global submodule.recurse true
git pull
করাও একটি উপ-মডেল আনবে এবং চালিত করবে submodule update
। এটি এখনই গ্রহণযোগ্য উত্তর হওয়া দরকার
git config --global submodule.recurse true
git clone
পাশাপাশি এটি সক্ষম করা উচিত । এবং এটি ডিফল্টরূপে চালু করুন। অন্যথায়, সবসময়
commit
, fetch
, pull
, ইত্যাদি) শুধুমাত্র বর্তমান সংগ্রহস্থলের প্রয়োগ করা ডিজাইন করা হয়। একটি সাবমডিউল হ'ল আরেকটি সংগ্রহস্থল এবং ডিফল্টরূপে প্যারেন্ট-রেপোজিটরিতে চালিত কমান্ড দ্বারা প্রভাবিত হওয়া উচিত নয়। এটি গিট-বিকাশকারী একধরণের ডিজাইন-সিদ্ধান্ত decision
git config --global alias.pullall '!git pull && git submodule update --init --recursive'
আপনি যদি গিট টানে আর্গুমেন্টগুলি পাস করতে চান তবে তার পরিবর্তে এটি ব্যবহার করুন:
git config --global alias.pullall '!f(){ git pull "$@" && git submodule update --init --recursive; }; f'
গিট ১..5.৫ দিয়ে শুরু করা আপনার নিজের পছন্দ মতো ডিফল্টরূপে স্বয়ংক্রিয়ভাবে সাবমডিউলগুলি আপডেট করা উচিত।
[সম্পাদনা: মন্তব্যগুলি প্রতি: নতুন 1.7.5 আচরণ স্বয়ংক্রিয়ভাবে হয় আনতে submodules জন্য সর্বশেষ করে, কিন্তু না করতে আপডেট তাদের (ইন git submodule update
ইন্দ্রিয়)। সুতরাং এই উত্তরের তথ্যগুলি পটভূমি হিসাবে প্রাসঙ্গিক, তবে এটি নিজেই একটি সম্পূর্ণ উত্তর নয়। একটি কমান্ডে সাবমোডিয়ুলগুলি টানতে এবং আপডেট করতে আপনার এখনও একটি উলামের প্রয়োজন]]
ডিফল্ট আচরণ, "অন-ডিমান্ড" হ'ল সাব-মডিউলগুলি আপডেট করা যখনই আপনি সাবডমুলেট কমিটকে আপডেট করে এমন কোনও কমিট আনেন এবং এই কমিট ইতিমধ্যে আপনার স্থানীয় ক্লোনটিতে অবস্থিত নয়।
আপনি এটি প্রতিটি আনতে বা কখনই আপডেট করতে পারবেন না (প্রাক-1.7.5 আচরণ আমি ধরে নিই)।
এই আচরণটি পরিবর্তন করার জন্য কনফিগার বিকল্পটি fetch.recurseSubmodules
।
এই বিকল্পটি হয় বুলিয়ান মান বা সেট করতে পারে
on-demand
।
একটি বুলিয়ান ধার্য আচরণ পরিবর্তনfetch
এবংpull
submodules মধ্যে নিঃশর্তভাবে recurse যখন যখন মিথ্যাতে সেট এ সব সত্যতে বা recurse না সেট।
on-demand
(ডিফল্ট মান) এ সেট করা থাকলেfetch
এবংpull
কেবল তখনই একটি জনবহুল সাবমডিউলে পুনরাবৃত্তি হবে যখন এর সুপারপ্রজেক্টটি একটি প্রতিশ্রুতি পুনরুদ্ধার করে যা সাবমডিউলের রেফারেন্স আপডেট করে ।
দেখা:
git config
ম্যান পৃষ্ঠা (1.7.5) (অথবা সর্বশেষ git config
ম্যান পৃষ্ঠা )git fetch
ম্যান পৃষ্ঠা (1.7.5) (বা সর্বশেষ গিট ফেঞ্চ ম্যান পৃষ্ঠা )আরও তথ্যের জন্য.
git fetch --recurse-submodules[=yes|on-demand|no]
git fetch
না, একটি করে git submodule update
।
git pull
পরিবর্তে ব্যবহৃত git fetch
হলেও, এই বিকল্পটি কেবল আনয়নকে পুনরাবৃত্ত করে তোলে । সাবমোডিয়ুলগুলিতে যা প্রতিশ্রুতি দেওয়া হয়েছে তা কোনও পরিবর্তন করবে না change সুতরাং git submodule update
হিসাবে @Artem দ্বারা লক্ষনীয়, এখনও প্রয়োজন।
আমি অবাক হয়েছি কেউ এই কাজ করার জন্য গিট হুক ব্যবহার করে উল্লেখ করেনি!
কেবলমাত্র নামযুক্ত ফাইলগুলি post-checkout
এবং সম্পর্কিত ডিরেক্টরিতে post-merge
আপনার .git/hooks
ডিরেক্টরিতে যুক্ত করুন এবং সেগুলির প্রতিটিতে নিম্নলিখিতটি লিখুন:
#!/bin/sh
git submodule update --init --recursive
যেহেতু আপনি স্পষ্টতই একটি উপনামের জন্য জিজ্ঞাসা করেছেন, ধরে নিচ্ছেন যে আপনার কাছে এটি অনেকগুলি সংগ্রহস্থলের জন্য রয়েছে তাই আপনি একটি উপকরণ তৈরি করতে পারেন যা এটি আপনার .git/hooks
জন্য একটি সংগ্রহস্থলের সাথে যুক্ত করে ।
core.hooksPath
করেছে , git-config
আরও তথ্যের জন্য ডকগুলি দেখুন।
git pull --rebase
:(
আপনি গিট কমান্ডের জন্য একটি উপনাম তৈরি করতে পারেন যা স্বয়ংক্রিয়ভাবে সাবমডিউল আপডেটিং পরিচালনা করে। আপনার .bashrc এ নিম্নলিখিতগুলি যুক্ত করুন
# make git submodules usable
# This overwrites the 'git' command with modifications where necessary, and
# calls the original otherwise
git() {
if [[ $@ == clone* ]]; then
gitargs=$(echo "$@" | cut -c6-)
command git clone --recursive $gitargs
elif [[ $@ == pull* ]]; then
command git "$@" && git submodule update --init --recursive
elif [[ $@ == checkout* ]]; then
command git "$@" && git submodule update --init --recursive
else
command git "$@"
fi
}
অন্যরা যেমন উল্লেখ করেছে, আপনি সহজেই এটি দিয়ে সেট করতে পারেন:
git config --global submodule.recurse true
তবে, আপনি যদি আমার মতো হন এবং আরও জটিল .gitconfig
সেটআপ থাকে (আমার মূল ~/.gitconfig
ফাইলটি include
অন্য .gitconfig
ফাইলগুলিতে লোড করতে ব্যবহার করে), এবং আপনি কখনই কমান্ড-লাইন git
কনফিগারেশন ফর্ম্যাট এবং ফর্ম্যাটের মধ্যে রূপান্তর করবেন তা মনে করতে পারেন না .gitconfig
, কীভাবে এটি যুক্ত করবেন তা এখানে রয়েছে আপনার যে কোনও .gitconfig
ফাইলের কাছে:
[submodule]
recurse = true
আমি কীভাবে সাবমডিউলগুলি এবং নেস্টেড সাবমোডিয়ুলগুলি আপডেট করতে পেরেছি তার একমাত্র উপায়:
git submodule update --remote --merge --recursive; git submodule foreach --recursive "(git add .; git commit -m 'SubmoduleSync'; git push; git pull;);" git add .; git commit -m 'SubmodulesSynced'; git push; git pull;
বন্ধনীগুলির কারণে আমি টার্মিনালের মাধ্যমে ওরফে তৈরির জন্য সংগ্রাম করে যাচ্ছিলাম তাই বিশ্বব্যাপী আমাকে নিজেই এটি .gitconfig এ যুক্ত করতে হয়েছিল:
[alias] supdate = "!git submodule update --remote --merge --recursive; git submodule foreach --recursive '(git add .; git commit -m 'SubmoduleSync'; git push; git pull;);' git add .; git commit -m 'SubmodulesSynced'; git push; git pull;"
কমান্ডগুলি বা উপনামটি স্বয়ংক্রিয়ভাবে কীভাবে চালানো যায় তার জন্য কোনও পরামর্শ?