git 2.7 (Q4 2015) şube doğrudan kullanarak sıralama tanıtacak git branch
:
Bkz aa3bc55 işlemek , aedcb7d işlemek , 1511b22 taahhüt , f65f139 taahhüt , ... (2015 Eylül 23), aedcb7d işlemek , 1511b22 taahhüt , ca41799 işlemek , (24 Eylül 2015) ve taahhüt f65f139 , ... (23 Eyl 2015) yazan Karthik Nayak ( KarthikNayak
) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster
- içinde 7f11b48 tamamlama 2015 15 Eki)
Özellikle, aedcb7d'yi taahhüt edin :
branch.c
: ' ref-filter
' API'lerini kullanın
Refs sıralama yoluyla yineleme için ' branch.c
' kullanım ' ref-filter
' API'leri yapın. Bu, ' branch.c
' yerine kullanılan kodun çoğunu ' ref-filter
' kütüphanesine yapılan çağrılarla kaldırır .
Bu seçenek ekler--sort=<key>
:
Verilen anahtara göre sıralayın. Değerin azalan düzeninde sıralamak için
önek -
.
--sort=<key>
Seçeneği birden çok kez kullanabilirsiniz, bu durumda son anahtar birincil anahtar olur.
Desteklenen tuşlar, ile aynıdırgit for-each-ref
.
Sıralama düzeni, tam refname ( refs/...
önek dahil ) temelinde sıralamaya göre sıralanır . Bu önce önce HEAD (varsa), sonra yerel şubeleri ve son olarak uzaktan izleme şubelerini listeler.
Buraya:
git branch --sort=-committerdate
Veya (Git 2.19 ile aşağıya bakın)
# if you are sure to /always/ want to see branches ordered by commits:
git config --global branch.sort -committerdate
git branch
Ayrıca bkz . Karthik Nayak ( ) tarafından 9e46833 (30 Ekim 2015) taahhüdü .
Yardım eden: Junio C Hamano ( ) . (Tarafından Birleştirilmiş - Junio C Hamano - içinde 415095f taahhüt 2015 3 Kasım,)KarthikNayak
gitster
gitster
Sayısal değerlere (örneğin --sort=objectsize
) göre sıralama yaparken, her iki ref aynı değerde olduğunda geri dönüş karşılaştırması yoktur. Bu, Johannes Sixt ( $ gmane / 280117 ) tarafından belirtildiği gibi beklenmedik sonuçlara neden olabilir (yani eşit değerlere sahip ref'lerin listelenme sırası önceden belirlenemez ).
Dolayısıyla, diğer ölçüt eşit olduğunda yeniden adlandırmaya dayalı alfabetik karşılaştırmaya geri dönüş .
$ git branch --sort=objectsize
* (HEAD detached from fromtag)
branch-two
branch-one
master
Git 2.19 ile, sıralama düzeni varsayılan olarak ayarlanabilir.
git branch
Bir yapılandırma destekler branch.sort
gibi git tag
zaten yapılandırma vardı tag.sort
. Samuel Maftoul'un (``) taahhüt ettiği 560ae1c (16 Ağu 2018)
bölümüne bakınız . (Tarafından Birleştirilmiş Junio C Hamano - - in d89db6f işlemek , 27 Ağustos 2018)
gitster
branch.sort:
Bu değişken, tarafından görüntülendiğinde dalların sıralama düzenini kontrol eder git-branch
.
" --sort=<value>
" Seçeneği belirtilmezse, bu değişkenin değeri varsayılan olarak kullanılır.
Uzak dalları listelemek için tuşunu kullanın git branch -r --sort=objectsize
. -r
Bayrak yerine yerel şube uzak dalları listelemek neden olur.
Git 2.27 (Q2 2020) ile, " git branch
" ve diğer " for-each-ref
" varyantları --sort=<key>
artan öncelik sırasına göre birden fazla seçeneği kabul ettiler , ancak " --ignore-case
" işleme ve düzeltilen refname ile bağlantı kopma etrafında birkaç kırılma yaşandı.
Bkz. Taahhüt 7c5045f , taahhüt 76f9e56 (03 Mayıs 2020), Jeff King ( peff
) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster
- içinde 6de1630 tamamlama 2020 08 Mayıs)
ref-filter
: yedek refname sıralamasını yalnızca tüm kullanıcı sıralamasından sonra uygulayın
İmzalayan: Jeff King
Taahhüt 9e468334b4 (" ref-filter
: alfabetik karşılaştırma için geri dönüş", 2015-10-30, Git v2.7.0-rc0 - toplu iş # 10'da listelenen birleştirme ), ref filtresinin, yeniden adlandırma karşılaştırmasına geri dönmeyi öğretti.
Ancak bunu yanlış düzeyde yaptı ve tüm sıralama anahtarları tükendikten sonra kullanıcıdan tek bir " " anahtarı için karşılaştırma sonucunu geçersiz kıldı .
--sort
Bu, tek bir " --sort
" seçeneği için doğru bir şekilde çalıştı , ancak birden fazla seçenek için işe yaramadı .
İlk anahtardaki herhangi bir bağı refname ile koparırız ve ikinci anahtarı asla değerlendirmeyiz.
Konuları daha da ilginç hale getirmek için, bu yedeklemeyi yalnızca bazen uyguladık! Dize karşılaştırması gerektiren
" taggeremail
" gibi bir alan strcmp()
için, 0 olsa bile sonucunu gerçekten döndürürdük.
Ancak " value
" gibi sayısal " " alanlar taggerdate
için yedeklemeyi uyguladık. Bu yüzden çoklu sıralama testimiz bunu kaçırdı: taggeremail
ana karşılaştırma olarak kullanıyor .
Şimdi çok daha titiz bir test ekleyerek başlayalım. İki etiketleyici e-postasının, tarihinin ve yeniden adının her bir kombinasyonunu ifade eden bir dizi taahhüdümüz olacak. Sonra sıralamamızın doğru önceliğe uygulandığını doğrulayabiliriz ve hem dize hem de değer karşılaştırıcılarına çarpacağız.
Bu, hatayı gösterir ve düzeltmesi basittir: compare_refs()
tüm ref_sorting
tuşlar tükendikten sonra yedeklemeyi dış işleve taşımak .
Dış işlevde "ignore_case"
, her bir ref_sorting
öğenin parçası olduğu için bir bayrağımız olmadığını unutmayın . Kullanıcının anahtarlarını eşleştirmek için kullanmadığımız için böyle bir geri dönüşün ne olması gerektiği tartışmalıdır.
Ama şimdiye kadar bu bayrağa saygı duymaya çalışıyoruz, bu yüzden en az invaziv olan şey bunu yapmaya devam etmektir.
Geçerli koddaki tüm arayanlar ya tüm anahtarlar için ya da hiçbiri için bayrağı ayarladığından, bayrağı ilk anahtardan alabiliriz. Kullanıcının gerçekten anahtarların büyük / küçük harf duyarsızlığını ayrı ayrı çevirebileceği varsayımsal bir dünyada, bu durumu bir battaniyeden " --ignore-case
" ayırmak için kodu genişletmek isteyebiliriz .