“1 Hunk # 1 BAŞARISIZ (farklı satır sonları)” mesajı nasıl düzeltilir?


22

Komutuyla bir yama oluşturmaya çalışıyorum

git diff sourcefile >/var/lib/laymab/overlay/category/ebuild/files/thepatch.patch

yamayı uyguladığımda bana

$ patch -v
GNU patch 2.7.5

$ /usr/bin/patch -p1 </var/lib/laymab/overlay/category/ebuild/files/thepatch.patch
patching file sourcefile
Hunk #1 FAILED at 1 (different line endings).
Hunk #2 FAILED at 23 (different line endings).
Hunk #3 FAILED at 47 (different line endings).
Hunk #4 FAILED at 65 (different line endings).
Hunk #5 FAILED at 361 (different line endings).
5 out of 5 hunks FAILED -- saving rejects to file sourcefile.rej

Dos2unix'i hem src dosyasına hem de patch dosyasına uygulamaya çalıştım, ancak mesaj geçmedi ...

UPD: --genge-boşluklar da yardımcı olmuyor

PATCH COMMAND:  patch -p1 -g0 -E --no-backup-if-mismatch --ignore-whitespace --dry-run -f < '/var/lib/layman/dotnet/dev-dotnet/slntools/files/remove-wix-project-from-sln-file-v2.patch'

=====================================================
checking file Main/SLNTools.sln
Hunk #1 FAILED at 14 (different line endings).
Hunk #2 FAILED at 49 (different line endings).
Hunk #3 FAILED at 69 (different line endings).
Hunk #4 FAILED at 102 (different line endings).
4 out of 4 hunks FAILED

UPD: çok iyi bir makale buldu: /programming//a/4425433/1709408


Dene sed -i.bak -e 's/\r$//g' something. Dos2unix'in karışık satır sonunu istediğiniz kadar agresif bir şekilde ele aldığını sanmıyorum.
Arthur2e5

Düpedüz kötülük; Eğer CF-LF satır sonları, dosyalarla aynı ile yama varsa, ilk mutlulukla sonra satır sonları (hangi bir uyum atmak, sizin yamadan CR şerit olacak sadece kırdı) uymuyor.
SF.

Yanıtlar:


5

patchWindows'ta MSYS2 ile gelen komutu kullanarak da aynı sorunu yaşadım. Benim durumumda hem kaynak dosya hemde yama CRLF satır sonlarına sahipti ve her ikisini de LF'ye dönüştürme de işe yaramadı. İşe yarayan şey şuydu:

$ dos2unix patch-file.patch
$ patch -p1 < patch-file.patch
$ unix2dos modified-files...

patch Tüm son eklenmiş dosyalardaki satır sonlarını LF'ye çevirecektir, bu yüzden onları tekrar CRLF'ye dönüştürmek gerekir.

Obs: Kullandığım patchsürüm 2.7.5


5

Bu -lseçeneği genellikle kullanarak çalışabilirsiniz :

-l veya --ignore-whitespace seçeneğini kullanın; bu düzeltme eki, yamadaki boş karakterlerin (yani boşluklar ve sekmeler) gevşek bir şekilde karşılaştırılmasını sağlar; böylece, yama dosyasındaki boşluksuz boşluk dizisi girdi dosyalarındaki boşluksuz boşluk dizisi ile eşleşir

Bu standart bir özelliktir (bkz. POSIX yaması açıklaması).

Bununla birlikte, OP, farklı işletim sistemleri arasındaki satır sonu dönüşümlerinin git core.autocrlf ile nasıl çalıştığını açıklayan bir soruyu değiştirdi ve sorunun Windows'taki dosyalarda (Unix tarzı örneğin aksine) görüldüğünü ima eden bir örnek ekledi. İken patchçalışır CRLF ve LF line-ucu arasındaki uyumsuzluklar karşılamak için, bu ikincisi kullanıldığını varsaymak bir önyargı vardır. Düzeltme eki dosyasında CRLF sonları varsa, eklenecek dosyalar olmadıysa, bu örnek günlükte olduğu gibi kurtarılır:

(Stripping trailing CRs from patch.)
patching file xterm.log.html
(Stripping trailing CRs from patch.)
patching file xterm.man
(Stripping trailing CRs from patch.)
patching file xtermcfg.hin

İçerisinde, kaynak kodu kontrol etme similarişlevine GNU patchdavranır boşluk olarak spaceve Tab, satır bir arka LF sahip olmasına bağlı olarak, bazı özel işlem ile. CR'den bahsedilmedi. Dikkat eder check_line_endings, ancak bu bilgiyi sadece bir reddi teşhis etmeye yardımcı olmak için bir mesajın parçası olarak kullanır. Seçenek belirtilmediği sürece takip eden CR'leri pget_line'da soyar--binary .

GNU yamasının, satır sonları CRLF olan dosyalara uygulamak için LF biten bir yamayı CRLF'ye dönüştürmesini söyleme seçeneği yoktur. Bu durum için güvenilir bir şekilde kullanmak için seçenekler

  • LF sonlarını kullanmak için tüm dosyaları dönüştür
  • CRLF sonlarını kullanmak için tüm dosyaları dönüştürün ve --binaryseçeneği ekleyin .

5
- boşluk-boşluk (ikinci çizgi yok) da yardımcı olmuyor, ben soruyu güncelledim
user1709408

0

Cygwin'de de benzer bir problem yaşadım. Benim durumumda düzeltme, -istdin'den okumak yerine bayrak kullanmaktı.

Aşağıdakiler farklı satır sonları hatasıyla başarısız oldu :

patch -t -N -r - -p0 < patchfile

Ancak aşağıdakiler başarılı oldu:

patch -t -N -r - -p0 -i patchfile

Sebebinden emin değilim, ama birinin aynı sorunu olması durumunda bunu burada bırakmak.

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.