गेट कमिट में घातक त्रुटि "घातक: CRLF को LF द्वारा बदल दिया जाएगा"


84

मैं Ubuntu 13.10 x64 का उपयोग कर रहा हूं, और मैं एक परियोजना पर काम कर रहा हूं जो कुछ डेवलपर्स विंडोज का उपयोग कर रहे हैं, मैंने हाल ही में गिट विन्यास core.eolको "एलएफ" और core.autocrlf"इनपुट" और core.safecrlf"सच" में बदल दिया है। तब से, जब मैं अपने स्थानीय भंडार में फ़ाइल करने की कोशिश करता हूं, तो मुझे यह त्रुटि मिलती है:
fatal: CRLF would be replaced by LF in ......
जो मैं समझता हूं, अगर मैं core.eol"lf" और core.autocrlf"इनपुट" पर सेट करता हूं, तो git स्वतः CRLF को LF में बदल देगा, लेकिन यह त्रुटि क्यों आती है बाहर? मैं इस समस्या को कैसे ठीक करुं?

धन्यवाद।

जवाबों:


220

यह एक क्लासिक मुद्दा है:

http://toub.es/sites/toub.es/files/styles/standard_article/public/field/image/firstcommit.png
( लुइस ट्यूब्स की ब्लॉग पोस्ट से तस्वीर )

सामान्य रूप से फिक्स उन फाइलों को स्वयं में परिवर्तित करना है, dos2unix या स्विस फ़ाइल चाकू के साथ

मैंने हमेशा रखनाcore.autocrlffalse पसंद किया है , जिसका अर्थ है:

git config --global core.autocrlf false

यह त्रुटि संदेश git diffआउटपुट में भी रेंगता है
VonC

8
अगर मैं पहले से ही core.autocrlfइनपुट पर सेट हूं तो git मेरे लिए CRLF को LF में क्यों नहीं बदल सकता ?
aserww106

1
@William क्योंकि आप लिनक्स पर काम कर रहे हैं, और विंडोज से आने वाली फाइलों के साथ।
VonC

धन्यवाद, @VonC, मैं पहले से ही सभी फाइलों को बदलने के लिए dos2unix का उपयोग करता हूं, इसलिए जब विंडोज डेवलपर्स अपने रेपो के लिए कुछ कोड बनाते हैं, अगर मैं उनके रिपॉजिटरी से खींचता हूं, तो GRL CRLF को LF में बदल देगा, है ना? हमारा गिट सर्वर उबंटू पर है।
aserww106

1
@William मेरा मतलब है कि आप ने कहा, "मैं हाल ही में बदल git config core.eolकरने के लिए" lf"और core.autocrlf" करने के लिए input"": फ़ाइलें पहले से ही वहाँ नहीं बदलता है। इसका असर भविष्य पर पड़ेगा git pull। वर्तमान फाइलें अभी भी CRLF में हैं, और यदि संशोधित किया गया है, तो यदि संभव हो तो LF में बदल दिया जाता है, और यदि नहीं, तो आपके द्वारा उल्लिखित त्रुटि संदेश को ट्रिगर किया जाता है।
VonC

55

मुझे वही समस्या थी और बिना किसी सफलता के सुझाए गए समाधान की कोशिश की।

मुझे इसे काम करने के लिए एक दूसरी कमांड निष्पादित करनी थी:

$ git config --global core.autocrlf false
$ git config --global core.safecrlf false

5
क्या इस अतिरिक्त संपादन के लिए कोई नकारात्मक प्रभाव है?
एलेओओपी

धन्यवाद महोदय! 2020 में मेरी मदद करना :)
जो स्पिनेली

28
$ git config core.autocrlf false

3
मुझे नहीं पता कि यह क्या करता है लेकिन यह काम करता है। घातक चेतावनी चली गई और मैं अब डरने वाला नहीं हूं।
व्हिटनी

मैंने ऐसा किया और अब git diffअपनी पूरी फाइल (1000 लाइनें) को एक संघर्ष के रूप में देखता हूं। भिन्न उपकरण केवल 3 पंक्ति परिवर्तन देखते हैं।
डेगूम्स

10

एक बस dos2unix की कोशिश कर सकते हैं:

dos2unix [filename]

4

हजारों फाइलों पर मेरे साथ ऐसा हुआ। इसलिए मैंने dos2unixइसे ठीक करने के लिए एक त्वरित बैश स्क्रिप्ट लिखी । लिनक्स या मैक पर कोई और इसे उपयोगी पा सकता है।

#!/usr/bin/env bash

unwindows() {

  local errmsg
  local fpath

  # base case
  errmsg="$(git add . 2>&1)"
  if [[ $? -eq 0 ]]; then
    echo 'Successfully converted CRLF to LF in all files.'
    echo 'Successfully ran "git add .".'
    echo 'Done.'
    return 0
  fi

  fpath="${errmsg#*fatal: CRLF would be replaced by LF in }"
  fpath="${fpath%.*}"

  if [[ "${fpath}" == "${errmsg}" ]]; then
    err 'Regex failed. Could not auto-generate filename from stderr.'
    return 1
  fi

  if [[ ! -e "${fpath}" ]]; then
    err "Regex failed. '${fpath}' does not exist."
    return 1
  fi

  if ! dos2unix "${fpath}"; then
    err "Failed to run \"dos2unix '${fpath}'\"."
    return 1
  fi

  # recursive case
  unwindows
}

err() {
  local -r msg="$1"
  echo "${msg}" >&2
}

unwindows

मूल रूप से, यह करने की कोशिश करता है git add .। यदि कमांड विफल हो जाता है, तो यह त्रुटि आउटपुट से असंगत फ़ाइल का नाम पकड़ लेता है। फिर यह dos2unixउस फाइल पर चलता है । यह git add .काम करने तक इस प्रक्रिया को दोहराता रहता है ।

यदि आप इसे चलाते हैं, तो आपको dos2unix: converting file xxx to Unix format...बार-बार देखना चाहिए । यदि आप ऐसा नहीं करते हैं, तो यह काम नहीं कर रहा है, इसलिए इसे रोकने के लिए बस ctrl+ cया command+ दबाएं c


2
किसी के उत्सुक होने की स्थिति में मैं हजारों अनकम्फर्ड फ़ाइलों को कैसे रैक करने में कामयाब रहा, यह इसलिए है क्योंकि रेपो में कोड-जनरेट किए गए चित्रों का एक गुच्छा है। मैं 3 साल या किसी भी चीज के लिए कमिट नहीं कर रहा था।
ग्रीनरकोन 23

1

आपको git statusसंशोधित के रूप में प्रदर्शित होने वाली सभी फ़ाइलों को जोड़ने की आवश्यकता है :

git add file1
git add file2

और फिर अपने परिवर्तन करें:

git commit

यह आपकी स्थानीय फ़ाइलों को वैसे ही रखेगा, लेकिन autocrlfउन्हें दूरस्थ रिपॉजिटरी में रखेगा ।


1

मुझे उसी परेशानी का सामना करना पड़ा और .gitattributesनीचे के रूप में संपादन के साथ तय किया गया।

$ vim .gitattributes

2 लाइनों पर टिप्पणी करें

-* text=auto
-* text eol=lf
+# * text=auto
+# * text eol=lf

1

FYI करना सुनिश्चित नहीं है कि यह आप पर लागू होता है लेकिन मुझे यह त्रुटि तब हुई थी जब गलती से सभी node_modulesमंचन परिवर्तनों को जोड़ने की कोशिश कर रहा था । तो वास्तव .gitignoringमें node_modulesमेरी समस्या हल हो गई।


0

मैं एक मैक पर टर्मिनल का उपयोग कर रहा हूं और एक .htaccess फ़ाइल के साथ यह समस्या थी जिसे मैं करने की कोशिश कर रहा था, जो कि घातक त्रुटि थी:

fatal: CRLF would be replaced by LF in .htaccess

मैं इस समस्या को ठीक करना चाहता था, जैसे कि ओपी अनुरोध, न केवल एक झंडे को बंद करें, इसलिए मुझे यह लेख मिला जो प्रति फ़ाइल आधार पर समस्या को ठीक करने के लिए एक पर्ल कमांड देता है।

perl -pi -e 's/\r\n/\n/g' input.file

इसलिए मेरी .htaccess त्रुटि के लिए, मैंने निम्नलिखित भाग किया:

perl -pi -e 's/\r\n/\n/g' .htaccess 

कमांड लाइन से पर्ल का उपयोग करके फ़ाइलों को संपादित करने की अनुमति देने के लिए झंडे -p, -i और -e (पाई) को जोड़ा जा सकता है। इस स्थिति में सभी \ r \ n की जगह \ n के साथ मिली।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.