আমি উইন্ডোজের সিআর + এলএফের পরিবর্তে গিটকে কীভাবে এলএফ ব্যবহার করতে বাধ্য করব?


335

আমি গিটকে জাস্টটি উইন্ডোজ এর অধীনে ফাইলগুলি চেকআউট করতে বাধ্য করতে চাই LFনা কেবল ব্যবহার করে CR+LF। আমি দুটি কনফিগারেশন বিকল্প চেক করেছিলাম কিন্তু আমি সেটিংসের সঠিক সংমিশ্রণটি সন্ধান করতে সক্ষম হইনি।

আমি এটি সমস্ত ফাইলকে রূপান্তর করতে LFএবং LFফাইলগুলিকে চালু রাখতে চাই ।

মন্তব্য: আমি ব্যবহার করেছি autocrlf = inputতবে এটি যখন আপনি প্রতিশ্রুতিবদ্ধ তখন কেবল এটি মেরামত করে। আমি ব্যবহার তাদের পেতে তা জোর করতে চান LF

সম্ভবত আমি এতটা পরিষ্কার ছিলাম না: ইতিমধ্যে সংগ্রহস্থলটি ব্যবহার করা হচ্ছে LFতবে এমএসএসজিট ব্যবহার করে পরীক্ষা করা ফাইলগুলি ব্যবহার করছে CR+LFএবং আমি এমএসজিগিটকে সেগুলি পেতে বাধ্য করতে চাই LF: ইউনিক্স লাইনের সমাপ্তি জোর করে

>git config --list | grep crlf
core.autocrlf=input

2
autocrlf=inputসঠিক বিকল্প। অবশ্যই এটি সংরক্ষণাগারে থাকা প্রকৃতপক্ষে থাকা ফাইলগুলি cr+lfবা cr+lfগিটে যোগ করার আগে অন্য সরঞ্জাম দিয়ে ফাইল তৈরির হাত থেকে আপনাকে রক্ষা করে না । আপনার কোন সমস্যা হচ্ছে যে এটি কাজ করে না?
সিবি বেইলি

2
সংগ্রহস্থলের ফাইলগুলি ইতিমধ্যে কেবলমাত্র ব্যবহার করা হয় LFতবে যখন আমি এগুলিকে উইন্ডোজ এমএসএসজিটের অধীনে নিয়ে আসি তখন সেগুলিতে রূপান্তর করে CR+LF
সোরিইন

আপনার কনফিগারেশনের সাথে অবশ্যই কিছু থাকতে হবে; আমি এটি আমার এমএসজিগিত ইনস্টলটিতে সবেমাত্র পরীক্ষা করেছি। সঙ্গে autocrlfসেট input, Git ছাড়ছেন lfএকা linefeeds। আপনি কি আউটপুট পোস্ট করতে পারেন git config?
সিবি বেইলি

1
সেক্ষেত্রে আমি আপনাকে একটি বাগ লগ করার পরামর্শ দিই; অগ্রাধিকার হিসাবে একটি পরীক্ষার সংগ্রহস্থলের দিকে ইঙ্গিত করা যা আপনার সমস্যার চিত্র প্রদর্শন করে এবং আপনি যে আচরণটি দেখছেন তা পুনরুত্পাদন করার পদক্ষেপ সহ অবশ্যই ভুল (তবে আমি এটি পুনরুত্পাদন করতে পারি না)।
সিবি বেইলি

1
একটি ছোট্ট টিপ এটিও নিশ্চিত করে যে আপনি 'গিট'-তে গিট কমান্ডগুলি চালিয়ে যাচ্ছেন বলে আপনি মনে করছেন are উদাহরণস্বরূপ আপনার উইন্ডোতে গিট ইনস্টল থাকতে পারে এবং সাইগউইনে গিট ইনস্টল থাকতে পারে, তাই আপনি সঠিক গিট কনফিগারেশন সেট করেছেন কিনা তা নিশ্চিত হয়ে নিন।
lfred

উত্তর:


106

ওপি তাঁর প্রশ্নে যুক্ত করেছে:

এমএসএসজিট ব্যবহার করে চেক আউট করা ফাইলগুলি ব্যবহার করছে CR+LFএবং আমি এমএসজিগিটকে সেগুলি পেতে বাধ্য করতে চাইLF

প্রথম সরল পদক্ষেপটি এখনও একটি .gitattributesফাইলে থাকবে:

# 2010
*.txt -crlf

# 2020
*.txt text eol=lf 

(যেমন মন্তব্যে উল্লেখ দ্বারা নাতি , উল্লেখ .gitattributesশেষ অফ লাইন রূপান্তর ), কোন এড়াতে CRLFসঠিক সঙ্গে ফাইলের জন্য রূপান্তর eol

এবং আমি সর্বদা git config --global core.autocrlf false কোনও রূপান্তর অক্ষম করার পরামর্শ দিয়েছি (যা সমস্ত সংস্করণযুক্ত ফাইলে প্রযোজ্য )

ক্রস প্ল্যাটফর্ম গিট কনফিগারেশনের জন্য সেরা অনুশীলনগুলি দেখুন ?

গিট 2.16 (Q1 2018), আপনি git add --renormalize .এই .gitattributesসেটিংসটি অবিলম্বে প্রয়োগ করতে ব্যবহার করতে পারেন ।


তবে দ্বিতীয় একটি শক্তিশালী পদক্ষেপে গিটট্রিবিউট ফিল্টার ড্রাইভার জড়িত এবং একটি ধাক্কা ধাপ যুক্ত হয়

ফিল্টার ড্রাইভার

আপনি যখনই নিজের কার্যকারী গাছটিকে আপডেট করবেন, তখন কোনও স্ক্রিপ্ট কেবলমাত্র আপনার নির্দিষ্ট করা ফাইলগুলির জন্য .gitattributes, চাপ প্রয়োগ করতে LF eolএবং অন্য কোনও ফর্ম্যাটিং বিকল্পটি চাপিয়ে দিতে পারে could
যদি " clear" স্ক্রিপ্টটি কিছু না করে তবে আপনার ফাইলগুলি (কমিট করার পরে) রূপান্তর করতে হবে, ঠিক আপনার যে ফর্ম্যাটটি অনুসরণ করা উচিত তা প্রয়োগ করে।


একটি প্রশ্ন: * .txt টি। টেক্সট এক্সটেনশনযুক্ত সমস্ত ফাইলকে বা সমস্ত পাঠ্য ফাইলগুলিকে (নন বাইনারি) বোঝায়? প্রকল্পে থাকা সমস্ত ধরণের ফাইল এক্সটেনশান সহ আমি একটি তালিকা তৈরি করতে পারি না।
সোরিন

1
@ সোরিন: .txtএক্সটেনশন সহ সমস্ত ফাইল । প্রথমে এটি প্রতিষ্ঠা করা এবং * নির্দিষ্টকরণের আগে নির্দিষ্ট গ্রুপে এটি পরীক্ষা করা ভাল, এবং !*.xyz ...সেই নিয়ম থেকে কয়েকটি ফাইল বাদ দেওয়ার জন্য একটি নেতিবাচক নিয়ম যুক্ত করুন ।
ভোনসি

1
এখন .gitattributesলাইন পড়া উচিত: *.txt text eol=lfঅনুযায়ী git-scm.com/docs/gitattributes
নাতি

@ গ্র্যান্ডচাইল্ড আপনাকে ধন্যবাদ আরও দৃশ্যমানতার জন্য আমি আপনার মন্তব্যে উত্তরে অন্তর্ভুক্ত করেছি।
ভোনসি

আমি অনুমান করি আমরা যুক্ত করার পরে আমাদের .gitattributesকরতে হবেgit add --renormalize .
শুভ

461

উইন্ডোজে এলএফ এন্ডিংয়ের সঠিক উপায়টি প্রথমে এতে সেট core.autocrlfকরুন false:

git config --global core.autocrlf false

আপনি যদি মিসেসগিট ব্যবহার করছেন তবে আপনাকে এটি করতে হবে কারণ এটি trueএটির সিস্টেম সেটিংসে সেট করে ।

এখন গিট কোনও লাইনের সমাপ্তি স্বাভাবিক করবে না। আপনি যদি চেক ইন করেন এমন ফাইলগুলি স্বাভাবিক করতে চান তবে এটি করুন: text=autoআপনার .gitattributesসমস্ত ফাইলের জন্য সেট করুন :

* text=auto

এবং সেট core.eolকরা lf:

git config --global core.eol lf

এখন আপনি চালিয়ে একক রেপো ক্রলফ (ওয়ার্কিং ডিরেক্টরিতে!) এ স্যুইচ করতে পারেন

git config core.eol crlf

আপনি কনফিগারেশনটি সম্পন্ন করার পরে, আপনি রেপোর সমস্ত ফাইল স্বাভাবিক করার জন্য গিট চাইবেন । এটি করতে, আপনার রেপোর গোড়ায় যান এবং এই আদেশগুলি চালান:

git rm --cached -rf .
git diff --cached --name-only -z | xargs -n 50 -0 git add -f

আপনি যদি এখন গিটটি আপনার কার্যনির্বাহী ডিরেক্টরিতে থাকা ফাইলগুলিও স্বাভাবিক করতে চান তবে এই আদেশগুলি চালান:

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

3
আমি মারাত্মক প্যাথস্পেক পেয়ে যাচ্ছি '' কোনও ফাইলের সাথে মেলে না, ঠিক পরেgit diff --cached --name-only -z | xargs -0 git add
সিএমসিডিগ্রাগনকাই

3
এর আউটপুট কি git diff --cached --name-only?
ক্রোনিয়াল

1
এটি উল্লেখযোগ্য হতে পারে যে আপনি প্রশ্নটিতে রেপো ক্লোনিং করার সময় এই কনফিগারেশনটি সেট করতে পারেন git clone --config core.autocrlf=false <repo path>
ক্রিস লং

240

আমি প্রায়শই প্রায়শই এই উত্তরে ফিরে আসি, যদিও এগুলির কোনওোটাই আমার পক্ষে একদম সঠিক নয়। বলেছিল, আমার জন্য সঠিক উত্তরটি অন্যদের মিশ্রণ।

আমি যা কাজ করে তা নিম্নলিখিত:

 git config --global core.eol lf
 git config --global core.autocrlf input

বিশ্বব্যাপী সেটিংস সেট হওয়ার পরে যে রেপগুলি চেক আউট করা হয়েছিল তাদের জন্য, রেপোতে যা আছে তা হিসাবে সবকিছু পরীক্ষা করা হবে - আশা করা যায় LF( \n)। যে কোনও একটিকে CRLFকেবল LFচেকইনে রূপান্তর করা হবে ।

আপনি ইতিমধ্যে যাচাই করেছেন এমন একটি বিদ্যমান রেপো - এর রেপোতে সঠিক লাইন শেষ রয়েছে তবে এটি আপনার কার্যকরী অনুলিপি নয় - এটি ঠিক করার জন্য আপনি নিম্নলিখিত কমান্ডগুলি চালাতে পারেন:

git rm -rf --cached .
git reset --hard HEAD

এটি বর্তমান ডিরেক্টরি ( ) থেকে ( ) সম্পাদনা করা ফাইলগুলি বাদে প্রম্পট rm( r) ছাড়াই ( ) পুনরাবৃত্তভাবে ( ) মুছে ফেলবে । তারপর একটি রাষ্ট্র যেখানে তারা তাদের সত্য লাইন শেষা w শ (ম্যাচিং কি রেপো আছে) আছে ঐ ফাইল সব ফেরৎ।-f--cached.reset

আপনার যদি কোনও রেপোতে ফাইলের লাইন এন্ডিংগুলি ঠিক করতে হয়, আমি এমন একটি সম্পাদক দখল করার পরামর্শ দিচ্ছি যা আপনাকে এন্টেলিজ বা সাবলাইম পাঠ্যের মতো বাল্কের মতো করতে দেয় তবে আমি নিশ্চিত যে কোনও ভাল এটি সম্ভবত সমর্থন করবে।


1
আমাদের কাছে সাব ডিরেক্টরি সহ একটি একক রেপো রয়েছে যাতে বিভিন্ন লাইন শেষ হ্যান্ডলিংয়ের প্রয়োজন হয়। সুতরাং একটি বৈশ্বিক বিকল্প সেট করা এর জন্য কাজ করে না। এমনকি একক রেপোতেও নয়। আপনি কীভাবে .gitattributes এ এই একই সেটিংস প্রয়োগ করবেন?
রবজি

Notepad++নীচের ডান কোণে কারেন্টলি খোলা ফাইলটির লাইন শেষ দেখায়। এই ক্ষেত্রটিতে একটি ডান ক্লিক আপনাকে লাইন শেষ পরিবর্তন করতে দেয়।
উইঙ্কলারr

1
core.autocrlf inputবিকল্প অগ্রাহ্য core.eolসেটিং, তাই সেটিং উভয় অপ্রয়োজনীয়। ( Git-scm.com/docs/git-config দেখুন )
অ্যান্ড্রু মার্শাল

1
আপনাকে ধন্যবাদ, আপনার সহায়তায় আমি লিন্ট এবং লিনাক্স জয় করেছি। এবং এখন ফাইল চেক করতে পারেন।
GC_

57

প্রসঙ্গ

আপনি যদি

  1. সমস্ত ব্যবহারকারীকে টেক্সট ফাইলগুলির জন্য এলএফ লাইন শেষ করতে বাধ্য করতে এবং
  2. আপনি নিশ্চিত করতে পারবেন না যে সমস্ত ব্যবহারকারী তাদের গিট কনফিগারেশন পরিবর্তন করেছেন,

আপনি গিট 2.10 দিয়ে শুরু করতে পারেন। ২.১০ বা তার পরে আবশ্যক, কারণ ২.১০ ইওল = এলএফ এর সাথে টেক্সট = অটোয়ের আচরণ স্থির করেউত্স

সমাধান

.gitattributesআপনার গিট সংগ্রহস্থলের মূলটিতে নিম্নলিখিত বিষয়বস্তু যুক্ত একটি ফাইল রাখুন :

* text=auto eol=lf

এটা কমিট।

.চ্ছিক টুইট

.editorconfigপছন্দসই লাইন শেষ হওয়ার সাথে সাথে আধুনিক টুলিং নতুন ফাইল তৈরি করে তা নিশ্চিত করার জন্য আপনি আপনার সংগ্রহস্থলের মূলটিতে একটি যুক্ত করতে পারেন ।

# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

3
এটি আমার জন্য সেরা সমাধান ছিল। আমি এটিকে সম্পাদককনফিগ.অর্গ.এর সাথেও সংযুক্ত করেছিলাম যাতে ইন্টেলিজে লেখার সময় আমি এলএফ ইওলগুলি লিখি।
জাজেপি

এটি এখন পর্যন্ত সেরা সমাধান is ম্যানুয়ালি কোনও কনফিগারেশন কমান্ড চালানোর দরকার নেই!
ক্যামেরন ট্যাকলিন্ড

26

core.autocrlf=inputআপনি যা চান তার জন্য সঠিক সেটিংস, তবে পরিবর্তনটি কার্যকর হওয়ার জন্য আপনাকে একটি git update-index --refreshএবং / অথবা একটি git reset --hardকরতে হতে পারে।

সঙ্গে core.autocrlfসেট input, Git চেক-আউট (তাই যদি আপনি রেপো তে এলএফ আছে, তবে আপনি এলএফ পাবেন না) উপর সম্পর্কে newline-রূপান্তর প্রযোজ্য হবে না, কিন্তু এটা নিশ্চিত করতে হবে যে ক্ষেত্রে আপনি আপ জগাখিচুড়ি এবং পরিশ্রমী মধ্যে কিছু CRLFs পরিচয় করিয়ে কোনওভাবে অনুলিপি করুন, তারা রেপোতে প্রবেশ করবে না।


19
কমান্ডগুলি git rm --cched -r হওয়া উচিত। && গিট রিসেট
--হাড়্ড

0

আপনি এই সমস্যার সমাধান এখানে পেতে পারেন: https://help.github.com/en/github/using-git/configuring-git-to-handle-line-endings

আপনি কীভাবে উইন্ডোজগুলিতে এই সমস্যাটি সমাধান করতে পারবেন তার সরলীকৃত বর্ণনা:

লাইন শেষের জন্য গ্লোবাল সেটিংস গিট কনফিগারেশন কোর.আউটোক্রল্ফ কমান্ডটি কীভাবে গিট লাইনের সমাপ্তি পরিচালনা করে তা পরিবর্তন করতে ব্যবহৃত হয়। এটি একটি একক যুক্তি লাগে।

উইন্ডোজে, আপনি কেবল কনফিগারেশনে সত্যই পাস করেন। উদাহরণস্বরূপ: সি:> গিট কনফিগারেশন - গ্লোবাল কোর.আউটোক্রল্ফ সত্য

শুভকামনা, আমি আশা করি আমি সাহায্য করেছি।

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