আমার মেশিনে থাকা সমস্ত গিট রিপোজিটরিগুলি আমি দেখতে পাচ্ছি এমন কোনও উপায় আছে কি? এর জন্য কোন আদেশ?
আমার মেশিনে থাকা সমস্ত গিট রিপোজিটরিগুলি আমি দেখতে পাচ্ছি এমন কোনও উপায় আছে কি? এর জন্য কোন আদেশ?
উত্তর:
আপনি যদি লিনাক্সে থাকেন find / -name ".git", অন্যথায় উপায় নেই, সেগুলি হ'ল স্ট্যান্ডার্ড ডিরেক্টরি, .gitনামযুক্ত ফোল্ডারগুলি সন্ধানের জন্য আপনার ওএস ফাইল / ফোল্ডার সন্ধানের প্রোগ্রামটি ব্যবহার করুন ।
for d in `find / -name ".git"`; do cd $d/..; echo `pwd`:; git status; echo; done
মূল উত্তর : উইন্ডোজ পাওয়ারশেল থেকে এটি বেশ ভালভাবে কাজ করে:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Include ".git" -Recurse
সম্পাদনা # 1 : - ফিল্টার দ্বিগুণ তত দ্রুত - অন্তর্ভুক্ত । এই সমাধানটি এখানে:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse
সম্পাদনা # 2 : কীথ ই ট্রুইসেল একটি ফাইলের আউটপুট প্রেরণের উল্লেখ করেছেন। সমাধানের জন্য তাঁর মন্তব্য দেখুন। আমি কনসোল আউটপুট পছন্দ করি। তবে তার মন্তব্যটি আমাকে এই ভেবে পেয়েছিল যে আমি কেবল পুরো পথটিকেই পছন্দ করি, পুরো জগাখিচুড়ি ডিফল্টরূপে ফিরে আসে না। আপনি যদি এটি পুরো পথটি চান তবে নিম্নলিখিতটি ব্যবহার করুন:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.FullName }
চূড়ান্ত নোট : উপরে সমাধান শুধুমাত্র বর্তমান ডিরেক্টরির অধীনে Git ভান্ডারগুলিকে আসতে । আপনি যদি কোনও ড্রাইভে সমস্ত সংগ্রহস্থল চান, আপনার প্রতিটি ড্রাইভের মূল থেকে একবার কমান্ডটি চালানো উচিত।
* নিক্সে, এটি কোনও --bareসংগ্রহস্থলও সন্ধান করবে।
find / -name "*.git" -type d
name.gitখালি সংগ্রহস্থলগুলির নামকরণের দরকার নেই কেবল একটি সম্মেলন, যা আমি উদাহরণস্বরূপ অনুসরণ করি না।
findকি?
Git ভান্ডারগুলিকে সব আছে HEAD, refsএবং objectsএন্ট্রি।
জিএনইউ / যে কোনও কিছুতে,
find -name HEAD -execdir test -e refs -a -e objects \; -printf %h\\n
কেবল অনুসন্ধানের জন্য .gitঅনেকগুলি খালি রেপো এবং সাবমডিউলগুলি মিস হবে।
চেকিংয়ে পুরো অলৌকিক কাজ করতে আপনি ছাপার আগে গিটকে তার নিজের চেকগুলি নিজেই করতে বলতে পারেন,
find -name HEAD -execdir test -e refs -a -e objects \; \
-execdir sh -ec 'GIT_DIR=$PWD git rev-parse --absolute-git-dir 2>&-' \;
(সম্পাদনা: আমি ভেবেছিলাম .git/configফাইল প্রয়োজন ছিল, দেখা যাচ্ছে না, তাই পরম সর্বনিম্ন git init newrepoহয়
mkdir -p newrepo/.git/{objects,refs}
echo ref: refs/heads/master >newrepo/.git/HEAD
)
লিনাক্স-এ, একটি দ্রুততর উপায় হবে:
locate -r "\.git$"
ধরে নিচ্ছি যে আপনি অবস্থানের ডেটাবেসটি আপডেট করেছেন sudo updatedb
লিনাক্স এবং ওএস এক্স-তে নিম্নলিখিত কমান্ডটি সম্ভবত দ্রুততম (বিনা ভাণ্ডারগুলিকে উপেক্ষা করে .git) findহ'ল যখন এর মূল ডিরেক্টরিটি থাকবে /:
find / -name .git -exec dirname {} \; -prune
তবে মূলগুলির নীচে বেশিরভাগ সংগ্রহস্থলগুলির জন্য, নিম্নলিখিতগুলি সম্ভবত দ্রুততম (আপনি বা অন্য কোনও মূলের /সাথে প্রতিস্থাপন করতে চাইতে পারেন .):
find / -type d -exec test -d {}/.git \; -prune -print
দ্রুত ব্যাখ্যা প্রাইমারিতে এর findব্যবহার (যেহেতু কোন অপারেটার এখানে উপস্থিত হয়, -andঅন্তর্নিহিত,, প্রতিটি পরিদর্শন নোড জন্য অর্থাত প্রাইমারিতে বাম থেকে ডানে মূল্যায়ন করা হয় না হওয়া পর্যন্ত তাদের মধ্যে একজন মূল্যায়ণ false):
-nameহয় trueতাহলে নাম (প্রায়ই এখানে, কিন্তু না, ওয়াইল্ডকার্ড সঙ্গে) সাথে মিলে যায়-execসমাপ্ত কমান্ড কার্যকর করে ;(যা \শেল দ্বারা ব্যাখ্যা এড়াতে পালিয়ে যায় ), এবং trueযদি প্রত্যাবর্তন স্থিতি হয় 0(যেমন, ঠিক আছে)। বর্তমান নোডটি উপলভ্য {}(যার কোনও পালানোর দরকার নেই)-pruneসর্বদা থাকে trueএবং সমস্ত শিশু নোড এড়িয়ে যায়-type dহয় trueআমাদের সূচী অংশগ্রহণের আপনার-printএখানে প্রয়োজন কারণ যদি -execএটি উপস্থিত থাকে তবে এটি স্পষ্টভাবে সংযোজন করা হয় নালিনাক্সে, রুট অনুমতি নিয়ে এই কমান্ডটি ব্যবহার করে দেখুন:
find / | grep \\.git$
এটি কেবলমাত্র .git দিয়ে শেষ হওয়া প্রতিটি ফাইল অনুসন্ধান করে ... আপনি উইন্ডোজ, লিনাক্স ইত্যাদিতে অনুসন্ধান সরঞ্জামগুলির সাহায্যে এটি করতে পারেন ...
findতারপরে ফিল্টারিং দিয়ে আউটপুট সব কিছু দেওয়ার সুযোগ নেই grep। আমি বরং ব্যবহার করব--name "*.git"
/গাছটিকে দ্বিতীয়টি গ্রেপ করার জন্য সঞ্চারিত করেন , যখন প্রথমটি সমস্ত কিছু করতে পারে এবং বিশাল অকেজো আইও ব্যবহার এড়াতে পারে। সাধারণত ব্যবহারকারীর পক্ষে সত্যিকারের পার্থক্য নয়, তবে বড় ফাইল সিস্টেমের ক্ষেত্রে এটি একটি পার্থক্য করতে পারে।
একটি সাধারণ পাওয়ারশেল সংস্করণ:
Get-ChildItem . -Recurse -Hidden .git
C:\users\<username>\PrintHood এছাড়াও, আমি একটি ফাইলে একটি আউটপুট যুক্ত করা দরকারী বলে মনে হয়েছিল এবং যেহেতু আমি কেবল পথ / ডিরেক্টরি সম্পর্কিত তথ্যের জন্যই ফিল্টার করতে কেবল পথটির (যেমন এই স্ক্রিপ্টটি তথ্যের একগুচ্ছ পায়) যত্নশীল। Get-ChildItem . -Recurse -Hidden .git | Out-file -FilePath C:\Dev\GitRepoList.txt
এরিক বার্চামের উত্তর থেকে ছোট পার্থক্য। এই উত্তরটি শেষ পর্যন্ত \ .গিট যোগ করে, এইটি দেয় না।
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.Parent.FullName }
দিনের শুরুতে আমি এই আদেশটি ব্যবহার করি। এটি কেবল উপরের দিকে কয়েকটি গিট কমান্ড যুক্ত করে। কোনও কারণে, আমাদের গিট সংগ্রহস্থল সবচেয়ে ভাল কাজ করে যদি কেউ আনতে থাকে তবে টানুন, কেন জানি না। এবং আমাদের কোনও কারণে বেশ কয়েকটি সাবমডিউল রয়েছে। যাইহোক, আপনার যা প্রয়োজন তা put s 'র এর মধ্যে রাখুন।
push-location; Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { cd $_.parent.fullname; write-host '*************'; $(get-location).path; git fetch; git pull; git checkout .; git clean -f; git submodule update; git status; write-host '*************'; write-host ' '; }; pop-location