"Text" özniteliğini kullanarak dosyaları normalleştirdikten sonra git'i ana dalı teslim almaya ve satır başlarını kaldırmaya nasıl zorlarım?


108

Tamam, bu .gitattributesgibi satırları içeren dosyayı ekledim

*.css text
*.js text
etc...

Daha sonra http://git-scm.com/docs/gitattributes#_checking-out_and_checking-in adresindeki talimatları izledim

$ rm .git/index     # Remove the index to force Git to
$ git reset         # re-scan the working directory
$ git status        # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"

Ama şimdi benim çalışma kopyamda hala satır başı var! Saklamak istediğim izlenmemiş dosyalarım var. Git ana dalı normalleştirilmiş dosyalarla tekrar kontrol edebilir miyim?

Depodaki dosyaların normalleştirildiğini biliyorum, çünkü depoyu klonladığımda, tüm dosyalara satır başları olmadan sahip oluyorum.

Yanıtlar:


274

Ah ah! Önceki işlemi kontrol edin, ardından ana kopyayı kullanıma alın.

git checkout HEAD^
git checkout -f master

5
Bu geçici çözüm için teşekkürler, ancak git'te "ödeme-f" nin gerçekten yeniden ödeme yapmaya zorlamaması göze çarpan bir sorundur. Başka bir sorun da, önce tüm çalışan kopya dosyalarını (yani .git dizini dışındaki her şeyi) kaldırmaktır.
pfalcon

Ah, evet, bunun için teşekkürler! Bunu duyunca, sanırım ilgilendiğimiz dosyaları kaldırıp ödeme işlemini gerçekleştirebiliriz. Benim için aslında düzeltmeye çalıştığım tek bir dosya vardı. Ama elbette tüm dosyalar, yüzlerce veya binlerce olabilir.
Jason

Bu, git 1.8.3'te (mac) başarısız oluyor: error: pathspec 'HEAD ^' git tarafından bilinen hiçbir dosya (lar) ile eşleşmedi.
dval

@dval, bu gönderideki düzenlemelere bakın ve bunu yapmanın alternatif bir yolunu göreceksiniz. Ben de bir Mac üzerinde çalışıyorum ve bu benim için çalıştı. Ayrıca, gitinizi 2+ sürümüne yükseltmenizi tavsiye ederim ve bunu güvenli bir şekilde yapmak için Homebrew'i kullanabilirsiniz.
Jason

2
Bu gerçekten işe yaramıyor. GIT yalnızca iki işlem arasında değişen dosyaları güncelleyecektir (bazı istisnalar dışında). Bir depo yepyeni ise, ör. yalnızca iki commit ve ilki boş olur, o zaman bu çözüm işe yarayacaktır. Aksi takdirde, mechsin'in cevabında açıklanan tüm dosyaları zorla silmeniz gerekir.
jstine

17

Diğerlerinin de belirttiği gibi, depodaki tüm dosyalar silinebilir ve ardından kontrol edilebilir. Ben bu yöntemi tercih ediyorum ve aşağıdaki kod ile yapılabilir

git ls-files -z | xargs -0 rm
git checkout -- .

veya bir satır

git ls-files -z | xargs -0 rm ; git checkout -- .

Ben onu her zaman kullanıyorum ve henüz bir kötü taraf bulamadım!

Daha fazla açıklama için, -zher giriş çıktısının sonuna bir boş karakter ekler ls-filesve aldığı çıktıyı bu boş karakterlerle sınırlandırmasını -0söyler xargs.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.