Saya perlu menghapus cabang lama dan tidak terawat dari repositori jarak jauh kami. Saya mencoba menemukan cara untuk membuat daftar cabang jarak jauh berdasarkan tanggal modifikasi terakhir mereka, dan saya tidak bisa.
Apakah ada cara mudah untuk membuat daftar cabang jarak jauh dengan cara ini?
git
maintenance
administration
branch
Roni Yaniv
sumber
sumber
Jawaban:
commandlinefu memiliki 2 proposisi menarik:
atau:
Itu untuk cabang lokal, dalam sintaksis Unix. Dengan menggunakan
git branch -r
, Anda juga dapat menampilkan cabang jarak jauh:Michael Forrest menyebutkan dalam komentar bahwa zsh membutuhkan pelarian untuk
sed
ekspresi:kontinuity menambahkan dalam komentar :
Dalam banyak baris:
Catatan: n8tr 's jawaban , berdasarkan
git for-each-ref refs/heads
lebih bersih. Dan lebih cepat .Lihat juga " Opsi hanya nama untuk
git branch --list
? "Secara lebih umum, tripleee mengingatkan kita dalam komentar :
(Saya menggambarkan titik itu pada tahun 2014 dengan " Apa perbedaan antara
$(command)
dan`command`
dalam pemrograman shell? ")sumber
/json
ke akhir URL commandlinefu.com dan Anda akan mendapatkan semua perintah sebagai JSON.Inilah yang saya gunakan:
Ini hasilnya:
Untuk cabang jarak jauh, cukup gunakan "ref / remote" alih-alih "ref / head":
Membangun jawaban n8tr , jika Anda juga tertarik dengan penulis terakhir di cabang, dan jika Anda memiliki alat "kolom" yang tersedia, Anda dapat menggunakan:
Yang akan memberi Anda:
Anda mungkin ingin memanggil "git fetch --prune" sebelum memiliki informasi terbaru.
sumber
authordate
(yang tampaknya ketika cabang pertama kali dibuat?). Jika Anda mengubahauthordate
kecommitterdate
maka Anda akan melihat tanggal terbaru komit dalam setiap cabang. Seperti itu:git for-each-ref --sort='-committerdate:iso8601' --format=' %(committerdate:iso8601)%09%(refname)' refs/heads
Membangun Olivier Croquette , saya suka menggunakan tanggal relatif dan memperpendek nama cabang seperti ini:
Yang memberi Anda output:
Saya sarankan membuat file Bash untuk menambahkan semua alias favorit Anda dan kemudian membagikan skrip ke tim Anda. Berikut ini contoh untuk menambahkan yang ini:
Kemudian Anda bisa melakukan ini untuk mendapatkan daftar cabang lokal yang diformat dan diurutkan dengan baik:
sumber
Hanya untuk menambahkan komentar oleh @VonC, ambil solusi pilihan Anda dan tambahkan ke daftar alias ~ / .gitconfig Anda untuk kenyamanan:
Kemudian "git branchdate" sederhana mencetak daftar untuk Anda ...
sumber
--format='%(authordate)%09%(objectname:short)%09%(refname)'
yang mendapatkan hash pendek dari masing-masing cabang juga.| tac
, hanya--sort='authordate'
bukan-authordate
Inilah yang saya hasilkan setelah meninjau ini juga .
Itu
PREV_REF
cek adalah untuk menghapus duplikat jika lebih dari satu cabang poin yang sama komit. (Seperti di cabang lokal yang ada di jarak jauh juga.)Perhatikan bahwa sesuai permintaan OP,
git branch --merged
dangit branch --no-merged
berguna dalam mengidentifikasi cabang mana yang dapat dengan mudah dihapus.[ https://git-scm.com/docs/git-branch]
sumber
Cabang jarak jauh yang diurutkan dan tanggal komit terakhir untuk setiap cabang.
sumber
Saya membuat dua varian, berdasarkan jawaban VonC .
Varian pertama saya:
Ini menangani cabang lokal dan jarak jauh (
-a
), menangani keadaan kepala terpisah (semakin lama perintah, meskipun solusinya agak mentah - itu hanya mengganti info cabang yang terlepas dengan kata kunci KEPALA), menambahkan dalam subjek komit (% s ), dan menempatkan sesuatu ke dalam kolom melalui karakter pipa literal dalam string format dan meneruskan hasil akhir kecolumn -t -s "|"
. (Anda bisa menggunakan apa pun sebagai pemisah, selama itu adalah sesuatu yang tidak Anda harapkan di sisa output.)Varian kedua saya cukup rumit, tetapi saya benar-benar menginginkan sesuatu yang masih memiliki indikator "ini adalah cabang Anda saat ini" seperti yang dilakukan perintah cabang.
Ini mengubah
*
yang menandai cabang saat ini menjadi kata kunci, dan ketika badan loop melihat kata kunci itu malah menetapkan bendera dan tidak menghasilkan apa-apa. Bendera digunakan untuk menunjukkan bahwa pemformatan alternatif harus digunakan untuk baris berikutnya. Seperti yang saya katakan, ini benar-benar retas, tetapi berhasil! (Sebagian besar. Untuk beberapa alasan, kolom terakhir saya semakin ketinggalan zaman pada baris cabang saat ini.)sumber
git for-each-ref
adalah cara yang mudah untuk memproses cabang. Anda harus menjalankan ref simbolik sekali untuk mendapatkan cabang saat ini.Saya melakukan alias sederhana, tidak yakin apakah ini yang sebenarnya ditanyakan, tetapi sederhana
Saya melakukan ini karena saya ingin mendaftar semua cabang bukan hanya cabang lokal saya, yang hanya melakukan perintah di atas
alias git_brs="git fetch && git branch -av --format='\''%(authordate)%09%(authordate:relative)%09%(refname)'\'"
Anda dapat pipa di atas ke
grep origin
untuk mendapatkan asal-usul sajaIni mencantumkan semua cabang bersama dengan tanggal terakhir yang dimodifikasi, membantu saya memutuskan mana yang harus saya tarik untuk versi terbaru
Ini menghasilkan jenis tampilan di bawah ini
Coba dan beri tahu saya jika itu membantu, senang gitting
sumber
Atau Anda dapat menggunakan skrip PHP saya, https://gist.github.com/2780984
sumber
Inilah fungsi yang dapat Anda tambahkan ke bash_profile Anda untuk mempermudah ini.
Penggunaan saat dalam repositori Git:
branch
mencetak semua cabang lokalbranch -r
mencetak semua cabang jarak jauhFungsi:
sumber
Di PowerShell, berikut ini memperlihatkan cabang pada remote yang sudah digabungkan dan setidaknya berumur dua minggu (
author:relative
format mulai menampilkan minggu bukannya hari dua minggu):sumber