SORU
2 NİSAN 2012, PAZARTESİ


Zorla git repo ve çalışma kopyası, LF eol

Git deposu github üzerinde barındırılan. Dosyaların çoğu başlangıçta Windows üzerinde geliştirilen ve Satır sonları konusunda çok dikkatli değildim. İlk commit yaptığımda, ben de doğru Satır sonları zorlamak için yerde herhangi gıt yapılandırma yoktu. Sonuçta benim github deposunda CRLF Satır sonları çok sayıda dosya var.

Şimdi kısmen Linux üzerinde geliştiriyorum, ve Satır sonları temizlemek istiyorum. Nasıl dosyaları doğru github LF ile saklanır sağlamak, ve benim çalışma kopyası VARSA alabilir miyim?

.gitattributes dosya text eol=LF; Bu doğru mu içeren kurdum? Bu kararlı ve itti, sadece github rm repo ve yeniden klon benim yerel istenen etkiyi elde etmek için alabilir miyim?

CEVAP
2 NİSAN 2012, PAZARTESİ


Dosyaları depo hakkında biraz bilgi olmadan (saf kaynak kodu, görüntü dosyaları, ...), biraz bu soruya cevap vermek zor :)

Bunun yanında, metin dosyaları, EĞER Satır sonları olduğundan emin olmak için istekli olduğun için çalışma dizininizdeki Satır sonları gibi EĞER varsayılan için istekli olduğunu düşünürüm .git deposu, Windows ya da Linux üzerinde çalışmak hava. Üzgünüm daha doğrusu daha güvenli....

Ancak, daha iyi bir alternatif var: deponuzdaki Linux workdir, CRLF Satır sonları Windows workdir VE EĞER Satır sonları senin içinde EĞER Satır sonları Yarar.

Kısmen Linux ve Windows üzerinde çalışırken, core.eol 9 ** set core.autocrlf 11 ** ayarlanmış olduğundan emin olun.

Daha sonra aşağıdaki ile .gitattributes dosya içeriğini değiştirmek

* text=auto

Bu Gıt sana sihirli Satır sonları dönüşüm, taahhüt ve kullanıma alma üzerine bırakır. İkili dosyaları değişmeyecektir, dosyaları olan metin dosyası Satır sonları anında dönüştürülmüş görecek olarak algılandı.

Deponuzu içeriği bildiğiniz gibi ancak, Git yardım et ve onu ikili dosyaları metin dosyaları yardımcı olabilir.

C tabanlı görüntü işleme bir proje üzerinde çalışmak şartıyla, aşağıdaki .gitattributes dosya içeriğini değiştirmek

* text=auto
*.txt text
*.c text
*.h text
*.jpg binary

Bu uzantı c, h, veya txt olan dosyaları repo EĞER Satır sonları ile saklanır emin olacak ve çalışma dizini yerel Satır sonları olacak. Jpeg dosyaları dokunulmaz olmayacak. Diğerlerinin hepsi de aynı sihirli yukarıda görüldüğü gibi filtreleme faydalanacaktır.

Tüm bu iç detayları daha derin bir anlayış almak için çok iyi Bu yazı dalmak için öneririm"Mind the end of your line"Tim Clem, bir Githubber.

Gerçek dünyadan bir örnek olarak, aynı zamanda kolayca yükleyebilirsinizcommit.gitattributes bir dosya için bu değişiklikleri gösterdi.

Şu yorumu dikkate alarak cevap GÜNCELLEŞTİRİN

Aslında Linux ortamım aslında bir Sanal Windows dizin paylaşımı, çünkü benim Windows CRLF dizinleri istemiyorum

Mantıklı. Açıklama için teşekkürler. Bu özel bağlamda, kendisi tarafından .gitattributes dosyası yeterli olmayacaktır.

Deponuzu karşı aşağıdaki komutları çalıştırın

$ git config core.eol lf
$ git config core.autocrlf input

Deponuzu Linux ve Windows ortamı arasında paylaşıldığı gibi, bu yerel config hem de çevre için dosya güncellenir. core.eol metin dosyaları kullanıma alma konusunda EĞER Satır sonları ayı yapacaktır. core.autocrlf garanti ederpotansiyelMetin dosyaları (örneğin kopyala/yapıştır bir operasyon sonucunda) CRLF deponuzdaki EĞER dönüştürülecektir.

İsteğe bağlı olarak, ne ayırt Gıt yardımcı olabilirbir metin dosyası .gitattributes bir dosya oluşturarak aşağıdakine benzer bir şey içeren:

# Autodetect text files
* text=auto

# ...Unless the name matches the following
# overriding patterns

# Definitively text files 
*.txt text
*.c text
*.h text

# Ensure those won't be messed up with
*.jpg binary
*.data binary

Eğer .gitattributes bir dosya oluşturmak için karar verdibunu işlemek.

Son olarak, git status bahseder olun< . em ^"kaydetme (çalışma dizini temiz)"sonra aşağıdaki işlemi gerçekleştirin

$ git checkout-index --force *

Bu çalışma dizininizdeki dosyaları, dikkate config değişiklikleri ve .gitattributes dosya alma ve metin dosyaları herhangi bir potansiyel göz ardı CRLF yerine yeniden oluşturacaktır.

Bu yapıldıktan sonra, çalışma dizininizdeki her metin dosyası EĞER Satır sonları taşıyacak ve git status hala workdir olarak temiz düşünmelisiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MagicofRahat

    MagicofRahat

    13 Temmuz 2007
  • ThreadBanger

    ThreadBanger

    2 Mart 2007
  • Video Copilot

    Video Copilo

    21 EYLÜL 2006