Fatmawati Achmad Zaenuri/Shutterstock.com
Bir metin dosyasının iki revizyonu arasındaki farkları görmeniz mi gerekiyor? O zaman
diff , ihtiyacınız olan komuttur. Bu eğitim, Linux ve macOS'ta
diff nasıl kullanılacağını kolay bir şekilde gösterir.
Diff içine dalış
diff komutu iki dosyayı karşılaştırır ve ikisi arasındaki farkların bir listesini oluşturur. Daha doğru olması için, ikinci dosyaya uyması için ilk dosyada yapılması gereken değişikliklerin bir listesini oluşturur. Bunu aklınızda tutarsanız,
diff çıktının anlaşılmasını daha kolay bulacaksınız.
diff komutu, kaynak kod dosyaları arasındaki farkları bulmak ve patch komutu gibi diğer programlar tarafından okunabilecek ve uygulanabilecek bir çıktı üretmek için tasarlanmıştır. Bu derste,
diff kullanmanın en yararlı insan dostu yollarını inceleyeceğiz.
Hemen dalın ve iki dosyayı analiz edelim. Komut satırındaki dosyaların sırası, hangi dosya
diff 'ilk dosya' olarak kabul ettiğini ve hangisinin “ikinci dosya” olarak kabul ettiğini belirler. Her iki dosya da fonetik alfabeyi içeriyor, ancak ikinci dosya, alpha2, iki dosyanın aynı olmaması için biraz daha düzenleme yaptı.
Dosyaları bu komutla karşılaştırabiliriz.
diff , boşluk, ilk dosyanın adı, boşluk, ikinci dosyanın adını yazın ve ardından Enter tuşuna basın.
diff alpha1 alpha2
Bu çıktıyı nasıl değerlendiriyoruz? Ne aradığınızı öğrendikten sonra o kadar da kötü değil. Her fark sırayla tek bir sütunda listelenir ve her fark etiketlenir. Etiket
4c4 gibi bir harfin her iki tarafını da içerir. İlk sayı, alfa1'deki satır numarası ve ikinci sayı, alfa2'deki satır numarasıdır. Ortadaki harf olabilir:
- c : İlk dosyadaki satırın ikinci dosyadaki satırla eşleşmesi için değiştirilmesi gerekiyor.
- d : İlk dosyadaki satır, ikinci dosya ile eşleşecek şekilde silinmelidir.
- a : İkinci dosyaya uyması için ilk dosyaya ekstra içerik eklenmelidir.
4c4 ,
4c4 dördüncü satırına göre değiştirilmesi gerektiğini söylüyor. Bu
diff bulunan iki dosya arasındaki ilk fark.
< İle başlayan satırlar, bizim örneğimizde alfa1'deki ilk dosyaya,
> ile başlayan satırlar ise ikinci dosya olan alpha2'ye başvurur.
< Delta satırı bize Delta kelimesinin alfa1'deki dördüncü satırın içeriği olduğunu söyler.
> Dave satırı bize Dave kelimesinin alpha2'deki dördüncü satırın içeriği olduğunu söyler. Özetlemek gerekirse, bu çizgiyi her iki dosyada da eşleştirmek için Delta'yı alfa1'deki dördüncü satırda Dave ile değiştirmeliyiz.
Bir sonraki değişiklik
12c12 ile gösterilir. Aynı mantığı uygulayarak, bu bize alpha1'deki 12 satırının Lima kelimesini içerdiğini ancak alpha2'nin 12 satırının Linux kelimesini içerdiğini gösterir.
Üçüncü değişiklik, alfa2'den silinmiş bir çizgiyi ifade eder. Etiket
21d20 olarak “çizgi her iki dosya itibaren hat 20 senkronize hale getirmek için ilk dosyadan silinecek 21 ihtiyaçlarını.” Deşifre edilir
< Uniform hat bize alfa1 silinir gereken hattın içeriğini gösterir.
Dördüncü fark
26a26,28 olarak etiketlenmiştir. Bu değişiklik, alpha2'ye eklenmiş üç ekstra satırı ifade eder. Etiketteki
26,28 not alın. Virgülle ayrılan iki satırlı sayılar, satır sayıları aralığını temsil eder. Bu örnekte, aralık satır 26'dan satır 28'e kadardır. Etiket "ilk dosyada satır 26'da, ikinci dosyadan satır 26 ila 28" olarak yorumlanır. Alfa1'e eklenecek. Bunlar, Quirk, Strange ve Charm kelimelerini içerir.
Snappy Tek Gömlekleri
Tek bilmek istediğiniz, iki dosyanın aynı olup olmadığı ise,
-s (aynı dosyaları bildir) seçeneğini kullanın.
diff -s alpha1 alpha3
-q (brief) seçeneğini kullanarak, iki dosyanın farklı olması hakkında eşit derecede kısa bir ifade alabilirsiniz.
diff -q alpha1 alpha2
Dikkat edilmesi gereken bir şey, iki özdeş dosya ile
-q (short) seçeneğinin tamamen istila ettiği ve hiçbir şey rapor etmediğidir.
Alternatif Bir Bakış
-y (yan yana) seçeneği, dosya farklılıklarını tanımlamak için farklı bir düzen kullanır. Görüntülenen sütun sayısını sınırlamak için
-W (genişlik) seçeneğini yan yana görüntülemek için kullanmak genellikle uygundur. Bu, çıktının okunmasını zorlaştıran çirkin sarma hatlarından kaçınır. Burada,
diff yan yana ekran üretmesini ve çıktıyı 70 sütunla sınırlamasını söyledik.
diff -y -W 70 alpha1 alpha2
Komut satırındaki ilk dosya, alfa1, solda ve ikinci satır komut satırındaki alfa2, sağda gösterilir. Her dosyadaki satırlar yan yana görüntülenir. Alfa2'de değiştirilmiş, silinmiş veya eklenmiş satırların yanında gösterge karakterleri vardır.
- | : İkinci dosyada değiştirilmiş bir satır.
- < : İkinci dosyadan silinen bir çizgi.
- > : İlk dosyada bulunmayan ikinci dosyaya eklenen bir satır.
Dosya farklarının yan yana daha küçük bir özetini tercih ederseniz,
--suppress-common-lines seçeneğini kullanın. Bu kuvvetler
diff , değiştirilemez eklenen veya silinen satırları sadece listelemek için.
diff -y -W 70 –suppress-common-lines alpha1 alpha2
Renk Sıçrama Ekleme
colordiff adlı başka bir yardımcı program,
diff çıktısına vurgu yaparak renk ekler. Bu, hangi çizgilerin farklılık gösterdiğini görmeyi kolaylaştırır.
Ubuntu veya başka bir Debian tabanlı dağıtım kullanıyorsanız, bu paketi sisteminize kurmak için
apt-get kullanın. Diğer Linux dağıtımlarında bunun yerine Linux dağıtımınızın paket yönetimi aracını kullanın.
sudo apt-get install colordiff
colordiff tıpkı
diff kullandığınız gibi kullanın.
Aslında,
colordiff
diff için bir sarmalayıcıdır ve
diff , sahnelerin arkasındaki tüm işleri yapar. Bu nedenle, tüm
diff seçenekleri
colordiff ile
colordiff .
Bazı Bağlam Sağlamak
Ekranda görüntülenen dosyaların içerisindeki bütün satırlar sahip ve sadece değiştirilen hatlar listelenmiş olan arasında bazı orta yol bulmak için, sorabilir
diff içerik sağlamak için. Bunu yapmanın iki yolu var. Her iki yol da aynı amacı gerçekleştirir; bu, her değiştirilen çizgiden önce ve sonra bazı çizgiler göstermektir. Aradaki farkın tespit edildiği yerde dosyada neler olup bittiğini görebileceksiniz.
İlk yöntem
-c (kopyalanan bağlam) seçeneğini kullanır.
colordiff -c alpha1 alpha2
diff çıktısının bir başlığı var. Başlık, iki dosya adını ve bunların değişiklik zamanlarını listeler. İlk dosya adından önce yıldız işaretleri (
* ) ve ikinci dosya adından önce kısa çizgiler (
- ) vardır. Çıktıdaki satırların hangi dosyaya ait olduğunu göstermek için yıldız işaretleri ve kısa çizgiler kullanılacaktır.
Ortada 1,7 olan bir yıldız işareti, alfa1'den gelen çizgilere baktığımızı gösterir. Kesin olarak, 1-7 arasındaki hatlara bakıyoruz. Delta kelimesi değiştirildi olarak işaretlendi. Yanında ünlem işareti (
! ) Var ve kırmızı. Bu satırdan önce ve sonra görüntülenen üç değiştirilmemiş metin satırı vardır, böylece dosyadaki satırın içeriğini görebiliriz.
Ortada 1,7 olan çizgi çizgisi bize şu anda alpha2'den gelen çizgilere baktığımızı söylüyor. Yine, 1-7. Satırlara bakıyoruz, Dave kelimesi 4. satırda farklı olarak işaretlendi.
Her değişikliğin üstündeki ve altındaki üç içerik satırı varsayılan değerdir.
diff sağlamak için kaç tane bağlam satırı istediğinizi belirleyebilirsiniz. Bunu yapmak için, "C" harfiyle
-C (kopyalanan bağlam) seçeneğini kullanın ve istediğiniz satır sayısını belirtin:
colordiff -C 2 alpha1 alpha2
Bağlam sunan ikinci
diff seçeneği
-u (birleştirilmiş bağlam) seçeneğidir.
colordiff -u alpha1 alpha2
Daha önce olduğu gibi çıktıda bir başlığımız var. İki dosya adlandırılır ve değişiklik zamanları gösterilir. Alpha1 adından önce kısa çizgiler (
- ) ve alpha2 adından önce de artı işaretleri (
+ ) vardır. Bu bize alfa1 atıfta bulunmak için kısa çizgiler kullanılacağını ve artı işaretleri alfa2 atmak için kullanılacağını söyler. Liste boyunca dağınık, (
@ ) işaretlerinde başlayan satırlardır. Bu çizgiler her farkın başlangıcını işaretler. Ayrıca her dosyadan hangi satırların gösterildiğini de söylerler.
Değiştirilen çizginin içeriğini görebilmemiz için farklı olarak işaretlenen çizgiden önceki ve sonraki üç çizgiyi gösteririz. Birleştirilmiş görünümde, fark içeren çizgiler birbirinin üstünde gösterilir. Alfa1'den gelen çizgi bir çizgi ile gelir ve Alfa2'den gelen çizgi bir artı işaretiyle gelir. Bu ekran, sekiz satırda, yukarıda kopyalanan içerik gösteriminin onbeşin yapmasıyla elde edilmesini sağlar.
Beklediğiniz gibi,
diff görmek istediğimiz birleştirilmiş bağlam satırlarının tam sayısını sağlamasını isteyebiliriz. Bunu yapmak için, "U"
-U (birleştirilmiş bağlam) seçeneğini kullanın ve istediğiniz satır sayısını belirtin:
colordiff -U 2 alpha1 alpha2
Beyaz Boşluğu ve Davayı Yok Saymak
Test4 ve test5 gibi iki dosyayı daha inceleyelim. Bunların içinde altı süper kahraman ismi var.
colordiff -y -W 70 test4 test5
Sonuçlar,
diff Kara Dul, Örümcek Adam ve Thor çizgilerinde farklı bir şey bulamadığını göstermektedir. Kaptan Amerika, Ironman ve Hulk hatları ile değişiklikleri işaretliyor.
Peki farklı olan ne? Eh, test5'te Hulk küçük harf "h" ile heceleniyor ve Kaptan Amerika'nın "Kaptan" ve "Amerika" arasında fazladan bir boşluğu var. Gözle görülür bir fark yok. İşte iyi bir kural. Göremiyorsanız cevap beyaz boşluktur. Bu satırın sonunda neredeyse kesinlikle başıboş bir boşluk veya iki veya sekme karakteri var.
Onlar sizin için önemli değilse, sen talimat verebilirsiniz
diff çizgi farkı dahil belirli türlerde görmezden:
- -i : Durumdaki farklılıkları yoksay.
- -Z : İzleyen beyaz boşluğu yoksay.
- -b : Beyaz boşluk miktarındaki değişiklikleri yoksay.
- -w : Tüm beyaz boşluk değişikliklerini yoksay.
Diyelim ki bu iki dosyayı tekrar kontrol etmeyi diyelim, fakat bu kez durumdaki farklılıkları görmezden gelelim.
colordiff -i -y -W 70 test4 test5
“Hulk” ve “hulk” ile çizgiler artık eşleşmiş kabul edilir ve hiçbir fark küçük harf için işaretlenir “h”. Kullanıcısının soralım
diff da beyaz boşluk sondaki görmezden.
colordiff -i -Z -y -W 70 test4 test5
Şüphe edildiği gibi, takip eden beyaz boşluk Ironman çizgisindeki
diff olmalıydı çünkü
diff artık bu çizgi için bir fark göstermiyor. Bu da Kaptan Amerika’yı terk ediyor.
diff davayı yok sayıp tüm beyaz boşluk sorunlarını yoksaymasını isteyelim.
colordiff -i -w -y -W 70 test4 test5
Söyleyerek
diff biz endişe değiliz farklılıkları görmezden
diff amaçlarımız, dosyalar maç için, bize söyler.
diff komutunun daha birçok seçeneği var, ancak bunların çoğu makine tarafından okunabilen çıktı üretmekle ilgilidir. Bunlar Linux adam sayfasında incelenebilir. Yukarıdaki örneklerde kullandığımız seçenekler, komut satırını ve insan gözbebeklerini kullanarak metin dosyalarınızın sürümleri arasındaki tüm farkları izlemenizi sağlar.