গিট কমিট মারাত্মক ত্রুটি পান "মারাত্মক: সিআরএলএফ ইন এলএফ দ্বারা প্রতিস্থাপন করা হবে"


85

আমি উবুন্টু 13.10 x64 ব্যবহার করছি, এবং আমি এমন একটি প্রকল্পে কাজ করছি যা কিছু বিকাশকারী উইন্ডোজ ব্যবহার করছেন, আমি সম্প্রতি গিট কনফিগারেশনটি core.eol"এলএফ" এবং core.autocrlf"ইনপুট" এবং core.safecrlf"সত্য" হিসাবে পরিবর্তন করেছি। তারপরে, যখন আমি আমার স্থানীয় সংগ্রহস্থলে ফাইল দেওয়ার চেষ্টা করি তখন আমি এই ত্রুটিটি পাই:
fatal: CRLF would be replaced by LF in ......
আমি যা বুঝি তার থেকে যদি আমি core.eol"এলএফ" এবং core.autocrlf"ইনপুট" এ সেট করি তবে গিটটি স্বয়ংক্রিয়ভাবে সিআরএলএফকে এলএফতে রূপান্তরিত করবে, তবে এই ত্রুটি কেন আসবে বাইরে? আমি কিভাবে এই সমস্যা ঠিক করতে পারবো?

ধন্যবাদ.

উত্তর:


221

এটি একটি সর্বোত্তম সমস্যা:

http://toub.es/sites/toub.es/files/styles/standard_article/public/field/image/firstcommit.png
(থেকে ছবি লুইস টিউবে এর ব্লগ পোস্ট )

সাধারণ ফিক্সটি হ'ল ডস 2 ইউনিক্স বা সুইস ফাইল ছুরির সাহায্যে এই ফাইলগুলিকে নিজে রূপান্তর করা ।

আমি সবসময় পছন্দ করেছেন রাখা core.autocrlfথেকেfalse , যার মানে:

git config --global core.autocrlf false

এই ত্রুটি বার্তা এমনকি git diffআউটপুট মধ্যে creeps
ভোনসি

8
আমি যদি ইতিমধ্যে core.autocrlfইনপুট সেট করে রেখেছি তবে গিট কেন আমার জন্য সিআরএলএফকে এলএফ-তে পরিবর্তন করতে পারে না ?
aserww106

4
@ উইলিয়াম, কারণ আপনি লিনাক্স এবং উইন্ডোজ থেকে আসা ফাইলগুলির সাথে কাজ করছেন।
ভনসি

আপনাকে ধন্যবাদ, @ ভনসি, আমি ইতিমধ্যে সমস্ত ফাইল ইওলটি পরিবর্তন করতে ডস 2 ইউনিক্স ব্যবহার করেছি, সুতরাং যখন উইন্ডোজ বিকাশকারীরা তাদের রেপোতে কিছু কোড দেয়, যদি আমি তাদের সংগ্রহস্থল থেকে টান করি, গিটটি সিআরএলএফকে এলএফতে রূপান্তরিত করে, তাই না? আমাদের গিট সার্ভার উবুন্টুতে রয়েছে।
aserww106

4
@ উইলিয়াম আমার অর্থ এই যে আপনি বলেছিলেন যে "আমি সম্প্রতি git config core.eol" lf"এবং core.autocrlf" input"" "এ পরিবর্তন করেছি: যা সেখানে ইতিমধ্যে ফাইলগুলি পরিবর্তন করে না। এটি ভবিষ্যতে প্রভাব ফেলবে git pull। বর্তমান ফাইলগুলি এখনও সিআরএলএফ-এ রয়েছে এবং যদি সংশোধন করা হয়, সম্ভব হলে এলএফ-তে রূপান্তরিত হয় এবং যদি না হয় তবে আপনার উল্লিখিত ত্রুটি বার্তাটি ট্রিগার করে।
ভোনসি

56

আমার একই সমস্যা ছিল এবং কোনও সাফল্য ছাড়াই প্রস্তাবিত সমাধানটি চেষ্টা করেছিলাম।

এটি কার্যকর করার জন্য আমাকে একটি দ্বিতীয় কমান্ড কার্যকর করতে হয়েছিল:

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

4
এই অতিরিক্ত সম্পাদনায় কোনও নেতিবাচক প্রভাব আছে?
অ্যালিওপ

28
$ git config core.autocrlf false

4
আমি জানি না এটি কী করে তবে এটি কাজ করে। মারাত্মক সতর্কতা চলে যায় এবং আমি আর ভয় পাই না।
WH1tney

আমি এটি করেছি এবং এখন git diffআমার সম্পূর্ণ ফাইলটি (1000 লাইন) একটি দ্বন্দ্ব হিসাবে দেখছে। বিভিন্ন সরঞ্জামগুলি কেবল 3 লাইন পরিবর্তন দেখতে পায়।
ডাগ্রুম

10

কেউ কেবল ডস 2 ইউনিক্স ব্যবহার করে দেখতে পারেন:

dos2unix [filename]

5

হাজার হাজার ফাইলে আমার সাথে এটি ঘটেছিল। তাই আমার 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


4
যদি কারও কৌতূহল ঘটে থাকে যে আমি কীভাবে হাজার হাজার অননুমোদিত ফাইলগুলি রেক আপ করতে পেরেছি, কারণ রেপোতে প্রচুর কোড-উত্পন্ন চিত্র রয়েছে। আমি 3 বছর বা কোনও কিছুর জন্য প্রতিশ্রুতি স্থগিত করছিলাম না।
গ্রিনরাকুন 23

1

আপনাকে এমন সমস্ত ফাইল যুক্ত করতে হবে যা git statusপরিবর্তিত হিসাবে প্রদর্শিত হয়:

git add file1
git add file2

এবং তারপরে আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করুন:

git commit

এটি আপনার স্থানীয় ফাইলগুলিকে যেমন রাখবে তবে autocrlfসেগুলি দূরবর্তী সংগ্রহস্থলে থাকবে।


1

আমি একই সমস্যার মুখোমুখি হয়েছি এবং .gitattributesনীচের মত সম্পাদনা করে স্থির করেছি ।

$ vim .gitattributes

.gitattributes মধ্যে 2 লাইন মন্তব্য

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

1

এফওয়াইআই নিশ্চিত নয় যে এটি আপনার জন্য প্রযোজ্য কিনা তবে দুর্ঘটনাক্রমে node_modulesমঞ্চ পরিবর্তনগুলিতে সমস্ত যুক্ত করার চেষ্টা করার সময় আমি এই ত্রুটিটি পাচ্ছিলাম । তাই আসলে আমার সমস্যার সমাধান।.gitignoringnode_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 (পাই) একত্রিত করা যেতে পারে। এই ক্ষেত্রে \ n এর সাথে পাওয়া সমস্ত \ r \ n প্রতিস্থাপন করা হচ্ছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.