git grepগিট নিয়ন্ত্রণ উত্সাহিত প্রকল্পের সমস্ত শাখার অভ্যন্তরে চালানো কি সম্ভব ? নাকি চালানোর জন্য আরও একটি আদেশ আছে?
git grepগিট নিয়ন্ত্রণ উত্সাহিত প্রকল্পের সমস্ত শাখার অভ্যন্তরে চালানো কি সম্ভব ? নাকি চালানোর জন্য আরও একটি আদেশ আছে?
উত্তর:
" গিট ইতিহাসে প্রতিশ্রুতিবদ্ধ কোডটি গ্রেপ (অনুসন্ধান) কীভাবে করবেন " প্রশ্নটি সুপারিশ করে:
git grep <regexp> $(git rev-list --all)
এটি সমস্ত কমিটগুলির মাধ্যমে অনুসন্ধান করে, যাতে সমস্ত শাখা অন্তর্ভুক্ত করা উচিত।
অন্য ফর্মটি হ'ল:
git rev-list --all | (
while read revision; do
git grep -F 'yourWord' $revision
done
)
আপনি এই নিবন্ধে আরও উদাহরণ খুঁজে পেতে পারেন :
আমি উপরের মতো একটি প্রকল্পে যথেষ্ট চেষ্টা করেছি যে গিটটি আর্গুমেন্টের আকার সম্পর্কে অভিযোগ করেছে, তাই আপনি যদি এই সমস্যাটিতে চলে যান তবে কিছু করুন:
git rev-list --all | (while read rev; do git grep -e <regexp> $rev; done)
(নীচে এই উত্তরের শেষ বিভাগে একটি বিকল্প দেখুন)
আপনি যদি সেগুলি চান তবে সেগুলিটি ভুলে যাবেন না:
# Allow Extended Regular Expressions
git config --global grep.extendRegexp true
# Always Include Line Numbers
git config --global grep.lineNumber true
এই উপনামটিও সহায়তা করতে পারে:
git config --global alias.g "grep --break --heading --line-number"
দ্রষ্টব্য: চেরঞ্জি পরামর্শ দিয়েছে এটি git rev-list --allএকটি ওভারকিল।
আরও পরিশোধিত কমান্ড হতে পারে:
git branch -a | tr -d \* | xargs git grep <regexp>
যা আপনাকে কেবল শাখা (দূরবর্তী শাখা সহ) অনুসন্ধান করার অনুমতি দেবে
এমনকি আপনি এটির জন্য একটি বাশ / জেডশিয়ার উপন্যাস তৈরি করতে পারেন:
alias grep_all="git branch -a | tr -d \* | xargs git grep"
grep_all <regexp>
আগস্ট 2016 আপডেট করুন: আরএম মন্তব্যগুলিতে সুপারিশ করে
সংস্করণ
fatal: bad flag '->' used after filenameচেষ্টা করার সময় আমি একটি " " পেয়েছিলামgit branch। ত্রুটিটি একটিHEADএলিয়াসিং স্বরলিপিটির সাথে সম্পর্কিত ছিল ।আমি পাইপগুলিতে এবং কমান্ডগুলির
sed '/->/d'মধ্যে একটি যোগ করে এটি সমাধান করেছি ।trxargs
git branch -a | tr -d \* | sed '/->/d' | xargs git grep <regexp>
এটাই:
alias grep_all="git branch -a | tr -d \* | sed '/->/d' | xargs git grep"
grep_all <regexp>
git branchটিআর বা সেডের আউটপুটটি পাইপ করা ভাল ধারণা নয় ; git branchমানুষের ব্যবহারের জন্য বোঝানো একটি চীনামাটির বাসন কমান্ড। পছন্দসই বিকল্পগুলির জন্য স্ট্যাকওভারফ্লো . com/a/3847586/2562319 দেখুন ।
git log সমস্ত শাখা জুড়ে পাঠ্য অনুসন্ধানের আরও কার্যকর উপায় হতে পারে, বিশেষত যদি অনেকগুলি মিল থাকে এবং আপনি প্রথমে আরও সাম্প্রতিক (প্রাসঙ্গিক) পরিবর্তনগুলি দেখতে চান।
git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'
এই লগ কমান্ডের তালিকাটি কমিট করে যা প্রদত্ত অনুসন্ধান স্ট্রিং / রেজেক্স যুক্ত করে বা সরিয়ে দেয় (সাধারণত) প্রথমে আরও সাম্প্রতিক। -pবিকল্প প্রাসঙ্গিক পরিবর্তন, যেখানে প্যাটার্ন যোগ করা হয়েছিল বা মুছে ফেলা দেখানো হবে তা তাই আপনি এটি প্রেক্ষাপটে দেখতে পারেন কারণ।
একটি প্রাসঙ্গিক প্রতিশ্রুতি পাওয়া গেছে যা আপনি যে পাঠ্যটি সন্ধান করছেন তা যুক্ত করে (উদাঃ 8beeff00d), সেই শাখাগুলি আবিষ্কার করুন যা প্রতিশ্রুতিবদ্ধ রয়েছে:
git branch -a --contains 8beeff00d
আমি এটি সবচেয়ে দরকারী বলে মনে করেছি:
git grep -i foo `git for-each-ref --format='%(refname)' refs/`
আপনি কেবল দূরবর্তী বনাম স্থানীয় শাখাগুলি দেখতে চান কিনা তার উপর নির্ভর করে আপনাকে শেষ যুক্তিগুলি সমন্বয় করতে হবে, যেমন:
git grep -i foo $(git for-each-ref --format='%(refname)' refs/remotes)git grep -i foo $(git for-each-ref --format='%(refname)' refs/heads)আমি যে উপন্যাসটি তৈরি করেছি তা দেখতে এইরকম দেখাচ্ছে:
grep-refs = !sh -c 'git grep "$0" "$@" "$(git for-each-ref --format=\"%(refname)\"" refs/)'
git for-each-refসাথে আপডেট করেছি --sort=-committerdate --count=100! মূল ধারণা জন্য ধন্যবাদ!
এটি দুটি সাধারণ উপায়ে করা সম্ভব: বাশ বা গিট এলিয়াস
এখানে তিনটি আদেশ রয়েছে:
git grep-branch - স্থানীয় এবং দূরবর্তী সমস্ত শাখায় অনুসন্ধান করুনgit grep-branch-local - শুধুমাত্র স্থানীয় শাখায় অনুসন্ধান করুনgit grep-branch-remote - কেবল দূরবর্তী শাখাব্যবহার একই হিসাবে git grep
git grep-branch "find my text"
git grep-branch --some-grep-options "find my text"
কমান্ডগুলি ~/.gitconfigফাইল করার জন্য ম্যানুয়ালি যুক্ত করা উচিত , কারণ git config --global aliasআপনি যে জটিল কোডটি যুক্ত করেন তা মূল্যায়ন করে এলোমেলো করে ফেলুন।
[alias]
grep-branch = "!f(){ git branch -a | sed -e 's/[ \\*]*//' | grep -v -e '\\->' | xargs git grep $@; };f "
grep-branch-remote = "!f(){ git branch -a | sed -e 's/[ \\*]*//' | grep -v -e '\\->' | grep '^remotes' | xargs git grep $@; };f"
grep-branch-local = "!f(){ git branch -a | sed -e 's/[ \\*]*//' | grep -v -e '\\->' -e '^remotes' | xargs git grep $@; };f "
দ্রষ্টব্য: আপনি যখন এলিয়াস যুক্ত করেন এবং সেগুলি চালাতে ব্যর্থ হয় - ব্যাকস্ল্যাশগুলি পরীক্ষা করুন \\\ করুন তাদের বাশ কমান্ডের তুলনায় অতিরিক্ত পালানোর প্রয়োজন হতে পারে ।
git branch -a - সমস্ত শাখা প্রদর্শন;sed -e 's/[ \\*]*//' - ছাঁটাই স্পেস ফাঁকা (থেকেbranch -a ) এবং * (সক্রিয় শাখার নাম এটি রয়েছে);grep -v -e '\\->' - জটিল নামগুলি উপেক্ষা করুনremotes/origin/HEAD -> origin/master ;grep '^remotes' - সমস্ত প্রত্যন্ত শাখা পান;grep -v -e '^remotes'- বাদে শাখা পান প্রত্যন্ত শাখা ;git grep-branch-local -n getTastyCookies-n মিলের লাইনে লাইন নম্বরটিকে উপসর্গ করুন।
[user@pc project]$ git grep-branch-local -n getTastyCookies
dev:53:modules/factory/getters.php:function getTastyCookies($user);
master:50:modules/factory/getters.php:function getTastyCookies($user)
বর্তমান কাঠামোটি হ'ল:
: - বিভাজক
dev53modules/factory/getters.phpfunction getTastyCookies($user)আপনার যেমনটি জানা উচিত: বাশ কমান্ডগুলি সংরক্ষণ করা উচিত .sh স্ক্রিপ্টগুলিতে বা একটি শেল চালানো ।
git branch -a | sed -e 's/[ \*]*//' | grep -v -e '\->' -e '^remotes' | xargs git grep "TEXT"
git branch -a | sed -e 's/[ \*]*//' | grep -v -e '\->' | grep '^remotes' | xargs git grep "TEXT"
git branch -a | sed -e 's/[ \*]*//' | grep -v -e '\->' | xargs git grep "TEXT"
git grep-branch "find my text"fatal: ambiguous argument 'client': both revision and filename
-a, যা সমস্ত শাখা দেখায়? আমি git branchকমান্ডের বিকল্পগুলি বন্ধনী পৃথক করতে ব্যবহার করার পরামর্শ দেব । স্থানীয় শাখাগুলি দেখার সময়, কেবলমাত্র একটি একক রয়েছে *, সুতরাং সেডের জন্য এড়াতে হবে না। সুতরাং: git branch | sed -e 's/*/ /' | xargs git grep "TEXT"শুধুমাত্র স্থানীয় শাখার git branch -r | grep -v -- "->" | xargs git grep "TEXT"জন্য , কেবল প্রত্যন্ত শাখার git branch -a | grep -v -- "->" | xargs git grep "TEXT"জন্য , এবং সমস্ত শাখার জন্য
আমি এটি কীভাবে করব তা এখানে:
git for-each-ref --format='%(*refname)' | xargs git grep SEARCHTERM