আমি কীভাবে আমার মেশিনে সমস্ত গিট সংগ্রহস্থল দেখতে পারি?


121

আমার মেশিনে থাকা সমস্ত গিট রিপোজিটরিগুলি আমি দেখতে পাচ্ছি এমন কোনও উপায় আছে কি? এর জন্য কোন আদেশ?


2
দেখুন Git-সারসংক্ষেপ । এটি একটি বাশ স্ক্রিপ্ট যা উভয়ই সমস্ত সংগ্রহস্থলের তালিকা করে এবং তাদের স্থিতির তথ্য আউটপুট করে। দাবি অস্বীকার, আমি দেবদের একজন am
cagliari2005

@ ক্যাগলিয়ারি ২০০৫: খালি সংগ্রহস্থলগুলির কী হবে? stackoverflow.com/questions/60064170/…
লুসিও

উত্তর:


102

আপনি যদি লিনাক্সে থাকেন find / -name ".git", অন্যথায় উপায় নেই, সেগুলি হ'ল স্ট্যান্ডার্ড ডিরেক্টরি, .gitনামযুক্ত ফোল্ডারগুলি সন্ধানের জন্য আপনার ওএস ফাইল / ফোল্ডার সন্ধানের প্রোগ্রামটি ব্যবহার করুন ।


1
উইন্ডোজে (এবং আমি নিশ্চিত ম্যাকও) আপনিও অনুরূপ কিছু করতে পারেন ... .git নামের ডিরেক্টরিগুলির জন্য অনুসন্ধান - যা গিট তার মেটা তথ্য সংরক্ষণ করতে ব্যবহার করে।
সিজেস্তেহ্নো

3
ম্যাকসে, উপরের কমান্ডটিও কাজ করে। (যদি না আপনি ওএস 9 বা তার আগে চালাচ্ছেন!)
অ্যালেক্স ফেনম্যান

1
কোনও ভাল শেল স্ক্রিপ্ট বা ছোট ইউটিলিটি অ্যাপ্লিকেশন যা এই সাধারণ ফাইল অনুসন্ধান কার্যকারিতা বাস্তবায়িত করে এবং তালিকাতে সংগ্রহস্থলের স্থিতির তথ্য যুক্ত করে? এটি করার জন্য শেল স্ক্রিপ্ট লিখতে সমস্যা হওয়া উচিত নয়, বরং আমার নিজের অব্যর্থহীন হ্যাকের চেয়ে ভাল-গ্রহণযোগ্য স্ক্রিপ্টগুলি ব্যবহার করুন।
jmlane

6
@jmlanefor d in `find / -name ".git"`; do cd $d/..; echo `pwd`:; git status; echo; done
এলজে ভানকুইকেন

ম্যান পেজের সলিউশন রয়েছে তা সন্ধান করুন। গৃহীত উত্তরের মতো তবে .git ডিরেক্টরিতে না গিয়ে দ্রুত ফিরে আসার জন্য -প্রিন ব্যবহার করে। ছাঁটাই ছাড়াই সন্ধানটি .git ফোল্ডারে যাবে এবং বিষয়বস্তুর উপর নির্ভর করে অযথা ভিতরে অনুসন্ধান করতে সময় ব্যয় করবে। ম্যান পেজ সলিউশন অনুসরণ করে "অনুসন্ধান রেপো / (-প্রশ্ন পরীক্ষা -d ''}} '/। এসএনএন \;; অথবা ex-এক্সেক পরীক্ষা -ড {} /। গিট \; -অর-এক্সেক পরীক্ষা -d {} / সিভিএস \ ;) pr -প্রিন্ট -প্রিন এটি পরীক্ষা করে দেখুন। এসএনএন এবং সিভিগুলি সম্পাদনা করুন প্রয়োজন না হলে
শান্ত_পেনগুইন

38

মূল উত্তর : উইন্ডোজ পাওয়ারশেল থেকে এটি বেশ ভালভাবে কাজ করে:

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 ভান্ডারগুলিকে আসতে । আপনি যদি কোনও ড্রাইভে সমস্ত সংগ্রহস্থল চান, আপনার প্রতিটি ড্রাইভের মূল থেকে একবার কমান্ডটি চালানো উচিত।


1
উইন্ডোজ ব্যবহারকারীদের জন্য খুব দরকারী! :)
ফেলিক্স ফেলিনিস্ট

2
গেট-চাইল্ড আইটেম: একটি প্যারামিটার পাওয়া যায় না যা প্যারামিটারের নাম 'অ্যাট্রিবিউটস' এর সাথে মেলে। লাইনে: 1 চরণ: 28
দেওয়াল্ড স্বানিপল

@ দেওয়াল্ডসোয়ানাপোয়েল - বৈশিষ্ট্যগুলির পরামিতি সম্পর্কে আপনি কেন ত্রুটিটি দেখবেন তা আমার কোনও ধারণা নেই। এটি ডকুমেন্টেশনে পরিষ্কারভাবে রয়েছে এবং আমি এখন এটি বেশ কয়েকটি উইন্ডোজ / পাওয়ারশেল সংস্করণ সংমিশ্রণে চেষ্টা করেছি। উইন্ডোজ 7, ​​8 এবং 10 সমস্ত আমার জন্য পাওয়ারশেলের বিভিন্ন সংস্করণে কাজ করে। ত্রুটি কেন ঘটছে তা যদি আপনি খুঁজে বের করেন তবে দয়া করে এটি এখানে ভাগ করুন যাতে আমরা শিখতে পারি:>)
bopapa_1979

2
@ দেওয়াল্ডসওয়ানপোয়েল - আপনি অবশ্যই আপনার পাওয়ারশেল সংস্করণটি আপগ্রেড করতে পারবেন। আমরা এটি চকলেট দিয়ে করি। আমি বর্তমানে কর্মস্থলে উইন্ডোজ 7 এ পাওয়ারশেল সংস্করণ 5.0 চালাচ্ছি।
bopapa_1979

1
@ কীথ.ট্রুসডেল - আমি যথেষ্ট নিশ্চিত যে "ডিরেক্টরি + লুকানো" বৈশিষ্ট্যগুলি অন্তর্ভুক্তিযুক্ত এবং কেবল ডিরেক্টরিগুলি অনুসন্ধান করবে। ডিরেক্টরি যোগ করা হচ্ছে পাওয়ারশেলের নতুন সংস্করণগুলিতে আমার দ্রুত হোক। আমি এটা সময় যেতে হবে। সম্পাদনা - "-ডিরেক্টরি" যুক্ত করার ফলে কোনও উপাদান পার্থক্য হয় না, যেমন ডকুমেন্টেশন সূচিত করে। তবে আপনার পরামর্শ অনুসারে ডিরেক্টরি অ্যাট্রিবিউট যুক্ত করা এটিকে আরও ধীর করে দেয়। আমি এখন কেন জানি তা বুঝতে পেরেছি, তবে আমি এটি উভয় উপায়ে মেজার-কমান্ড দিয়ে পরীক্ষা করেছি এবং অতিরিক্ত ডিরেক্টরি বৈশিষ্ট্যযুক্ত তিনটিই তিনটি ছাড়াই ধীর ছিল।
bopapa_1979

18

* নিক্সে, এটি কোনও --bareসংগ্রহস্থলও সন্ধান করবে।

find / -name "*.git" -type d

3
name.gitখালি সংগ্রহস্থলগুলির নামকরণের দরকার নেই কেবল একটি সম্মেলন, যা আমি উদাহরণস্বরূপ অনুসরণ করি না।
আরকাইৎজ জিমনেজ

3
খালি রেপোজিটরিগুলিকে সেই নামকরণের কনভেনশন অনুসরণ করার দরকার নেই, এই ভান্ডারগুলির সর্বজনীন উপায় আছে findকি?
jmlane

11

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

)



3

লিনাক্স এবং ওএস এক্স-তে নিম্নলিখিত কমান্ডটি সম্ভবত দ্রুততম (বিনা ভাণ্ডারগুলিকে উপেক্ষা করে .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এটি উপস্থিত থাকে তবে এটি স্পষ্টভাবে সংযোজন করা হয় না

2

লিনাক্সে, রুট অনুমতি নিয়ে এই কমান্ডটি ব্যবহার করে দেখুন:

find / | grep \\.git$

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


7
findতারপরে ফিল্টারিং দিয়ে আউটপুট সব কিছু দেওয়ার সুযোগ নেই grep। আমি বরং ব্যবহার করব--name "*.git"
গ্রেগরি পাকোস্

2
@ গ্রেগরি পাকোস: পার্থক্য কী?
মিশেল গোকন

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

2
যে কোনও উপায়ে যদি আপনি JUST সন্ধানের আদেশটি ব্যবহার করতে চান, তবে নামটির পরিবর্তে -regex ব্যবহার করা ভাল ... এই ক্ষেত্রে, এই আদেশটিটি ব্যবহার করুন: sudo find / -regex '। * g। গিট'
মিশেল

4
@ মিশেলকোগান ভাল কেন?
মার্ক আমেরিকা

2

একটি সাধারণ পাওয়ারশেল সংস্করণ:

Get-ChildItem . -Recurse -Hidden .git

1
এটি আমার পক্ষে কাজ করেছিল! ধন্যবাদ! আমি কয়েকটি অবস্থানের জন্য কিছু ত্রুটি পেয়েছি যা সাধারণ ব্যবহারকারী হিসাবে চালিত পাওয়ার পাওয়ার স্ক্রিপ্টটিতে অ্যাক্সেস পায় নি, তবে আরও পর্যালোচনা করার পরে, এই জায়গাগুলি আমার যেভাবেই উদ্বিগ্ন হওয়া উচিত নয় (যেমন - C:\users\<username>\PrintHood এছাড়াও, আমি একটি ফাইলে একটি আউটপুট যুক্ত করা দরকারী বলে মনে হয়েছিল এবং যেহেতু আমি কেবল পথ / ডিরেক্টরি সম্পর্কিত তথ্যের জন্যই ফিল্টার করতে কেবল পথটির (যেমন এই স্ক্রিপ্টটি তথ্যের একগুচ্ছ পায়) যত্নশীল। Get-ChildItem . -Recurse -Hidden .git | Out-file -FilePath C:\Dev\GitRepoList.txt
কেইথ ই ট্রুডেল

1

লিনাক্সের জন্য:

dir="/home/${USER}"
dir_not="${dir}/miniconda3"
find /home/aeug -type d -iname ".git" -o -path "${dir_not}" -prune | xargs -0 echo 

1

এরিক বার্চামের উত্তর থেকে ছোট পার্থক্য। এই উত্তরটি শেষ পর্যন্ত \ .গিট যোগ করে, এইটি দেয় না।

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.