Adakah cara agar saya dapat melihat semua repositori git yang ada di komputer saya? Ada perintah untuk itu?
Adakah cara agar saya dapat melihat semua repositori git yang ada di komputer saya? Ada perintah untuk itu?
Jawaban:
Jika Anda menggunakan Linux find / -name ".git", jika tidak, tidak mungkin, itu adalah direktori standar, cukup gunakan program pencarian file / folder OS Anda untuk menemukan .gitfolder bernama.
for d in `find / -name ".git"`; do cd $d/..; echo `pwd`:; git status; echo; done
JAWABAN ASLI : Ini bekerja cukup baik dari Windows Powershell:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Include ".git" -Recurse
EDIT # 1 : -Filter dua kali lebih cepat dari -Include. Inilah solusinya:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse
EDIT # 2 : Keith E. Truesdell menyebutkan mengirimkan output ke file. Lihat komentarnya untuk solusi itu. Saya lebih suka keluaran konsol. Tetapi komentarnya membuat saya berpikir bahwa saya lebih suka jalur lengkap saja, bukan seluruh kekacauan yang dikembalikan secara default. Jika Anda hanya menginginkan jalur lengkap, gunakan yang berikut ini:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.FullName }
CATATAN AKHIR : Solusi di atas hanya mengembalikan repositori Git di bawah direktori saat ini . Jika Anda ingin SEMUA repositori di drive, Anda harus menjalankan perintah sekali dari root setiap drive.
Di * nix, ini juga akan menemukan --barerepositori apa pun .
find / -name "*.git" -type d
name.githanya konvensi, yang saya misalnya, jangan ikuti.
findrepositori tersebut?
Semua repositori Git memiliki HEAD, refsdan objectsentri.
di GNU / apapun,
find -name HEAD -execdir test -e refs -a -e objects \; -printf %h\\n
Hanya memeriksa .gitakan kehilangan banyak repo dan submodul kosong.
Untuk menjadi paranoid penuh pada pemeriksaan, Anda dapat meminta git untuk melakukan semua pemeriksaannya sendiri sebelum mencetak,
find -name HEAD -execdir test -e refs -a -e objects \; \
-execdir sh -ec 'GIT_DIR=$PWD git rev-parse --absolute-git-dir 2>&-' \;
(edit: Saya pikir .git/configfile yang diperlukan, ternyata keluar itu tidak, jadi minimum absolut git init newrepoadalah
mkdir -p newrepo/.git/{objects,refs}
echo ref: refs/heads/master >newrepo/.git/HEAD
)
Di Linux, cara yang lebih cepat adalah:
locate -r "\.git$"
dengan asumsi Anda terus memperbarui database lokasi sudo updatedb
Di Linux dan OS X, perintah berikut mungkin yang tercepat (tanpa mengabaikan repositori .git) jika direktori root findadalah /:
find / -name .git -exec dirname {} \; -prune
Tetapi untuk root yang sebagian besar memiliki repositori di bawahnya, berikut ini mungkin yang tercepat (Anda mungkin ingin mengganti /dengan .atau root lain):
find / -type d -exec test -d {}/.git \; -prune -print
Penjelasan singkat tentang pendahuluan yangfind digunakan (karena tidak ada operator di sini, -andbersifat implisit, yaitu, untuk setiap simpul yang dikunjungi, pendahuluan dievaluasi dari kiri ke kanan sampai salah satu dari mereka mengevaluasi ke false):
-nameadalah truejika namanya cocok (sering kali, tetapi tidak di sini, dengan karakter pengganti)-execmengeksekusi perintah yang diakhiri oleh ;(yang di-escape oleh \untuk menghindari interpretasi oleh shell), dan truejika status kembaliannya adalah0 (mis., OK). Node saat ini tersedia sebagai {}(yang tidak memerlukan pelolosan)-prune selalu true , dan menyebabkan semua node turunan dilewati-type d adalah true untuk direktori-printdiperlukan di sini karena jika -execada, itu tidak ditambahkan secara implisitDi Linux, coba perintah ini dengan izin root:
find / | grep \\.git$
ini hanya mencari setiap file yang diakhiri dengan .git ... Anda dapat melakukannya dengan alat pencarian di Windows, Linux, dll ...
findkeluaran semuanya kemudian difilter grep. Saya lebih suka menggunakan--name "*.git"
/pohon untuk grep kedua, ketika yang pertama dapat melakukan segalanya dan menghindari penggunaan IO yang sangat tidak berguna. Bukan perbedaan nyata bagi pengguna biasanya, tetapi untuk sistem file besar mungkin membuat perbedaan.
Versi PowerShell sederhana:
Get-ChildItem . -Recurse -Hidden .git
C:\users\<username>\PrintHood Juga, saya merasa berguna untuk menambahkan output ke file dan karena saya hanya peduli tentang jalur (karena skrip ini mendapat banyak info) untuk juga memfilter hanya untuk info jalur / direktori. Get-ChildItem . -Recurse -Hidden .git | Out-file -FilePath C:\Dev\GitRepoList.txt
Untuk Linux:
dir="/home/${USER}"
dir_not="${dir}/miniconda3"
find /home/aeug -type d -iname ".git" -o -path "${dir_not}" -prune | xargs -0 echo
Variasi kecil dari jawaban Eric Burcham. Jawaban itu menambahkan \ .git untuk mengakhiri, yang ini tidak.
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.Parent.FullName }
Saya menggunakan perintah ini di awal hari. Ini hanya menambahkan beberapa perintah git di atas. Untuk beberapa alasan, repositori git kita bekerja paling baik jika seseorang menjalankan ambil lalu tarik, tidak tahu kenapa. Dan kami memiliki banyak submodul karena beberapa alasan. Pokoknya, letakkan apa yang Anda butuhkan di antara {}.
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