গিট EOL রূপান্তরগুলি অক্ষম করুন


107

আমি কোনও অপারেশনের জন্য লাইন শেষ না করে গিট পাওয়ার চেষ্টা করছি। দুর্ভাগ্যক্রমে, দেখে মনে হচ্ছে এটি কিছুই করে না। আমি এটিকে নীচের পরীক্ষার ক্ষেত্রে কমিয়ে দিয়েছি, যা এই আচরণটি অক্ষম করার মতো অনেকগুলি ভিন্ন পদ্ধতি রয়েছে যা আমি খুঁজে পেতে পারি।


  • দুটি মেশিন দিয়ে শুরু করুন (উইন্ডোজ কম্পিউটার = এ, লিনাক্স কম্পিউটার = বি)
  • উভয় মেশিনে: git config --global core.autocrlf false
  • উভয় মেশিনে: git config --global core.eol crlf(কেবলমাত্র ক্ষেত্রে)

  • খালি ফোল্ডার থেকে এ-তে নতুন সংগ্রহস্থল করুন:
    • git init --shared(তারপরে তৈরি .gitডিরেক্টরিটি প্রদর্শন না করা)
    • .gitignoreসংগ্রহস্থলে একটি নতুন ফাইল তৈরি করুন
    • .gitattributesএকক লাইন দিয়ে সংগ্রহস্থলটিতে একটি নতুন ফাইল তৈরি করুন :* -text
    • git add ., তারপরে git commit -m "initial commit"কাজ করার জন্য, যেমন এটি
    • git branch master_recv
    • রিমোট যুক্ত করুন
  • document.txtসিআরএলএফ সমেত ভাণ্ডারগুলিতে একটি নতুন ফাইল তৈরি করুন
  • কমিট: git add -Aতাহলেgit commit -m "<something>"
  • নোট করুন যে এর document.txtএখনও সিআরএলএফ রয়েছে (এবং এটি মুছে ফেলা এবং পুনরায় সেট করে সিআরএলএফ সহ --hardসংস্করণটি ফেরত দেয়)

  • এসসিপি সম্পূর্ণ ডিরেক্টরি কম্পিউটার বি
  • new fileসিআরএলএফ যুক্ত একটি নতুন ফাইল যুক্ত করুন
  • কমিট: git add -Aতাহলেgit commit -m "<something>"
  • নোট করুন যে বি document.txtএবং বি এর new fileদুটিতে এখনও সিআরএলএফ রয়েছে contain

  • বি এর মাস্টার এ তে টানুন: git pull <remote> master:master_recv
  • এ এর document.txtএলএফ এ পরিবর্তন হয়েছে। যুক্ত করা ফাইলটিতে new fileএলএফও রয়েছে।

বি যদি উইন্ডোজ মেশিন হয় তবে সমস্যাটি দেখা দেয় না।


হয়েছে core.autocrlf সবসময় মিথ্যা হয়েছে? মনে হচ্ছে \nআপনার ইতিমধ্যে আপনার ভাণ্ডারে লাইন শেষ রয়েছে? নেই কোন পরিবর্তন করার জন্য সেটিং \nআপনার সংগ্রহস্থলের মধ্যে \r\nআপনার কাজের ডিরেক্টরির মধ্যে।
এডওয়ার্ড থমসন

এটি সর্বদা সেট করা হয়নি (উদাহরণস্বরূপ যখন রেপোটি মূলত তৈরি করা হয়েছিল)। তবে রেপোতে ইতিমধ্যে কোনও সিআর লাইন শেষ হওয়া উচিত নয়। এছাড়াও, আবারও, আমি চাই না যে কোনও পরিবর্তন হোক।
imallett

আমি জিজ্ঞাসা কারণ আপনার সেটআপ করা উচিত CRLF হিসাবে আপনার লাইন শেষা w শ সংরক্ষণ। আপনি কি কেবলমাত্র আমার (স্বীকারোক্তিকর বিরক্তিকর) সংশোধনীর জন্য এর অবজেক্ট আইডি দিয়ে আপনার সংগ্রহস্থলে কিছু ফাইল পোস্ট করতে পারেন ?
এডওয়ার্ড থমসন

@ অ্যাডওয়ার্ড টমসন আপনার মানে কী? রেপো সর্বজনীন নয় (যেহেতু লিনাক্স মেশিনটি নেই)। আমি ধরে নিচ্ছি আপনি একটি উদাহরণ ফাইল চান। সম্পাদনা দেখুন।
imallett

হ্যাঁ, আমি সম্মত হই যে সেই ফাইলটির সিআরএলএফ লাইন শেষ রয়েছে। আপনি কি একটি বিষয় পরিষ্কার করতে পারেন: আপনি উল্লেখ করেছেন যে "উইন্ডোজ মেশিনের নতুন লাইনগুলি সিআর-তে পরিবর্তিত হয়!" অবশ্যই এটি একটি টাইপো ছিল, বা আপনি কি সত্যিই ম্যাক ওএস 9-স্টাইলের ক্যারেজ রিটার্ন লাইনের সমাপ্তি পাচ্ছেন?
এডওয়ার্ড থমসন

উত্তর:


78

আপনার প্রকল্পের ভিতরে একটি .gitattributesফাইল থাকা উচিত । বেশিরভাগ সময়, এটি নীচের মতো হওয়া উচিত (বা এই স্ক্রিন-শট ):

# Handle line endings automatically for files detected as text 
# and leave all files detected as binary untouched.
* text=auto

# Never modify line endings of our bash scripts
*.sh -crlf

#
# The above will handle all files NOT found below
#
# These files are text and should be normalized (Convert crlf => lf)
*.css           text
*.html          text
*.java          text
*.js            text
*.json          text
*.properties    text
*.txt           text
*.xml           text

# These files are binary and should be left untouched
# (binary is macro for -text -diff)
*.class         binary
*.jar           binary
*.gif           binary
*.jpg           binary
*.png           binary

স্বয়ংক্রিয় হ্যান্ডলিং অক্ষম * text=autoকরতে পরিবর্তন করুন * text=false( স্ক্রিন-শট দেখুন )।

এটার মত:

এখানে চিত্র বর্ণনা লিখুন

যদি আপনার প্রকল্পে একটি .gitattributes ফাইল না থাকে, তবে লাইন শেষ আপনার গিট কনফিগারেশন দ্বারা সেট করা হবে। আপনার গিট কনফিগারেশন পরিবর্তন করতে, এটি করুন:

এই ডিরেক্টরিতে কনফিগারেশন ফাইলে যান:

1) সি: \ প্রোগ্রামডাটা \ গিট \ কনফিগার করুন

2) নোটপ্যাড ++ এ কনফিগার ফাইলটি খুলুন (বা আপনি যে পাঠ্য সম্পাদকটি পছন্দ করেন)

3) "অটোক্রোল্ফ =" কে মিথ্যাতে পরিবর্তন করুন।

এখানে চিত্র বর্ণনা লিখুন


32
কোড ট্যাগের পরিবর্তে কেন ছবি ব্যবহার করবেন? খুব অসুবিধাজনক
ক্লিন্ট

34
কারণ আমি জিনিসগুলিকে হাইলাইট করার জন্য ছবিতে একটি বড় লাল বাক্স যুক্ত করতে পারি।
জিন

23
ব্যবহার * text=falseকরে পাঠ্য আনসেট হয় না: এটি স্ট্রিংয়ের মানকে মিথ্যা হিসাবে পাঠ্য সেট করে leaves এটি পাঠ্যকে অনির্ধারিত ছেড়ে দেওয়ার মতোই প্রভাব ফেলেছে (বিশেষভাবে সেট না করে)। ব্যবহার * -textকরে এটি বিশেষ আনসেট সেটিংস দেয়। কোনও পাঠ্যে পাঠ্য বৈশিষ্ট্যটিকে আনসেট করা গিটকে চেকইন বা চেকআউটের উপর কোনও শেষের-লাইন রূপান্তর চেষ্টা না করার কথা বলে।
জাস্টামার্টিন

এই উত্তরের জন্য @ জিনকে ধন্যবাদ এটি আমাকে সারাদিন পাগল করে চলেছে, এবং এটি আমার জন্য এটি সমাধান করেছে!
চিতাবাঘ স্কিনপিলবক্সহ্যাট

8
আমি এই উত্তরটির জন্য ধন্যবাদ বলতে পারি না বলে দুঃখিত। কেউ বিভ্রান্তিকর পরামর্শ অনুসরণ করেছে তা খুঁজে পেতে আমার অর্ধেক দিন ব্যয় করুন। @ জাস্টামার্টিন যেহেতু উল্লেখ * text=falseকরেছেন তেমন কার্যকর হয়নি। উত্তর ঠিক করুন!
পল বি

55

একটি সহজ সমাধান হ'ল:

  • নিশ্চিত করুন যে কোর.আউটোক্রল্ফ সমস্ত রেপোর জন্য মিথ্যাতে সেট করা আছে :
    git config --global core.autocrlf false
  • আপনার রেপো পুনরায় ক্লোন করুন, এবং কোনও EOL রূপান্তর সম্পন্ন হয়েছে তা পরীক্ষা করে দেখুন।
  • বা, গিট 2.16 (Q1 2018) থেকে আপনার বর্তমান রেপো রাখুন এবং একটি করুনgit add --renormalize .

যদি স্বয়ংক্রিয়ভাবে রূপান্তর হয় তবে এর অর্থ রেপোর মধ্যে একটি .gitattributes core.eolনির্দেশিকা রয়েছে।

সঙ্গে গীত 2.8+ (মার্চ 2016) , চেক এখনও সঙ্গে eol রূপান্তর হয় যদি:

git ls-files --eol

4
এখনই ব্যবহার করবেন না autocrlf! আনসেটেড autocrlfসমতুল্য false। আপনি গিতে ট্রেন্ডি মুভমেন্টগুলির চেয়ে পিছিয়ে পড়েছেন
অলস ব্যাজার

4
উপরে হিসাবে, আমি এটি চেষ্টা করেছিলাম (যদিও বৈশ্বিক পতাকার সাথে নয়), এবং এটি কার্যকর হয়নি। গিট সংস্করণ হয় 1.8.5.2
imallett

@ আইয়ানম্যাল্যাট "এই মুহুর্তে, লিনাক্স মেশিনটিতে এখনও সিআরএলএফ রয়েছে বলে মনে হচ্ছে": আপনি এটির বিষয়বস্তু পুনরায় স্বাভাবিক না করা বা এটি ক্লোন করা (যতক্ষণ আপনি উইন্ডোতে করেছিলেন)
ভনসি

যদি আপনি এটি কেবল একটি রেপো তৈরির চেষ্টা করছেন তবে কেবল চালান git config core.autocrlf false- এটি উল্লেখ করা কারণ সাধারণত অটোক্রল্ফ trueউইন্ডো এবং inputঅন্যদের জন্য হওয়া উচিত তবে কখনও কখনও আপনার অদ্ভুত প্রান্তের ক্ষেত্রে নির্দিষ্ট কিছু প্রয়োজন need আমার ক্ষেত্রে, আমি কিছু ফাইল ডাউনলোড করেছি এবং আমার করা পরিবর্তনগুলি রেকর্ড করতে চাই যাতে আমি কী করতে পারি তা মনে করতে পারি (কোডে পরিবর্তনগুলি ট্র্যাক করার বিপরীতে)। আমি জানি না যে লাইনের শেষটি গুরুত্বপূর্ণ কিনা (এবং "প্রকৃত" জিনিসগুলির বিরুদ্ধে অর্থ বোঝাতে চাই) তাই আমি অটোক্রোল্ফ অক্ষম করে দিয়েছি
ক্যাপ্টেন ম্যান

11

আমি এটি বের করেছিলাম। দেখে মনে হচ্ছে এসসিপি প্রোগ্রামটি লাইনের শেষটিকে রূপান্তর করছিল। আমি লক্ষ্য করেছি যখন আমি এলএফ শেষের সাথে ইচ্ছাকৃত একটি ফাইল তৈরি করার চেষ্টা করেছি এবং পর্যবেক্ষণ করেছি যে ডাউনলোড করার সময় এটি সিআরএলএফ হিসাবে উপস্থিত হয়েছিল।

যেহেতু এটি আমার জন্য সমাধান ছিল, তাই আমি এই উত্তরটি গ্রহণ করছি, তবে ভবিষ্যতের লোকদের আরও সাধারণ সমাধানের জন্য অন্যান্য উত্তরগুলিও উল্লেখ করা উচিত।


4
ভাল উত্তর, আমার উত্তর চেয়ে নির্দিষ্ট। +1
ভোনসি

4

থেকে gitattributes (5) man পৃষ্ঠা "প্রভাব" বিষয়ে

text

এই বৈশিষ্ট্যটি লাইনের শেষের স্বাভাবিকাকে সক্ষম করে এবং নিয়ন্ত্রণ করে। যখন কোনও পাঠ্য ফাইলটি স্বাভাবিক করা হয়, এর লাইন শেষগুলি সংগ্রহস্থলে এলএফতে রূপান্তরিত হয়। কার্যকারী ডিরেক্টরিতে কোন লাইন শেষের শৈলী ব্যবহৃত হয় তা নিয়ন্ত্রণ করতে, eolএকটি একক ফাইলের জন্য বৈশিষ্ট্য এবং core.eol সমস্ত পাঠ্য ফাইলের জন্য কনফিগারেশন ভেরিয়েবল ব্যবহার করুন।

Set

কোনও পাঠ্যের পাঠ্য বিশিষ্টটি সেট করা লাইনটির শেষ প্রান্তকে স্বাভাবিককরণ সক্ষম করে এবং পাঠকে একটি পাঠ্য ফাইল হিসাবে চিহ্নিত করে। সামগ্রীর ধরণের অনুমান না করেই শেষ-অব-লাইন রূপান্তর ঘটে।

Unset কোনও পাঠ্যে পাঠ্য বৈশিষ্ট্যটিকে আনসেট করা গিটকে চেকইন বা চেকআউটের উপর কোনও শেষের-লাইন রূপান্তর চেষ্টা না করার কথা বলে।

core.autocrlfনতুনতে (1.7.2+) গিট ব্যবহার করা হয়নি, core.eolএবং সঠিক সেটিং | আরও নির্ভরযোগ্য উপায় হিসাবে বিবেচিত পাঠ্য- গুণমানের আনসেট করা


ইন .gitattributesফাইল, আমি টেক্সট যদিও, ডান যেমন স্পষ্টভাবে প্রতিবন্ধী সবকিছু ছিল? এছাড়াও, আমি এটি কোনও রূপান্তর না করানোর একটি বিকল্প দিয়ে দেখছি না (যদিও এর crlfকোনও প্রভাব নেই)?
imallett

7
গুরুত্বপূর্ণ জিনিস যা প্রায়শই বিভ্রান্ত হয় - textকোনও রূপান্তর আনসেট এবং প্রতিরোধ করার জন্য আপনাকে .gitattributes সেট করা উচিত * -text এবং না * text=false। বৈশিষ্ট্যের falseজন্য একটি বৈধ মান নয় text- গিট এটি সনাক্ত করতে পারে না এবং পরিবর্তে এর ডিফল্ট অটোক্রল্ফ সেটিংসে ফিরে আসবে। এছাড়াও, textমান পরিবর্তন করার পরে আপনাকে আপনার স্থানীয় রেপো থেকে সমস্ত ফাইল ব্যাকআপ করতে হবে, একটি প্রতিশ্রুতিবদ্ধ করতে হবে, তারপরে আপনার প্রয়োজনীয় ফাইলগুলি যথাযথ প্রান্তের সাথে পুনরুদ্ধার করতে হবে এবং সেগুলি ফিরিয়ে দিতে প্রতিশ্রুতিবদ্ধ হবে। তারপরে আপনার শেষের লাইনগুলি আর কখনও গিট দ্বারা সংশোধিত হবে না।
জাস্টামার্টিন

1

এখানে আপনি কীভাবে একক রেপোর জন্য এটি করেন Here

.gitattributesএই রেখার সাথে রেপোর মূলে ফাইলটি তৈরি করুন

* -text

এটাই. এটি সমস্ত ফাইলের সাথে মিলে একটি ওয়াইল্ডকার্ড, পাঠ্য বৈশিষ্ট্যটি আনসেট করতে গিটকে বলছে। এর অর্থ গিটটি সমস্ত ফাইলকে বাইনারি হিসাবে বিবেচনা করে এবং এভাবে কোনও লাইন-শেষ রূপান্তর সম্পাদন করে না।

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