2011-06-29 30 views
6

Özelleştirilmiş IDE'lerimiz, XML dosyalarını, ikili dosyalar gibi görünmesini sağlayan bir kodlama ile çıkarır. Bu dosyaların Diff'ler ve birleştirmeler başarısız.Kancayı bağlamak ya da kancalamamak için - git

Bu dosyaların ASCII sürümlerini tr komutuyla oluşturabiliriz. Bu dosyaların işlenmeden önce daima otomatik olarak ascii'ye dönüştürüldüğü bir duruma geçmek istiyorum.

Sürüm Denetimi'nin kopyasını Git ile kaldırdım ve gerçekten gerekmedikçe, tüm kalbimle kancaları kullanmama konusunda beni uyarıyor.

Bu amaçla bir kanca mı kullanmalıyım? Ya da dosyaların her zaman işlenmeden önce dönüştürülmesini sağlamak için başka bir şey yapabilir miyim? msysgit ile

Windows XP 1.7.4

- = update = -

Yardımlarınız ve sabır için

teşekkürler herkese. this question arıyorsunuz ben aşağıdakileri denedim ama çalışmıyor:

echo "*.xrp filter=xrp" > .git/info/attributes 
git config --global filter.xrp.clean 'tr -cd '\''\11\12\15\40-\176'\''' 
git config --global filter.xrp.smudge cat 
git checkout --force 

dosyaları bu yapılandırma değişikliğinden sonra değişmeden kalır. Sildiğim ve tekrar kontrol ettiğimde bile.

temiz görev olarak yapılandırılmış tr komut izolasyon çalışır. Prova:

$ head -n 1 cashflow/repo/C_GMM_CashflowRepo.xrp 
ÿþ< ! - - X M L R e p o s i t o r y f i l e 1 . 0 - - > 

$ tr -cd '\''\11\12\15\40-\176'\' < cashflow/repo/C_GMM_CashflowRepo.xrp | head -n 1 
<!-- XML Repository file 1.0 --> 

Yapılandırmada neyin yanlış olduğunu herkes görebilir mi?

+0

Başarısız bir fark veya birleştirme nasıl ortaya çıkıyor? Birleşme hangi şekilde başarısız olur? – ralphtheninja

+0

Diff, "ikili dosyalar farklı" ile yanıt verir. İyi bir soru olsa da, sadece birleşme farkını fark edememenin bir sonucu olarak başarısız olacağını varsayıyorum. Her şeye rağmen, farklılıklara sahip olmak iyi olur. – Synesso

cevap

5

Kancalarla ilgili bir sorun, bunların dağıtılmamasıdır.

.gitattributes

bir dosyanın diff ve içeriğini yönetmek için bazı yönergesi vardır, ancak başka bir seçenek olacaktır bir attribute filter (hala .gitattributes içinde) ve otomatik tamamlama, dosyalardaki dönüştürebilirsiniz. ,
.gitattributes: 
*.xrp filter=xrp 

~/.gitconfig: 
[filter "xrp"] 
clean = \"C:/Program Files/Git/bin/tr.exe\" -cd "\\''\\11\\12\\15\\40-\\176'\\'" 
smudge = cat 

Sonra dosyasını değiştirmek zorunda:
(Yani temiz komut detect those files based on their content alone yapabiliyor ise) bu sohbet tartışma Başına


, OP Synesso bir başarı bildiriyor ekleme, taahhüt, silme, ödeme ... ve daha sonra düzeltildi. :)

Not

ki, ben daha çok, filtre ilan edildiği fazladan .gitattributes dosyayı ekleyerek (ve işlemekle) tercih Repo sadece bir kullanıcıyı, ancak potansiyel olarak herhangi bir kullanıcı klonlama değil endişe yapar herhangi bir değişiklik için .git/info/attribute dosyasının değiştirilmesinden (bunun etrafında klonlanmamış). gitattributes man page itibaren

:

  • yalnızca tek bir depo (yani, o depo için bir kullanıcının iş akışına belirli olan dosyalara özelliklerini atamak) etkiler isterseniz, o zaman yerleştirilmelidir öznitelikleri $GIT_DIR/info/attributes dosyasında.
  • Sürüm denetimli olması ve diğer depolara dağıtılması gereken öznitelikler (yani, tüm kullanıcılara yönelik ilgi alanları) .gitattributes dosyalarına gitmelidir.
  • Tek bir kullanıcı için tüm depoları etkilemesi gereken öznitelikler, core.attributesfile yapılandırma seçeneğiyle belirtilen bir dosyaya yerleştirilmelidir.
  • Bir sistemdeki tüm kullanıcılar için öznitelikler $ (önek)/etc/gitattributes dosyasına yerleştirilmelidir.

    http://git-scm.com/docs/gitattributes


    phyatt

in the comments ekler:

I sqlite3 için benzer bir örnek yaptı.
İki hatları ile doğru dosyalar halinde ekleyebilirsiniz:

git config diff.sqlite3.textconv 'sqlite3 $1 .dump' 
echo '*.db diff=sqlite3' >> $(git rev-parse --show-toplevel)/.gitattributes 

Benzer çizgiler diğer git config yolları yazmak için kullanılabilir.

+0

Teşekkürler. Öznitelik filtreleri, aynı derecede ilginç ses çıkarır. – Synesso

+0

Özellik filtresini en kullanışlı buldum. Sonunda bu soruya ulaştım: http://stackoverflow.com/questions/2316677/can-git-automatically-switch-between-spaces-and-tabs/2318063#2318063 - Bir çözüm bulmaya çalıştım ama işe yaramıyor. Soru güncellendi. – Synesso

+0

@Synesso: Tüm depoları başka bir yerde tekrar kontrol etmeyi denediniz mi? – VonC

2

Farklılıklar üzerinde çalışma şansı var mı (yani sadece bir kaç tuhaf bayt içeriyorlar, ancak başka türlü metin var) ya da değil mi? Bunu yaparsa, yalnızca .gitattributes ile metin olarak ele almak için gitmeye zorlayabilirsiniz. Değilse, yine de, özel diff ve birleştirme betikleri (dönüştürmek için gereken tr'i kullanacak) oluşturmak ve bunu .gitattributes ile tekrar kullanmasını söylemek daha iyi olabilir.

Her iki durumda da, (özel işlemlerde çalıştırılmak üzere) kanca kullanmıyorsunuz, ancak dosyaya özgü .gitattributes.

+0

Dosyalar XML'dir, ancak onaltılık atlayışta onlara baktığımda her bayt 00 ile serpiştirilir. Sonuç olarak, bunlar diff olarak ikili olarak kabul edilir. Çözümünüz çok kolay geliyor. Yarın deneyeceğim. – Synesso

2

Tercih ettiğiniz düzenleme biçiminiz ASCII ise ve yalnızca depolarınız, depoya vereceğiniz tercih edilen kaynaktaki ikili sürümü oluşturmak için kural oluşturma kurallarını kullanmanızı öneririm.

IDE'nizin dosyaları ikili biçimde oluşturduğunu göz önünde bulundurarak, en iyi şeyleri depodaki bu biçimde depolamak olduğunu düşünüyorum.

Kancadan ziyade, farklı desenleri eşleştirmek için farklı desenlerle eşleşen dosyaları yapılandırmanıza olanak tanıyan git help attributes, özellikle diff ve textconv'a bakın. Dosyaları nasıl depoladığınızdan veya bunları düzenlediğinizden ödün vermeden ASCII sistemlerini çalışabilmelisiniz.

DÜZENLEME: Dosyanın UTF-16 veya UCS-2 olduğunu öne süren "her bayt 0'dır" şeklindeki yorumunuza dayanarak. Unicode işleyen bir diff için bu cevaba bakın: Can I make git recognize a UTF-16 file as text?

+0

Teşekkürler. IDE'nin bir meyveli kek olduğunu ve dosyaları gerçekten olmadıklarında ikili olarak yazdığını açıkça belirtmeliydim. Onların ikili olmalarına hiç bir yararı yok. Yardımınız için teşekkürler! İsteğe bağlı XML dosyalarını oluşturmak ve yalnızca XML'in oluşturduğu kaynak belgeleri (belgeleri) işlemek için – Synesso

+0

+1. –

+0

@Synesso Yorumunuza bağlı olarak ilgili soruya bir link ekledim. –