क्या कोई ऐसा तरीका है जिसमें मैं अपने मशीन पर मौजूद सभी गिट रिपॉजिटरी देख सकता हूं? उसके लिए कोई आज्ञा?
क्या कोई ऐसा तरीका है जिसमें मैं अपने मशीन पर मौजूद सभी गिट रिपॉजिटरी देख सकता हूं? उसके लिए कोई आज्ञा?
जवाबों:
यदि आप लिनक्स में हैं 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
EDIT # 1 : -फिल्टर दोगुना तेज है -Include। यहाँ वह समाधान है:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse
EDIT # 2 : कीथ ई। ट्रूसेडेल ने फ़ाइल में आउटपुट भेजने का उल्लेख किया। उस समाधान के लिए उसकी टिप्पणी देखें। मैं कंसोल आउटपुट पसंद करता हूं। लेकिन उनकी टिप्पणी ने मुझे यह सोचने पर मजबूर कर दिया कि मैं केवल पूर्ण पथ को पसंद करता हूं, न कि पूरी गड़बड़ जो कि डिफ़ॉल्ट रूप से वापस आ जाती है। यदि आप चाहते हैं कि बस पूर्ण पथ, निम्नलिखित का उपयोग करें:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.FullName }
अंतिम नोट : उपरोक्त समाधान मौजूदा निर्देशिका के तहत केवल गिट रिपॉजिटरी लौटाते हैं । यदि आप किसी ड्राइव पर सभी रिपॉजिटरी चाहते हैं, तो आपको प्रत्येक ड्राइव के रूट से एक बार कमांड चलाना चाहिए।
* Nix पर, यह कोई --bareरिपॉजिटरी भी पाएगा ।
find / -name "*.git" -type d
name.gitकेवल एक कन्वेंशन नाम दिया जाना चाहिए , जिसका मैं उदाहरण के लिए अनुसरण नहीं करता।
find?
Git रिपॉजिटरी सभी में है HEAD, refsऔर objectsप्रविष्टियाँ।
GNU पर / कुछ भी,
find -name HEAD -execdir test -e refs -a -e objects \; -printf %h\\n
बस के लिए जाँच .gitकई नंगे repos और submodules याद करेंगे।
जाँच पर पूर्ण-विरोध जाने के लिए, आप पूछ सकते हैं कि मुद्रण से पहले अपनी सभी जाँचें करने के लिए 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$
यह सिर्फ उन सभी फाइलों को खोजता है जो .it के साथ समाप्त होती हैं ... आप इसे विंडोज, लिनक्स आदि में खोज टूल के साथ कर सकते हैं ...
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
लिनक्स के लिए:
dir="/home/${USER}"
dir_not="${dir}/miniconda3"
find /home/aeug -type d -iname ".git" -o -path "${dir_not}" -prune | xargs -0 echo
एरिक बुरचम के जवाब से छोटा बदलाव। यह उत्तर समाप्त होने के लिए \ .गित जोड़ता है, यह नहीं है।
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.Parent.FullName }
मैं दिन की शुरुआत में इस कमांड का उपयोग करता हूं। यह बस ऊपर कुछ git कमांड जोड़ता है। किसी कारण के लिए, हमारी गिट रिपॉजिटरी सबसे अच्छा काम करती है अगर कोई एक चलता है तो खींचता है, पता नहीं क्यों। और हमारे पास किसी कारण से बहुत सारे सबमॉड्यूल हैं। वैसे भी, आप {} के बीच में क्या जरूरत है डाल दिया।
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