গিট রেপো এবং ওয়ার্কিং কপির জন্য এলএফ ইওলকে জোর করুন


170

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

আমি এখন লিনাক্সে আংশিক বিকাশ করছি এবং আমি লাইন শেষটি পরিষ্কার করতে চাই। আমি কীভাবে নিশ্চিত করতে পারি যে ফাইলগুলি গিথুবে এলএফ দিয়ে সঠিকভাবে সংরক্ষণ করা আছে এবং আমার কার্যকরী অনুলিপিতে এলএফ আছে?

আমি একটি .gitattributesফাইল সেট আপ করেছি text eol=LF; এটা কি ঠিক? যে প্রতিশ্রুতিবদ্ধ এবং ধাক্কা দিয়ে, আমি কি কেবলমাত্র rmআমার স্থানীয় রেপো এবং পছন্দসই প্রভাব পেতে গিথুব থেকে পুনরায় ক্লোন করতে পারি?




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

আপনি কি এই গিথুব গাইডটি দেখেছেন ?
অ্যান্ডি

উত্তর:


237

আপনার সংগ্রহস্থলগুলিতে কী কী ফাইল রয়েছে সে সম্পর্কে কিছুটা তথ্য ছাড়াই (খাঁটি উত্স কোড, চিত্র, এক্সিকিউটেবল, ...), প্রশ্নের উত্তর দেওয়া কিছুটা কঠিন :)

এর পাশাপাশি, আমি বিবেচনা করব যে আপনি এলএফ-কে আপনার কার্যনির্বাহী ডিরেক্টরিতে লাইন শেষ হিসাবে ডিফল্ট করতে ইচ্ছুক কারণ আপনি উইন্ডোজ বা লিনাক্সে কাজ করে এমন .git সংগ্রহস্থলটিতে পাঠ্য ফাইলগুলির এলএফ লাইনের শেষ আছে তা নিশ্চিত করতে ইচ্ছুক? । দুঃখিত চেয়ে ভাল নিরাপদ ....

তবে এর চেয়ে আরও ভাল বিকল্প রয়েছে: আপনার লিনাক্স ওয়ার্কডিরের এলএফ লাইন শেষ থেকে উপকার পাবেন, আপনার উইন্ডোজ ওয়ার্কডিরের সিআরএলএফ লাইন শেষ হবে এবং আপনার ভাণ্ডারে এলএফ লাইন শেষ হবে।

আপনি যেমন লিনাক্স এবং উইন্ডোজে আংশিকভাবে কাজ করছেন, নিশ্চিত হন core.eolযে সেট করা আছে nativeএবং core.autocrlfসেট করা আছে true

তারপরে, আপনার .gitattributesফাইলের সামগ্রীটি নীচের সাথে প্রতিস্থাপন করুন

* text=auto

এটি গিটকে আপনার জন্য কমিট এবং চেকআউটে স্বয়ংক্রিয় লাইন শেষ রূপান্তরটি পরিচালনা করতে দেবে। বাইনারি ফাইলগুলি পরিবর্তন করা হবে না, পাঠ্য ফাইল হিসাবে চিহ্নিত ফাইলগুলি ফ্লাইতে রূপান্তরিত লাইনের শেষ দেখতে পাবে।

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

আপনি যদি সি ভিত্তিক চিত্র প্রক্রিয়াকরণ প্রকল্পে কাজ করে থাকেন তবে .gitattributesনীচের সাথে আপনার ফাইলের বিষয়বস্তু প্রতিস্থাপন করুন

* text=auto
*.txt text
*.c text
*.h text
*.jpg binary

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

এই সমস্তটির অভ্যন্তরীণ বিশদ সম্পর্কে আরও গভীর ধারণা পেতে, আমি আপনাকে টিম ক্লেম, একজন গিথুবারের এই খুব ভাল পোস্ট "আপনার লাইনের শেষের দিকে মন" পড়ার পরামর্শ দিই।

প্রকৃত বিশ্বের উদাহরণ হিসাবে, আপনি এই প্রতিশ্রুতিতেও উঁকি দিতে পারেন যেখানে কোনও .gitattributesফাইলের সেই পরিবর্তনগুলি প্রদর্শিত হয়।

নিম্নলিখিত মন্তব্য বিবেচনা করে উত্তর আপডেট করুন

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

বোধ হয়। স্পষ্টতার জন্য ধন্যবাদ। এই নির্দিষ্ট প্রসঙ্গে, .gitattributesফাইল নিজে থেকে পর্যাপ্ত হবে না।

আপনার সংগ্রহস্থলের বিরুদ্ধে নিম্নলিখিত কমান্ডগুলি চালান

$ git config core.eol lf
$ git config core.autocrlf input

আপনার সংগ্রহস্থলটি আপনার লিনাক্স এবং উইন্ডোজ পরিবেশের মধ্যে ভাগ করা হওয়ায় এটি উভয় পরিবেশের জন্য স্থানীয় কনফিগারেশন ফাইল আপডেট করবে। core.eolটেক্সট ফাইলগুলি চেকআউটগুলিতে এলএফ লাইনের সমাপ্তি নিশ্চিত করবে। পাঠ্য ফাইলগুলিতে সম্ভাব্য সিআরএলএফ core.autocrlfনিশ্চিত করবে (উদাহরণস্বরূপ একটি অনুলিপি / পেস্ট অপারেশন থেকে) আপনার সংগ্রহস্থলে এলএফতে রূপান্তরিত হবে।

Allyচ্ছিকভাবে, আপনি নীচের মতো কিছু সম্বলিত একটি ফাইল তৈরি করে গিটকে একটি পাঠ্য ফাইল কী তা আলাদা করতে সহায়তা করতে পারেন .gitattributes:

# Autodetect text files
* text=auto

# ...Unless the name matches the following
# overriding patterns

# Definitively text files 
*.txt text
*.c text
*.h text

# Ensure those won't be messed up with
*.jpg binary
*.data binary

যদি আপনি কোনও .gitattributesফাইল তৈরির সিদ্ধান্ত নিয়ে থাকেন তবে তা প্রতিশ্রুতিবদ্ধ

সর্বশেষে, তা নিশ্চিত git statusউল্লেখ "কিছুই কমিট (ডিরেক্টরির পরিষ্কার কাজ)" , তারপর নিম্নলিখিত ক্রিয়াকলাপটি সম্পাদন

$ git checkout-index --force --all

এটি আপনার কনফিগারেশনের পরিবর্তনগুলি এবং .gitattributesফাইলটিকে বিবেচনায় রেখে এবং আপনার পাঠ্য ফাইলগুলিতে কোনও সম্ভাব্য উপেক্ষিত সিআরএলএফকে প্রতিস্থাপন করে আপনার কার্যকরী ডিরেক্টরিতে আপনার ফাইলগুলি পুনরায় তৈরি করবে ।

এটি হয়ে গেলে, আপনার কার্যকরী ডিরেক্টরিতে থাকা প্রতিটি পাঠ্য ফাইলের এলএফ লাইনটি শেষ হয়ে যায় এবং git statusতবুও ওয়ার্কডিরকে পরিষ্কার হিসাবে বিবেচনা করা উচিত।


34
আমি আসলে আমার উইন্ডোজ ডিরেক্টরিগুলিতে সিআরএলএফ চাই না, কারণ আমার লিনাক্স পরিবেশটি আসলে একটি ভার্চুয়ালবক্স যা উইন্ডোজ ডিরেক্টরি শেয়ার করে; এবং নোটপ্যাড ++ ইত্যাদি যখন উইন্ডোতে এলএফ-কেবল পরিচালনা করতে পারে তবে সিআরএলএফ নিয়ে viকম খুশি। আমি কি কেবল এটি পরিবর্তন করতে চাই যা core.autocrlfএটি false(বা input)?
চৌলেট

5
দুর্দান্ত উত্তর। এই সেটআপটি ব্যবহার করা অন্য যে কোনও ব্যক্তির জন্য একটি দ্রুত নোট: "। পাঠ্য = অটো" রেখাটি আপনার .gitattributes ফাইলের প্রথম লাইন হওয়া উচিত যাতে পরবর্তী লাইনগুলি সেটিংটিকে ওভাররাইড করতে পারে।
এরি প্যাট্রিক

9
@ সিএমসিডিগ্রাগনকাই আপনার শেলের উপর নির্ভর করে git checkout-index --force --allআরও ভাল কাজ করতে পারে। দ্বিতীয় বিষয়টি মূল প্রশ্নটি সম্পর্কিত কিছুটা বন্ধ বিষয় দেখায়। একটি নিবেদিত প্রশ্ন জিজ্ঞাসা সম্পর্কে?
নলটোকেন

8
লিনাক্স এবং উইন্ডোজের মধ্যে ওয়ার্কিং অনুলিপি ভাগ করে নেওয়ার ক্ষেত্রে কেন .gitattributes হ্যান্ডেল করতে পারে তা আমি বুঝতে পারি না। আমরা সেট করা যায় না textএবং eol=lfএর মাধ্যমে আপনার উত্তর বর্ণনা অনুযায়ী একই ফলাফল অর্জন করা core.eolএবং core.autocrlf?
ড্যানিয়েলস্যাঙ্ক

10
git checkout-index --force --allআমার জন্য কিছুই করে না এই সমস্যাটি নিয়ে কাজ করার জন্য গিটহাবের নির্দেশাবলীতে কমান্ডগুলির তালিকা কী কাজ করে ।
রোমান স্টারকভ

126

গিট 2.10 দিয়ে শুরু (2016-09-03 প্রকাশিত), প্রতিটি পাঠ্য ফাইল পৃথকভাবে গণনা করা প্রয়োজন নয়। গিট 2.10 eol = lf এর সাথে টেক্সট = অটোয়ের একসাথে আচরণ স্থির করেউত্স

.gitattributes আপনার গিট সংগ্রহস্থলের মূলের মধ্যে ফাইল:

* text=auto eol=lf

এটি যোগ করুন এবং প্রতিশ্রুতিবদ্ধ।

এরপরে, আপনি পদক্ষেপগুলি অনুসরণ করতে পারেন এবং সমস্ত ফাইল এখনই স্বাভাবিক করা হয়েছে:

git rm --cached -r .  # Remove every file from git's index.
git reset --hard      # Rewrite git's index to pick up all the new line endings.

উত্স: কেনারব দ্বারা উত্তর


7
গিট 2.10 মুক্তি পেয়েছে 3 রা সেপ্টেম্বর, 2016.
স্টিলে

আমি এটি চালিয়েছি এবং এটি আমার সমস্ত অ-পাঠ্য ফাইলগুলি ব্রিক করেছে
অ্যান্থনি

আপনি স্পষ্টভাবে নির্দিষ্ট ফাইলগুলিতে বাইনারি মোড সেট করতে পারেন। - আমি অবাক হয়েছি কেন কিছু ফাইলগুলিতে অটো সনাক্তকরণ (এখনও ?!) ভাঙা
কোপ্পার

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ক্লিটাস ডাব্লু

25

সমস্ত পাঠ্য ফাইলের জন্য এলএফ লাইন শেষ করতে বাধ্য করতে, আপনি .gitattributesনিম্নলিখিত রেখাগুলির সাহায্যে আপনার সংগ্রহস্থলের শীর্ষ-স্তরে ফাইল তৈরি করতে পারেন (পছন্দ অনুযায়ী পরিবর্তন করুন):

# Ensure all C and PHP files use LF.
*.c         eol=lf
*.php       eol=lf

যা নিশ্চিত করে যে গিটকে সমস্ত ফাইল পাঠ্য ফাইল হিসাবে বিবেচনা করে তা LFসংগ্রহস্থলের () সাধারণত লাইনটি সাধারণত core.eolকোনটি কনফিগারেশন নিয়ন্ত্রণ করে আপনার নিয়ন্ত্রণ করে)।

নতুন অ্যাট্রিবিউট সেটিংসের ভিত্তিতে, সিআরএলএফযুক্ত যে কোনও পাঠ্য ফাইলগুলি গিট দ্বারা স্বাভাবিক করা উচিত। যদি এটি স্বয়ংক্রিয়ভাবে না ঘটে, আপনি লাইন এন্ডিংগুলি পরিবর্তন করে নিজেই একটি সংগ্রহশালা রিফ্রেশ করতে পারেন, যাতে আপনি নীচের পদক্ষেপগুলি (ক্লিন ওয়ার্কিং ডিরেক্টরী প্রদত্ত) দ্বারা ওয়ার্কিং ডিরেক্টরিটি পুনরায় স্ক্যান করে প্রতিশ্রুতিবদ্ধ করতে পারেন:

$ echo "* text=auto" >> .gitattributes
$ rm .git/index     # Remove the index to force Git to
$ git reset         # re-scan the working directory
$ git status        # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"

বা গিটহাব ডক্স অনুসারে :

git add . -u
git commit -m "Saving files before refreshing line endings"
git rm --cached -r . # Remove every file from Git's index.
git reset --hard # Rewrite the Git index to pick up all the new line endings.
git add . # Add all your changed files back, and prepare them for a commit.
git commit -m "Normalize all the line endings" # Commit the changes to your repository.

আরও দেখুন: @ চারেলস বেইলি পোস্ট

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

manual.pdf      -text

বা এটিকে স্পষ্টভাবে বাইনারি হিসাবে চিহ্নিত করুন:

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

আরো কিছু উন্নত Git নিয়মমাফিককরণ ফাইল দেখতে, চেক .gitattributesDrupal এর কোর :

# Drupal git normalization
# @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
# @see https://www.drupal.org/node/1542048

# Normally these settings would be done with macro attributes for improved
# readability and easier maintenance. However macros can only be defined at the
# repository root directory. Drupal avoids making any assumptions about where it
# is installed.

# Define text file attributes.
# - Treat them as text.
# - Ensure no CRLF line-endings, neither on checkout nor on checkin.
# - Detect whitespace errors.
#   - Exposed by default in `git diff --color` on the CLI.
#   - Validate with `git diff --check`.
#   - Deny applying with `git apply --whitespace=error-all`.
#   - Fix automatically with `git apply --whitespace=fix`.

*.config  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.css     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.dist    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.engine  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
*.html    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
*.inc     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
*.js      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.json    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.lock    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.map     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.md      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.module  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
*.php     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
*.po      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
*.script  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.sh      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
*.sql     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.svg     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.theme   text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
*.twig    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.txt     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.xml     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
*.yml     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2

# Define binary file attributes.
# - Do not treat them as text.
# - Include binary diff in patches instead of "binary files differ."
*.eot     -text diff
*.exe     -text diff
*.gif     -text diff
*.gz      -text diff
*.ico     -text diff
*.jpeg    -text diff
*.jpg     -text diff
*.otf     -text diff
*.phar    -text diff
*.png     -text diff
*.svgz    -text diff
*.ttf     -text diff
*.woff    -text diff
*.woff2   -text diff

আরো দেখুন:


2
1. text=autoবিভ্রান্তিমূলক। আপনি ব্যবহার করতে পারবেন না text=autoএবং eolএকসঙ্গে। সেটিংস eolপাঠ্য ফাইলগুলির স্বয়ংক্রিয় সনাক্তকরণ অক্ষম করে। এজন্য আপনাকে সেই সমস্ত ফাইলের ধরণ নির্দিষ্ট করতে হবে। যদি autoসক্ষম করা থাকে তবে আপনার এগুলির সমস্ত প্রয়োজন হবে না। 2. আপনার দরকার নেই textএবং eol=lfeol=lfকার্যকরভাবে সেট text
বেন

2
২ য় @ বেন যা বলেছে, আপনি যদি সমস্ত বাইনারি ফাইল স্পষ্টভাবে চিহ্নিত না করেন তবে এই কনফিগারটিটি বর্তমানে ভুল এবং বিপজ্জনক।
মাইকেল আর

1
আমি পড়েছি যে * text=auto eol=lfপ্রথমটি text=autoওভাররাইড হয়ে গেছে eol=lf। আপনি এই বৈশিষ্ট্যটি কোথায় পেলেন? : এখানে আমার উৎস stackoverflow.com/questions/29435156/...
CMCDragonkai

* text=auto eol=lfউদাহরণ থেকে সরানো হয়েছে, যেহেতু এটি দ্রুপাল থেকেও সরানো হয়েছিল । পাশাপাশি মন্তব্য অপসারণ বিবেচনা করুন।
কেনারব

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