'पैच अनपेक्षित रूप से लाइन के बीच में समाप्त होता है' क्या मतलब है?


14

यह मेरे पैच कमांड का आउटपुट है:

Hunk #11 merged at 4184,4190.
Hunk #12 merged at 4444.
Hunk #13 merged at 4944.
Hunk #14 NOT MERGED at 5106-5116.
Hunk #15 merged at 5290.
Hunk #16 merged at 5448.
patch unexpectedly ends in middle of line
Hunk #17 merged at 5608,5611.

आज्ञा थी

patch -d ~/SOME_DIR -p1 --merge --verbose -u

पैच का उपयोग कर उत्पादन किया गया था:

git --git-dir ~/SOME_DIR/.git diff -U8 bb1ee538982957b421a4c0e78f30428e73c9a072 HEAD -- malloc.c

क्या patch unexpectedly ends in middle of lineमतलब है, और क्या यह एक समस्या है? क्या यह 16 या 17 को हंक करने की बात है? पैच फ़ाइल के लिए मैं क्या देख सकता हूँ यह जानने के लिए कि यह क्या कारण है?

जवाबों:


11

संदेश हंक 16 को संदर्भित करता है।

यह GitHub चर्चा संभवतः आपके मुद्दे से संबंधित है।

यह पैच के बारे में अप्रत्याशित रूप से लाइन मैसेज के बीच में समाप्त होता है क्योंकि CRLF (कैरिज-रिटर्न, लाइनफीड) मुद्दे जब गिट जनरेट डिफरेंशियल पैच के साथ उपयोग किए जाते हैं।

निष्कर्ष निकालने के लिए:

[..] गिट लाइन अंत के बारे में बहुत picky हो सकता है। आप खिड़कियों पर हैं या नहीं? किसी भी दर पर, आपको संभवत: गिट कॉन्फिगर में ऑटोक्रॉफ़ सेट करना चाहिए। यदि आप खिड़कियों पर हैं, तो आप "सही" चाहते हैं, यदि आप मैक या लिनक्स पर हैं, तो आपको "इनपुट" का उपयोग करना चाहिए [..]

लेख में लाइन एंडिंग के साथ डीलिंग GitHub उपरोक्त कथन का विवरण देता है।


1
यह ध्यान दिया जाना चाहिए, प्रश्नकर्ता ने पूछा कि यह बुरा है - एक पंक्ति के बीच में समाप्त होना कोई समस्या नहीं है - बस एक चेतावनी।
रॉस

3

यदि आप उपयोग नहीं कर रहे हैं git(@ maxslepzig की टिप्पणी के संदर्भ में पैच का उपयोग करने के बारे में था git), अपनी फ़ाइल के अंत में एक गाड़ी वापसी जोड़ने का प्रयास करें। मैंने ऐसा किया और patchअपना पैच स्वीकार कर लिया।


2

इस बहुत पुरानी चर्चा में जोड़ने के लिए:

ओपी ने जो चेतावनी दी है, उससे जुड़ी समस्या आम तौर पर लाइन एंडिंग की समस्याओं के कारण होती है।

patch फ़ाइल के अंत को निर्धारित करने के लिए एक अनुगामी लाइन फ़ीड (LF) चाहता है (और एक आकस्मिक रूप से अलग किए जाने की चेतावनी देता है)

  1. संपादन के लिए फ़ाइल को खोले बिना उचित लाइनफ़ीड लागू करें (जो आपके संपादक की सेटिंग्स के आधार पर आपकी पंक्ति की समाप्ति या पट्टी अनुरेखण लाइनों / रिक्त स्थान को संशोधित कर सकता है) आप कुछ सरल कर सकते हैं:

    echo -e "\n" >> YOURPATCHFILE

    यह किसी अन्य परिवर्तन किए बिना फ़ाइल के अंत में एक लाइनफ़ीड वर्ण जोड़ता है।

  2. यदि आपकी पैच फ़ाइल पहले से ही अजीब है या आप एक साथ कई संभावित सुधारों से गुजरना चाहते हैं, तो आप लाइन एन्डिंग (सीआर या सीआरएलएफ से एलएफ) सहित एन्कोडिंग (एससिआई) के साथ कई समस्याओं को ठीक कर सकते हैं:

    dos2unix -k YOURPATCHFILE

    आपको अपने ओएस के पैकेज मैनेजर से dos2unix बाइनरी स्थापित करना पड़ सकता है; अर्थात

    • डेबियन / उबंटू आधारित: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (काढ़ा के साथ): brew install dos2unix
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.