Git'i değişikliklerinizi bir yama olarak ele almak için Git'i kandırıp boşlukları sizin için düzeltmesini sağlayabilirsiniz. "Taahhüt öncesi kanca" çözümlerinin aksine, bu çözümler Git'e boşluk sabitleme komutları ekler.
Evet, bunlar hack'lerdir.
Sağlam çözümler
Aşağıdaki Git diğer adları
my~/.gitconfig
.
"Sağlam" ile, bu takma adların ağaç veya dizin kirli olup olmadığına bakılmaksızın, doğru olanı yaparak hatasız çalıştıklarını kastediyorum. Ancak, etkileşimli bir git rebase -i
işlem devam ediyorsa çalışmazlar ; bkz gözlerimi~/.gitconfig
Eğer bu köşe durumda, umurumda eğer ek kontroller için git add -e
sonunda açıklanan trick çalışmalıdır.
Onları bir Git takma adı oluşturmadan doğrudan kabukta çalıştırmak istiyorsanız, her şeyi kopyalayıp çift tırnak arasına yapıştırın (kabuğunuzun Bash gibi olduğunu varsayarak).
Dizini düzelt ama ağacı düzelt
Aşağıdaki fixws
Git diğer adı, dizindeki tüm boşluk hatalarını düzeltir, ancak ağaca değmez:
# Logic:
#
# The 'git stash save' fails if the tree is clean (instead of
# creating an empty stash :P). So, we only 'stash' and 'pop' if
# the tree is dirty.
#
# The 'git rebase --whitespace=fix HEAD~' throws away the commit
# if it's empty, and adding '--keep-empty' prevents the whitespace
# from being fixed. So, we first check that the index is dirty.
#
# Also:
# - '(! git diff-index --quiet --cached HEAD)' is true (zero) if
# the index is dirty
# - '(! git diff-files --quiet .)' is true if the tree is dirty
#
# The 'rebase --whitespace=fix' trick is from here:
# https://stackoverflow.com/a/19156679/470844
fixws = !"\
if (! git diff-files --quiet .) && \
(! git diff-index --quiet --cached HEAD) ; then \
git commit -m FIXWS_SAVE_INDEX && \
git stash save FIXWS_SAVE_TREE && \
git rebase --whitespace=fix HEAD~ && \
git stash pop && \
git reset --soft HEAD~ ; \
elif (! git diff-index --quiet --cached HEAD) ; then \
git commit -m FIXWS_SAVE_INDEX && \
git rebase --whitespace=fix HEAD~ && \
git reset --soft HEAD~ ; \
fi"
Fikir dizinde boşluk hataları varsa daha git fixws
önce çalıştırmaktır git commit
.
Dizini ve ağacı düzeltme
Aşağıdaki fixws-global-tree-and-index
Git diğer adı, varsa dizindeki ve ağaçtaki tüm boşluk alanlarını düzeltir:
# The different cases are:
# - dirty tree and dirty index
# - dirty tree and clean index
# - clean tree and dirty index
#
# We have to consider separate cases because the 'git rebase
# --whitespace=fix' is not compatible with empty commits (adding
# '--keep-empty' makes Git not fix the whitespace :P).
fixws-global-tree-and-index = !"\
if (! git diff-files --quiet .) && \
(! git diff-index --quiet --cached HEAD) ; then \
git commit -m FIXWS_SAVE_INDEX && \
git add -u :/ && \
git commit -m FIXWS_SAVE_TREE && \
git rebase --whitespace=fix HEAD~2 && \
git reset HEAD~ && \
git reset --soft HEAD~ ; \
elif (! git diff-files --quiet .) ; then \
git add -u :/ && \
git commit -m FIXWS_SAVE_TREE && \
git rebase --whitespace=fix HEAD~ && \
git reset HEAD~ ; \
elif (! git diff-index --quiet --cached HEAD) ; then \
git commit -m FIXWS_SAVE_INDEX && \
git rebase --whitespace=fix HEAD~ && \
git reset --soft HEAD~ ; \
fi"
Ayrıca sürüm dosyalarındaki boşlukları düzeltmek için
git add --intent-to-add <unversioned files> && git fixws-global-tree-and-index
Basit ama sağlam olmayan çözümler
Bu sürümlerin kopyalanması ve yapıştırılması daha kolaydır, ancak yan koşulları karşılanmazsa doğru şeyi yapmazlar.
Geçerli dizine köklenen alt ağacı düzeltin (ancak boş değilse dizini sıfırlar)
Kullanılması git add -e
"düzenle" kimlik editörü ile yamalar için :
:
(export GIT_EDITOR=: && git -c apply.whitespace=fix add -ue .) && git checkout . && git reset
Dizini düzeltin ve koruyun (ancak ağaç kirli veya dizin boşsa başarısız olur)
git commit -m TEMP && git rebase --whitespace=fix HEAD~ && git reset --soft HEAD~
Ağacı ve dizini düzeltin (ancak boş değilse dizini sıfırlar)
git add -u :/ && git commit -m TEMP && git rebase --whitespace=fix HEAD~ && git reset HEAD~
export GIT_EDITOR=: && git -c apply.whitespace=fix add -ue .
Hile açıklaması
Bu cevaptangit rebase --whitespace=fix
hile öğrenmeden önce her yerde daha karmaşık hileler kullanıyordum .git add
Manuel olarak yapsaydık:
Set apply.whitespace
için fix
(sadece bir kez bunu yapmak zorunda):
git config apply.whitespace fix
Bu Git'e boşlukları düzeltme eklerini düzeltmesini söyler .
Git'i değişikliklerinize yama olarak davranmaya ikna edin :
git add -up .
Her dosya için tüm değişiklikleri seçmek için a+ enterdüğmesine basın . Git boşluklarınızı düzeltmek için bir uyarı alırsınız.
( git -c color.ui=auto diff
bu noktada dizine eklenmemiş değişikliklerinizin tam olarak boşluk hataları olduğunu gösterir).
Boşluk hatalarını çalışma kopyanızdan kaldırın:
git checkout .
Değişikliklerinizi geri getirin (taahhütte bulunmaya hazır değilseniz):
git reset
GIT_EDITOR=:
Aracılığıyla kullanımı :
düzenleyicisi olarak, ve bir komut olarak
:
kimliktir.