Sadece kullanma bash
, diff
, tput
, ve less
, yakından çıktısını yaklaşık olarak belirleyebilir git diff
. Yine de, kısa görüşlülük nedeniyle bazı önemli farklılıklar olacaktır.diff
programcıların .
Kullanıcı hesabınız tarafından otomatik olarak elde edilen bir dosyaya aşağıdaki Bash işlev tanımını koyun ve işleve komut satırından erişebileceksiniz:
function gdiff()
{
local REG=`tput op`
local GRP=`tput setaf 6`
local ADD=`tput setaf 2`
local REM=`tput setaf 1`
local NL=$'\n'
local GRP_LABEL="${GRP}@@ %df,%dn +%dF,%dN @@${REG}"
local UNCH_GRP_FMT=''
[[ "${1}" == '@full' ]] && {
UNCH_GRP_FMT="${GRP_LABEL}${NL}%="
shift
}
diff \
--new-line-format="${ADD}+%L${REG}" \
--old-line-format="${REM}-%L${REG}" \
--unchanged-line-format=" %L${REG}" \
--new-group-format="${GRP_LABEL}${NL}%>" \
--old-group-format="${GRP_LABEL}${NL}%<" \
--changed-group-format="${GRP_LABEL}${NL}%<%>" \
--unchanged-group-format="${UNCH_GRP_FMT}" \
"${@}" | less -FXR
}
Bu işlev şu şekilde çalışır:
- Sonuçta,
diff
dosyalardaki değişikliklerin nasıl görüntüleneceğini belirtmek için çeşitli biçimlendirme seçenekleriyle çağrılır.
tput
bu biçimlendirme seçeneklerine ANSI renk kodlarını eklemek için kullanılır. ANSI olmayan terminallerde, değiştirmek gerekebilir Not tput setaf
ile tput setf
.
- Çıkış
diff
borulu less
. -R
ANSI renklerinin korunmasına izin verir. çıkarken ekranın temizlenmesini -X
engeller less
. çıktı bir ekrana sığarsa çağrı cihazı olarak çalışmasını -F
engeller less
.
- İlk parametre ise
@full
, işlev eklenen ve çıkarılan satırlara ek olarak tüm değiştirilmemiş satırları görüntüler.
Bu yaklaşım ve aşağıdakiler arasındaki aşağıdaki farklara dikkat edin git diff
:
git diff
her değişikliği çevreleyen üç satır bağlam bildirir. Maalesef, diff
aynı anda biçimlendirme seçeneklerini belirlerken aynı zamanda bağlam satırlarının sayısını belirtmek istiyorsanız şikayet ediyor ve çıkıyorsunuz. (En azından Mac OS X Yosemite'de öyle). Teşekkürler diff
programcılar. Bu nedenle, varsayılan davranış olan her değişikliği çevreleyen bağlam satırı isteyebilir veya @full
ilk parametre olarak belirterek dosyadaki tüm değişmemiş satırların da rapor edilmesini isteyebilirsiniz .
- Bağlam çizgileri farklı olduğundan,
git diff
bu işlev tarafından bildirilen satır numaraları da tarafından bildirilenlerden farklı olacaktır.git diff
.
- Tek satırlık değişikliklerin rapor edildiğini görebilirsiniz, bu doğru davranıştır, ancak değiştirilen dosyanız tek boş satırların eklenmesini içerdiğinde can sıkıcıdır. Bence bunu
git diff
bağlam çizgileri üzerinden daha iyi ele alıyor. İsterseniz diff
, beyaz boşluklarla daha iyi başa çıkmak için farklı seçenekler aktarmayı deneyebilirsiniz .
newtext
de/etc/colordiff
. Sanırım git yeşil kullanıyor?