2008-10-28 9 views
9

Orta boy bir Java dosyasına sahibim. Dosyalarımdan birine her defasında değişiklik yapıyorum, BuildTable.java, Git bunu yalnızca bir satır veya iki olsa bile büyük bir değişiklik olarak rapor ediyor. BuildTable.java yaklaşık 200 satırdır ve bu işlemdeki değişiklik sadece tek bir satırı değiştirdi.Git, küçük bir değişiklik yaptığımda her zaman dosyalarımdan birini yeniden yazdığımı düşünüyor

git-diff Çıkışlardan bu:

--- a/src/BuildTable.java 
+++ b/src/BuildTable.java 
@@ -1 +1 @@ 
-import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport 
\ No newline at end of file 
+import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport 
\ No newline at end of file 

bir yaptıktan sonra Git ikili ya da bir şey olarak bu dosyayı görüşüyor -a

Created commit fe43985: better error notifications 
3 files changed, 54 insertions(+), 50 deletions(-) 
rewrite src/BuildTable.java (78%) 

budala-taahhüt? Bu bir sorun mu? Öyleyse, bunu nasıl düzeltirim?

cevap

20

Bunu düzeltmek için, çekirdek satır ayarlarının herhangi birini değiştirmem gerekiyordu; varsayılan satır sonları üretildiğinden, bu belirli dosyanın karıştırılmış olmasıydı. Düzeltmek için vim i açtı ve yazın için aşağıdaki komutu

:%s/^M/\r/g 

Not infaz "^ M" ctrl-V ve ardından ctrl-M yazmak zorunda.

+0

Günlerce arama yaptım ve sorunumu çözdün. Teşekkürler. – Jared

+0

'sed -i 's # \ r # \ n # g' 'de çalışıyor –

27

Açıkça, git, mac stili satır sonlarınızı beğenmez (yalnızca CR). Fark algoritması, satır ayırıcısı olarak LF kullanır.

Dosyalarınızı, windows stili (CR LF) veya unix (yalnızca LF) satır sonlarına sahip olacak şekilde düzeltin.

+2

OS X, LF sonlarını, tıpkı diğer tüm Unix stilleri gibi kullanır. –

+8

"Mac tarzı" satır sonları MacOS 9'a kadar Mac'lerde standart olarak kullanıldı. Ve sadece MacOS'ta. – ddaa

+7

Sorunun cevabında belirttiği gibi, bu yanıtın dört kez downmodded olmasına rağmen, tanı doğruydu. Bu durumda – ddaa

5

git-config ile core.autocrlf ve core.safecrlf'u ayarlayın. Bu, git öğesinin nesne deposuna aktarılırken satır sonlarını otomatik olarak dönüştürmesine neden olur. "Yeni" sonları saklamak için bir taahhütte bulunmanız gerekebilir. Sadece çıplak CR ler herhangi LF olmadan sizin yapıştırılan örneğin bakılırsa

, ayrıca "eski tarz Mac satır sonları" muzdarip olabilir (ipucu ddaa ve Charles Bailey sayesinde), tarafından işlenmez ancak bir olgu budala. Bu doğruysa (bir hex editörü ile kontrol edin), LF -only Unix satır sonları gibi, bu çöpü 21. yüzyıl formatına çevirmek için recode gibi bir araç kullanın.

+1

core.autocrlf yardımcı olmayacaktır (eski stil Mac satır sonları). Geçerli git kaynağını alıntılamak için: "Şu anda çıplak CR karakterleri olan öğeleri dönüştürmeyi denemiyoruz. Bu çılgın şeyi yapan var mı?" –

0
git diff -b 

Size farklılıkları gösterdiğinde satır sonu değişikliklerini yok sayar.