95 poin oleh xguru 2025-02-26 | 7 komentar | Bagikan ke WhatsApp
  • Scott Chacon, penulis "Pro Git", menjelaskan beberapa pengaturan Git yang ia aktifkan secara global beserta alasannya
  • Banyak dari pengaturan ini sebenarnya dipelajari dari para pengembang yang mengerjakan codebase inti Git
  • Berikut adalah pengaturan ~/.gitconfig yang membuat Git menjadi lebih baik
    [column]  
    ui = auto  
    [branch]  
    sort = -committerdate  
    [tag]  
    sort = version:refname  
    [init]  
    defaultBranch = main  
    [diff]  
    algorithm = histogram  
    colorMoved = plain  
    mnemonicPrefix = true  
    renames = true  
    [push]  
    default = simple  
    autoSetupRemote = true  
    followTags = true  
    [fetch]  
    prune = true  
    pruneTags = true  
    all = true  
    
    # Kenapa tidak dipakai?  
    
    [help]  
    autocorrect = prompt  
    [commit]  
    verbose = true  
    [rerere]  
    enabled = true  
    autoupdate = true  
    [core]  
    excludesfile = ~/.gitignore  
    [rebase]  
    autoSquash = true  
    autoStash = true  
    updateRefs = true  
    
    # Pengaturan sesuai selera pribadi (hapus komentar dan gunakan bila perlu)  
    
    [core]  
    # fsmonitor = true  
    # untrackedCache = true  
    [merge]  
    # (jika versi Git di bawah 2.3, gunakan `diff3`)  
    # conflictstyle = zdiff3  
    [pull]  
    # rebase = true  
    

Bagaimana para pengembang inti Git mengatur Git?

  • Di mailing list Git, Felipe Contreras pernah menyarankan tim inti untuk menghapus semua konfigurasi dan alias lalu mencoba memakai Git bawaan
  • Dari eksperimen ini, 9 pengaturan dan 3 alias diusulkan sebagai nilai bawaan baru
    merge.conflictstyle = zdiff3  
    rebase.autosquash = true  
    rebase.autostash = true   
    commit.verbose = true  
    diff.colorMoved = true  
    diff.algorithm = histogram  
    grep.patternType = perl  
    feature.experimental = true  
    branch.sort = committerdate  
    
  • Pengaturan ini belum diadopsi sebagai nilai bawaan
  • Namun, menarik bahwa banyak pengembang Git merasa sulit menggunakan Git tanpa mengaktifkan sebagian dari pengaturan ini
  • Yang lebih menarik lagi, kebanyakan dari kalian mungkin sama sekali tidak tahu apa arti semua ini
  • Penjelasannya akan dibagi ke dalam tiga kategori
    • Hal yang jelas membuat Git lebih baik (Clearly Makes Git Better)
    • Kenapa tidak dipakai? (Why the Hell Not?)
    • Masalah selera (A Matter of Taste)

# Hal yang jelas membuat Git lebih baik

Mengurutkan daftar branch

  • Secara bawaan Git mengurutkan branch berdasarkan alfabet, tetapi mengurutkannya berdasarkan tanggal commit terbaru bisa lebih berguna
  • Dengan pengaturan berikut, branch akan diurutkan berdasarkan commit terbaru dan ditampilkan dalam format kolom
    git config --global column.ui auto  
    git config --global branch.sort -committerdate  
    

Mengurutkan daftar tag

  • Untuk mengurutkan tag berdasarkan versi, bukan alfabet, gunakan pengaturan berikut
    git config --global tag.sort version:refname  
    

Menetapkan nama branch bawaan

  • Untuk menetapkan nama branch bawaan saat menginisialisasi repositori baru, gunakan pengaturan berikut
    git config --global init.defaultBranch main  
    

Pengaturan diff yang lebih baik

  • Ubah algoritma diff bawaan menjadi histogram untuk menghasilkan perbandingan yang lebih akurat
  • Untuk mendeteksi perpindahan kode dan menampilkannya dengan warna, tambahkan pengaturan berikut
    git config --global diff.algorithm histogram  
    git config --global diff.colorMoved plain  
    git config --global diff.mnemonicPrefix true  
    git config --global diff.renames true  
    

Pengaturan push yang lebih baik

  • Pengaturan berikut dapat meningkatkan perilaku push
    git config --global push.default simple  
    git config --global push.autoSetupRemote true  
    git config --global push.followTags true  
    

Pengaturan fetch yang lebih baik

  • Untuk menghapus branch dan tag yang tidak diperlukan secara otomatis saat fetch, gunakan pengaturan berikut
    git config --global fetch.prune true  
    git config --global fetch.pruneTags true  
    git config --global fetch.all true  
    

# Kenapa tidak dipakai?

Prompt koreksi otomatis

  • Untuk mendeteksi typo saat mengetik perintah dan menampilkan saran, gunakan pengaturan berikut
    git config --global help.autocorrect prompt  
    

Diff saat commit

  • Untuk menampilkan isi perubahan saat menulis pesan commit, tambahkan pengaturan berikut
    git config --global commit.verbose true  
    

Menggunakan ulang penyelesaian konflik

  • Untuk secara otomatis menggunakan ulang penyelesaian konflik sebelumnya, gunakan pengaturan berikut
    git config --global rerere.enabled true  
    git config --global rerere.autoupdate true  
    

Menetapkan file .gitignore global

  • Untuk menentukan file yang akan diabaikan secara global, atur seperti berikut
    git config --global core.excludesfile ~/.gitignore  
    

Meningkatkan pengaturan rebase

  • Untuk melakukan squash dan stash secara otomatis saat rebase, gunakan pengaturan berikut
    git config --global rebase.autoSquash true  
    git config --global rebase.autoStash true  
    git config --global rebase.updateRefs true  
    

# Masalah selera

Tampilan konflik merge yang lebih baik

  • Untuk juga menampilkan versi dasar saat terjadi konflik merge, pertimbangkan pengaturan berikut
    git config --global merge.conflictstyle zdiff3  
    

Menggunakan rebase saat pull

  • Untuk menjalankan rebase secara otomatis saat git pull, atur seperti berikut
    git config --global pull.rebase true  
    

Meningkatkan kecepatan deteksi perubahan file

  • Untuk meningkatkan performa git status dan sejenisnya, Anda dapat menggunakan pengaturan berikut
    git config --global core.fsmonitor true  
    git config --global core.untrackedCache true  
    

# Penutup

  • Dengan pengaturan ini, Git bisa digunakan dengan lebih nyaman, dan sebagian di antaranya juga aktif dipakai oleh pengembang inti
  • Dengan mengoptimalkan pengaturan Git, alur kerja dapat ditingkatkan dan Git bisa digunakan dengan lebih efisien

7 komentar

 
brainypooh 2025-02-28

"Yang lebih menarik adalah kenyataan bahwa sebagian besar dari kalian sama sekali tidak tahu arti ini" — nyelekit banget. serem banget

 
tested 2025-02-27

Bukan --global, melainkan -global?

 
xguru 2025-02-27

Yang benar adalah --global. Ada kekeliruan saat copy-paste. Sudah diperbaiki.

 
ilikeall 2025-02-26

Bagus juga fitur penggunaan ulang penyelesaian konflik.

 
tujuc 2025-02-26

Saat melakukan diff, saya memakai git-delta untuk melihatnya dalam format TUI.

  10   │ [core]  
  11   │     pager = delta  
  12   │ [interactive]  
  13   │     diffFilter = delta --color-only  
  14   │ [delta]  
  15   │     line-numbers = true  
  16   │     side-by-side = true  
  17   │     navigate = true  
  18   │     diff-so-fancy = true  
  19   │     hyperlinks = true  

Kalau malas mengutak-atik ini itu, pakai tig juga.... hahaha
Ada yang lebih bagus mungkin...?

 
GN⁺ 2025-02-26

Komentar Hacker News

  • Alias favorit saya adalah git out. Ini menampilkan semua commit yang belum di-push. Saya memakainya terus
    [alias]   
      out = "log @{u}.."   
    
  • Sementara banyak orang memikirkan ~/.gitconfig mereka, saya sangat merekomendasikan delta sebagai pendamping untuk git CLI
  • ~/.gitconfig saya seperti ini
    [alias]  
      co = checkout  
      ci = commit  
      st = status  
      br = branch  
      hist = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short  
      type = cat-file -t  
      dump = cat-file -p  
      dft = difftool  
    [tag]  
      sort = version:refname  
    [tar "tar.xz"]  
      command = xz -c  
    [tar "tar.zst"]  
      command = zstd -T0 -c  
    [log]  
      date = iso-local  
    [pull]  
      ff = only  
    [diff]  
      tool = difftastic  
    [safe]  
      directory = *  
    [advice]  
      detachedHead = false  
    [init]  
      defaultBranch = master  
    
  • Saya penasaran kenapa penandatanganan commit tidak dimasukkan dalam konfigurasi ini. Ini bisa dilakukan dengan mudah memakai kunci SSH modern
    [user]  
      name = xyz  
      email = xyz@domain.com  
      signingkey = ~/.ssh/id_algorithm.pub  
    
    [commit]  
      gpgsign = true  
    [tag]  
      gpgsign = true  
    
    [gpg]  
      format = ssh  
    
    # restrict allowed signers  
    # echo "$(git config --get user.email) namespaces=\"git\" $(cat ~/.ssh/id_*.pub)" >> ~/.git_allowed_signers  
    [gpg "ssh"]  
      allowedSignersFile = ~/git_allowed_signers  
    
    • Di GitHub, Anda bisa menambahkan kunci SSH untuk autentikasi dan penandatanganan. Memang harus ditambahkan dua kali, tetapi setelah diatur, label unverified bisa hilang dari commit
  • Opsi konfigurasi Git populer dari Julia Evans
  • Opsi tambahan yang saya suka
    [apply]  
      # Remove trailing whitespaces  
      whitespace = fix  
    [color "diff"]  
      whitespace = red reverse  
    [diff]  
      colorMovedWS = allow-indentation-change  
    [format]  
      pretty = fuller  
    [log]  
      date = iso  
    [pull]  
      ff = only  
    
  • Konfigurasi saya ada di sini. Pada dasarnya sebagian besar sudah diatur sejak awal (kecuali column UI). Mungkin karena saya pernah membaca tulisan bagus dari Scott dan lainnya
  • Saya setuju dengan rekomendasi memakai (z)diff3. Artikelnya meremehkan betapa pentingnya ini. Diff tiga arah memungkinkan penyelesaian konflik yang tidak mungkin dilakukan dengan gaya default
  • Saya baru tahu bahwa git bisa diatur untuk memakai pager favorit Anda. Jadi saya mengaturnya ke bat