Meld'i git difftool'um olarak nasıl kurabilirim ve kullanabilirim?
git difftool dif'yi terminalinizdeki diff çıkışını göstermek yerine GUI dif programı (yani Meld) kullanarak görüntüler.
GUI programını komut satırında ayarlayabilmenize rağmen -t <tool> / --tool=<tool>
, .gitconfig
dosyanızda yapılandırmak daha mantıklıdır . [Not: En alttaki tırnak işaretleri ve Windows yollarıyla ilgili bölümlere bakın.]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[Not: Bu ayarlar, davranışları git diff
her zamanki gibi çalışmaya devam edecek olan davranışını değiştirmez .]
Sen kullanmak git difftool
kullanmak tam olarak aynı şekilde git diff
. Örneğin
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
Düzgün yapılandırılmışsa farkın GUI arabirimini kullanarak görüntülendiği bir Meld penceresi açılacaktır.
Meld GUI pencere camlarının sırası sırasına ile kontrol edilebilir $LOCAL
ve $REMOTE
de cmd
sağ bölmede sol bölmede ve burada gösterilmiş olan dosya demek,. Onları başka bir şekilde istiyorsanız, onları şöyle değiştirin:
cmd = meld "$REMOTE" "$LOCAL"
Son olarak, prompt = false
satır git'in Meld'i başlatmak isteyip istemediğinizi sormasını durdurur, varsayılan olarak git bir istem verir.
Meld'i git mergetool'um olarak nasıl kurabilirim ve kullanabilirim?
git mergetool , birleştirme sırasında oluşan birleştirme çakışmalarını çözmek için bir GUI birleştirme programı (örn. Meld) kullanmanızı sağlar.
Difftool gibi GUI programını komut satırında kullanarak ayarlayabilirsiniz, -t <tool> / --tool=<tool>
ancak daha önce olduğu gibi, .gitconfig
dosyanızda yapılandırmak daha mantıklıdır . [Not: En alttaki tırnak işaretleri ve Windows yollarıyla ilgili bölümlere bakın.]
# Add the following to your .gitconfig file.
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
git mergetool
Gerçek bir birleştirme gerçekleştirmek için KULLANMAYIN . Kullanmadan önce git mergetool
git ile her zamanki gibi birleştirme gerçekleştirirsiniz. Örneğin
git checkout master
git merge branch_name
Bir birleştirme çakışması varsa git şöyle bir şey görüntüler:
$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.
Bu noktada file_name
, birleştirme çakışması bilgileriyle kısmen birleştirilmiş dosyayı içerecektir (içindeki tüm >>>>>>>
ve <<<<<<<
girişlerinin bulunduğu dosyadır ).
Mergetool artık birleştirme çakışmalarını çözmek için kullanılabilir. Çok kolay başlıyorsunuz:
git mergetool
Düzgün yapılandırılırsa, bir Meld penceresi açılarak 3 dosya görüntülenir. Her dosya, GUI arayüzünün ayrı bir bölmesinde bulunacaktır.
.gitconfig
Yukarıdaki örnek girişte, satır olarak 2 satır önerilir [mergetool "meld"]
cmd
. Aslında, gelişmiş kullanıcıların cmd
satırı yapılandırması için her türlü yol vardır , ancak bu, bu cevabın kapsamı dışındadır.
Bu cevap cmd
, aralarında çoğu kullanıcıya hitap edecek 2 alternatif çizgiye sahiptir ve aracı bir sonraki karmaşıklık seviyesine taşımak isteyen ileri düzey kullanıcılar için iyi bir başlangıç noktası olacaktır.
İlk olarak parametrelerin anlamı şudur:
$LOCAL
geçerli daldaki dosyadır (örn. ana).
$REMOTE
, birleştirilen daldaki dosyadır (örneğin, şube_adı).
$MERGED
içinde birleştirme çakışması bilgileri bulunan kısmen birleştirilmiş dosyadır.
$BASE
paylaşılan taahhüt atasıdır $LOCAL
ve $REMOTE
bu, dosyayı içeren dalın $REMOTE
orijinal olarak oluşturulduğu haliyle olduğu anlamına gelir .
Bunlardan birini kullanmanızı öneririm:
[mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
veya:
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
Seçim kullanımına olup olmadığıdır $MERGED
veya $BASE
aradaki $LOCAL
ve $REMOTE
.
Her iki durumda da Meld 3 bölmeleri gösterir $LOCAL
ve $REMOTE
sol ve sağ bölmelerinde ve ya $MERGED
veya $BASE
orta bölmede.
Her iki durumda da orta bölme, birleştirme çakışmalarını çözmek için düzenlemeniz gereken dosyadır. Aradaki fark, hangi başlangıç düzenleme pozisyonunu tercih edeceğinizdir; $MERGED
Birleştirme çatışma bilgilerle veya kısmen birleştirilmiş dosyayı içeren dosya için $BASE
paylaşılan atası taahhüt için $LOCAL
ve $REMOTE
. [Her iki cmd
satır da faydalı olabileceğinden ikisini de dosyamda .gitconfig
saklıyorum. Çoğu zaman $MERGED
çizgiyi kullanıyorum ve çizgi $BASE
yorumlanıyor, ancak $BASE
satırı kullanmak istersem yorum yapma değiştirilebiliyor .]
Çıktı Dosyası Not: Do not endişe --output "$MERGED"
kullanılan cmd
bakılmaksızın olmadığı $MERGED
veya $BASE
daha önce kullanılmıştır cmd
hattı. Bu --output
seçenek, Meld'e hangi dosya adı git'in çakışma çözümleme dosyasının kaydedilmesini istediğini söyler. Meld, kullandığınız $MERGED
veya $BASE
başlangıçtaki düzenleme noktanızdan bağımsız olarak bu dosyadaki çakışma düzenlemelerinizi kaydeder .
Birleştirme çakışmalarını gidermek için orta bölmeyi düzenledikten sonra dosyayı kaydedin ve Meld penceresini kapatın. Git güncellemeyi otomatik olarak yapar ve geçerli daldaki (örn. Ana dosya) dosya artık orta bölmede bulduğunuz her şeyi içerecektir.
git .orig
, orijinal dosya adına ekleyerek içindeki birleştirme çakışması bilgileriyle kısmen birleştirilmiş dosyanın yedeğini almış olacaktır . örn file_name.orig
. Birleştirme işleminden memnun olup olmadığınızı ve yapmak isteyebileceğiniz tüm testleri gerçekleştirdikten sonra .orig
dosya silinebilir.
Bu noktada, artık değişiklikleri taahhüt etme taahhüdünde bulunabilirsiniz.
Meld'deki birleştirme çakışmalarını düzenlerken, Meld kullanımını bırakmak ve orta bölmede birleştirme çözünürlüğü dosyasını kaydetmeden Meld'den çıkın. git iletiyi yanıtlar file_name seems unchanged
ve sonra Was the merge successful? [y/n]
yanıtlarsanız n
, birleştirme çakışması çözümlemesi iptal edilir ve dosya değişmeden kalır. Dosyayı herhangi bir noktada Meld'e kaydettiyseniz, git'ten uyarı ve istem almazsınız. [Tabii ki sadece dosyayı silebilir ve .orig
git sizin için yapılmış yedekleme dosyası ile değiştirebilirsiniz .]
Birleştirme çakışmalarına sahip birden fazla dosyanız varsa git, hepsi bitene kadar her biri için birbiri ardına yeni bir Meld penceresi açar. Hepsi aynı anda açılmayacak, ancak çakışmaları bir arada düzenlemeyi bitirip Meld'i kapattığınızda, git bir sonrakini açar ve tüm birleştirme çakışmaları çözülene kadar devam eder.
Canlı bir projede kullanmadan git mergetool
önce kullanımını test etmek için kukla bir proje oluşturmak mantıklı olacaktır . İşletim sisteminizin satırdaki tırnak işaretlerinden kaçmanızı gerektirmesi durumunda testinizde boşluk içeren bir dosya adı kullandığınızdan emin olun , aşağıya bakın.cmd
Alıntı karakterlerden kaçış
Bazı işletim sistemlerinin tırnak işaretleri arasında yer alması gerekebilir cmd
. Daha az deneyimli kullanıcılar, yapılandırma komut satırlarının boşluk içeren dosya adlarıyla sınanması gerektiğini ve cmd
satırlar boşluk içeren dosya adlarıyla çalışmazsa, tırnak işaretlerinden kaçmayı deneyin. Örneğin
cmd = meld \"$LOCAL\" \"$REMOTE\"
Bazı durumlarda daha karmaşık alıntılardan kaçış gerekebilir. Aşağıdaki Windows yolu bağlantılarından 1'i, her alıntıdan üç kez kaçmanın bir örneğini içerir. Bir delik ama bazen gerekli. Örneğin
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Windows yolları
Windows kullanıcılarının muhtemelen Meld cmd
hatlarına ek yapılandırma eklemesi gerekecektir . meldc
Komut satırından Windows'ta çağrılacak şekilde tasarlanmış tam yolunu kullanmaları gerekebilir veya bir sarıcı kullanmak isteyebilir veya kullanmak isteyebilirler. Aşağıda , Windows için doğru Meld satırını ayarlamakla ilgili olan StackOverflow sayfalarını okumalıdırlar cmd
. Linux kullanıcısı olduğum için, çeşitli Windows cmd
satırlarını test edemiyorum ve konu hakkında Meld'e tam bir yol meldc
eklenerek veya Meld program klasörünü eklemenizi tavsiye etmekten başka daha fazla bilgim yok path
.
Meld ile sondaki boşlukları yok saymak
Meld, GUI'de yapılandırılabilecek bir dizi tercihe sahiptir.
Tercihler Text Filters
sekmesinde, bir fark gerçekleştirirken yorumlar gibi şeyleri yok saymak için birkaç yararlı filtre vardır. Yoksayılacak filtreler olmasına rağmen All whitespace
ve Leading whitespace
yoksay Trailing whitespace
filtresi yok (bu, Meld posta listesine ek olarak önerildi, ancak sürümümde mevcut değil).
Sondaki boşlukları yok saymak, özellikle işbirliği yaparken genellikle çok kullanışlıdır ve Meld tercihleri Text Filters
sekmesindeki basit bir normal ifadeyle kolayca eklenebilir .
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
Umarım bu herkese yardımcı olur.