--- আপডেট 3 --- (2 তারিখের সাথে বিরোধ নেই)
উইন্ডোজ ব্যবহারকারীরা কাজ করতে পছন্দ করেন CRLF
এবং লিনাক্স / ম্যাক ব্যবহারকারীরা LF
পাঠ্য ফাইলগুলিতে কাজ করা পছন্দ করেন এমন ক্ষেত্রে বিবেচনা করে । একটি সংগ্রহস্থল রক্ষণাবেক্ষণকারীর দৃষ্টিকোণ থেকে উত্তর সরবরাহ করা :
আমার জন্য সর্বোত্তম কৌশল (সমাধান করার জন্য কম সমস্যা) হ'ল: আপনি উইন্ডোজ-কেবলমাত্র প্রকল্পে কাজ করছেন এমনকী সমস্ত পাঠ্য ফাইল LF
ভিতরে গিট রেপো সহ রাখুন । তারপরে ক্লায়েন্টদের কাজ করার স্বাধীনতা দিন তাদের পছন্দের লাইনের সমাপ্তি শৈলীতে , শর্ত থাকে যে তারা একটি core.autocrlf
সম্পত্তি মূল্য বেছে নেবে যা প্রতিশ্রুতি দেওয়ার জন্য ফাইলগুলি সংরক্ষণের সময় আপনার কৌশলটিকে (রেপোতে এলএফ) সম্মান করবে ।
মঞ্চায়ন হ'ল যা বোঝার চেষ্টা করার সময় অনেকে বিভ্রান্ত করেনতুন লাইনের কৌশলগুলি কীভাবে কাজ করে । core.autocrlf
সম্পত্তির জন্য সঠিক মানটি বাছাইয়ের আগে নিম্নলিখিত পয়েন্টগুলি অবলম্বন করা অপরিহার্য :
- কমিট (জন্য একটি টেক্সট ফাইল যোগ করার পদ্ধতি নাটক মঞ্চস্থ এটা) হল অন্য জায়গায় ফাইল কপি মত ভিতরে
.git/
সঙ্গে উপ-ডিরেক্টরি রূপান্তরিত লাইন শেষা w শ (তার উপর নির্ভর করে core.autocrlf
আপনার ক্লায়েন্ট কনফিগ উপর মান)। এই সমস্ত স্থানীয়ভাবে করা হয়।
- বিন্যাস
core.autocrlf
প্রশ্নের উত্তর দেওয়ার মতো (সমস্ত ওএসে ঠিক একই প্রশ্ন):
- "গিট-ক্লায়েন্টকে ক। একটি রিমোট থেকে রেপো পরিবর্তন করা বা টেনে আনা (টানতে) যখন এলএফ-থেকে-সিআরএলএফ রূপান্তরিত করা উচিত খ। কমিটের জন্য কোনও ফাইল যুক্ত করার সময় সিআরএলএফ-থেকে-এলএফ রূপান্তর করতে হবে? " এবং সম্ভাব্য উত্তর (মান) আছেন:
false:
" উপরোক্ত কিছুই করবেন না ",
input:
" না শুধুমাত্র b "
true
: " না a ও ও b "
- মনে রাখবেন যে " কেবলমাত্র একটি করুন " নেই
ভাগ্যক্রমে
- গিট ক্লায়েন্ট ডিফল্ট (উইন্ডোজ:,
core.autocrlf: true
লিনাক্স / ম্যাক
core.autocrlf: false
:) এলএফ-কেবল-রেপো কৌশলটির সাথে সামঞ্জস্যপূর্ণ ।
অর্থ : উইন্ডোজ ক্লায়েন্টরা ডিফল্টরূপে সংগ্রহশালাটি চেক আউট করার সময় সিআরএলএফ রূপান্তরিত করবে এবং প্রতিশ্রুতি যুক্ত করার সময় এলএফ-তে রূপান্তরিত হবে। এবং লিনাক্স ক্লায়েন্টরা ডিফল্টরূপে কোনও রূপান্তর করবে না। এটি তাত্ত্বিকভাবে আপনার রেপোকে কেবলমাত্র lf- রাখে।
দুর্ভাগ্যবশত:
- জিইআইআই ক্লায়েন্ট থাকতে পারে যারা গিট
core.autocrlf
মানটিকে সম্মান করে না
- এমন লোক থাকতে পারে যা আপনার এলএফ-রেপো কৌশলটিকে সম্মান জানাতে কোনও মান ব্যবহার করে না। উদাহরণস্বরূপ তারা
core.autocrlf=false
প্রতিশ্রুতিবদ্ধতার জন্য সিআরএলএফ দিয়ে একটি ফাইল ব্যবহার করে এবং যুক্ত করে।
উপরের ক্লায়েন্টদের দ্বারা প্রতিশ্রুতিবদ্ধ ASAP নন-এলএফ পাঠ্য ফাইলগুলি সনাক্ত করতে আপনি --- আপডেট 2 --- এ বর্ণিত যা অনুসরণ করতে পারেন: ( git grep -I --files-with-matches --perl-regexp '\r' HEAD
একটি ক্লায়েন্টের উপর: --with-libpcre
পতাকা ব্যবহার করে সংকলিত )
এবং এখানে ধরা হল: । আমি রেপো রক্ষণাবেক্ষণকারী হিসাবে একটিgit.autocrlf=input
এটি রাখি যাতে আমি কোনও ভুল প্রতিশ্রুতিবদ্ধ ফাইলগুলি কেবল কমিটের জন্য আবার যুক্ত করে ঠিক করতে পারি। এবং আমি একটি প্রতিশ্রুতিবদ্ধ পাঠ্য সরবরাহ করি: "ভুলভাবে প্রতিশ্রুতিবদ্ধ ফাইলগুলি ঠিক করা"।
যতদূর .gitattributes
গোপনে রয়েছে। আমি এটিতে বিশ্বাস করি না, কারণ আরও বেশি ইউআই ক্লায়েন্ট রয়েছে যা এটি বুঝতে পারে না। আমি কেবল এটি পাঠ্য এবং বাইনারি ফাইলগুলির জন্য ইঙ্গিত প্রদান করতে ব্যবহার করি এবং সম্ভবত কিছু ব্যতিক্রমী ফাইলগুলি পতাকাঙ্কিত করে যা সর্বত্র একই লাইন-এন্ডিংগুলি রাখা উচিত:
*.java text !eol # Don't do auto-detection. Treat as text (don't set any eol rule. use client's)
*.jpg -text # Don't do auto-detection. Treat as binary
*.sh text eol=lf # Don't do auto-detection. Treat as text. Checkout and add with eol=lf
*.bat text eol=crlf # Treat as text. Checkout and add with eol=crlf
প্রশ্ন: তবে আমরা কেন নতুন লাইনের হ্যান্ডলিং কৌশলটিতে আগ্রহী?
উত্তর: একটি অক্ষর পরিবর্তনের প্রতিশ্রুতিবদ্ধতা এড়াতে , 5000-লাইনের পরিবর্তন হিসাবে উপস্থিত হবেন, কেবলমাত্র ক্লায়েন্ট যে সম্পাদন করে তার পূর্বে সম্পূর্ণ ফাইলটি CRF থেকে lf (বা বিপরীতে) প্রতিশ্রুতি যুক্ত করার আগে রূপান্তর করে। কোনও বিরোধের সমাধানের সাথে জড়িত থাকলে এটি বরং বেদনাদায়ক হতে পারে । অথবা এটি কিছু ক্ষেত্রে অযৌক্তিক দ্বন্দ্বের কারণ হতে পারে।
--- আপডেট 2 ---
গিট ক্লায়েন্টের ডায়াল্টস বেশিরভাগ ক্ষেত্রে কাজ করবে। এমনকি যদি আপনার কেবল উইন্ডোতে কেবল ক্লায়েন্ট থাকে তবে লিনাক্স কেবল ক্লায়েন্ট বা উভয়ই। এইগুলো:
- উইন্ডোজ:
core.autocrlf=true
মানে চেকআউটে লাইনগুলিকে সিআরএলএফ-তে রূপান্তর করুন এবং ফাইলগুলি যুক্ত করার সময় লাইনে এলএফ-তে রূপান্তর করুন।
- লিনাক্স:
core.autocrlf=input
অর্থ চেকআউটে লাইনগুলি রূপান্তর করবেন না (যেহেতু ফাইলগুলি এলএফ দিয়ে প্রতিশ্রুতিবদ্ধ হওয়া প্রত্যাশিত নয়) এবং ফাইলগুলি যুক্ত করার সময় লাইনগুলিকে এলএফ-তে রূপান্তর করুন (প্রয়োজনে)। ( - আপডেট3 - : দেখে মনে হচ্ছে false
এটি ডিফল্টরূপে রয়েছে তবে এটি আবার ঠিক আছে)
সম্পত্তিটি বিভিন্ন স্কোপে সেট করা যায়। --global
শেষে বর্ণিত কিছু আইডিই সমস্যা এড়াতে আমি স্পষ্টভাবে স্কোপটিতে সেট করার পরামর্শ দেব ।
git config core.autocrlf
git config --global core.autocrlf
git config --system core.autocrlf
git config --local core.autocrlf
git config --show-origin core.autocrlf
এছাড়াও ডকুমেন্টেশন গিট করার প্রস্তাব দেওয়া বিপরীতে আমি উইন্ডোজ ব্যবহারের ক্ষেত্রে (আপনার উইন্ডোতে কেবল ক্লায়েন্ট রয়েছে) জোরালোভাবে নিরুৎসাহিত করব git config --global core.autocrlf false
। মিথ্যাতে সেট করা রেপোতে সিআরএলএফের সাথে ফাইলগুলি প্রতিশ্রুতিবদ্ধ। তবে আসলেই কোনও কারণ নেই। আপনি কখনই জানেন না যে আপনাকে লিনাক্স ব্যবহারকারীদের সাথে প্রকল্পটি ভাগ করে নেওয়া দরকার। এছাড়াও এটি প্রতিটি ক্লায়েন্টের জন্য একটি অতিরিক্ত পদক্ষেপ যা ডিফল্ট ব্যবহারের পরিবর্তে প্রকল্পে যোগ দেয়।
এখন ফাইলগুলির কয়েকটি বিশেষ ক্ষেত্রে (যেমন *.bat
*.sh
) আপনি সেগুলি এলএফ বা সিআরএলএফ দিয়ে চেক-আউট করতে চান আপনি ব্যবহার করতে পারেন.gitattributes
আমার জন্য সর্বোত্তম অনুশীলনটি যোগফলটি হ'ল:
- নিশ্চিত করুন যে প্রতিটি নন-বাইনারি ফাইল গিট রেপোতে (ডিফল্ট আচরণ) এলএফ-এর সাথে প্রতিশ্রুতিবদ্ধ।
- কোনও ফাইল সিআরএলএফ দ্বারা প্রতিশ্রুতিবদ্ধ না তা নিশ্চিত করার জন্য এই কমান্ডটি ব্যবহার করুন:
git grep -I --files-with-matches --perl-regexp '\r' HEAD
( দ্রষ্টব্য: উইন্ডোজ ক্লায়েন্টগুলিতে কেবল git-bash
লিনাক্স ক্লায়েন্টের মাধ্যমে কেবল --with-libpcre
ইন- সংকেত ব্যবহার করে সংকলিত থাকলে কাজ করে ./configure
))
- উপরের কমান্ডটি কার্যকর করে যদি আপনি এই জাতীয় কোনও ফাইল খুঁজে পান তবে সেগুলি সংশোধন করুন। এর সাথে জড়িত (অন্তত লিনাক্সে):
- সেট
core.autocrlf=input
( --- আপডেট 3 - )
- ফাইল পরিবর্তন করুন
- পরিবর্তনটি ফিরিয়ে দিন (ফাইলটি এখনও পরিবর্তিত হিসাবে দেখানো হয়েছে)
- এটা কমিট
- কেবল খালি সর্বনিম্ন ব্যবহার করুন
.gitattributes
- ব্যবহারকারীদের
core.autocrlf
উপরে বর্ণিতটিকে এর ডিফল্ট মানগুলিতে সেট করতে নির্দেশ দিন ।
- উপস্থিতিতে 100% গণনা করবেন না
.gitattributes
। আইডিইগুলির গিট-ক্লায়েন্টরা এটিকে উপেক্ষা করতে পারে বা তাদের সাথে আলাদাভাবে আচরণ করতে পারে।
যেমনটি বলা হয়েছে গিট বৈশিষ্ট্যে কিছু জিনিস যুক্ত করা যেতে পারে:
# Always checkout with LF
*.sh text eol=lf
# Always checkout with CRLF
*.bat text eol=crlf
আমি .gitattributes
বাইনারি ফাইলগুলির জন্য স্বতঃ-সনাক্তকরণ ব্যবহার না করে এর জন্য আরও কিছু নিরাপদ বিকল্প বলে মনে করি :
-text
(উদাহরণস্বরূপ *.zip
বা *.jpg
ফাইলগুলির জন্য: পাঠ্য হিসাবে বিবেচনা করা হবে না Thus সুতরাং কোনও লাইন-শেষ রূপান্তর চেষ্টা করা হবে না convers রূপান্তর প্রোগ্রামের মাধ্যমে পার্থক্য সম্ভব হতে পারে)
text !eol
(যেমন জন্য *.java
, *.html
।। টেক্সট হিসাবে গণ্য, কিন্তু eol শৈলী পছন্দ সেট না করা হয় তাই ক্লায়েন্ট সেটিং ব্যবহার করা হয়)
-text -diff -merge
(যেমন *.hugefile
: পাঠ্য হিসাবে বিবেচনা করা হয় না No কোনও পৃথক / মার্জ হওয়া সম্ভব)
--- পূর্ববর্তী আপডেট ---
এক বেদনাদায়ক উদাহরণ একটি ক্লায়েন্ট যে ফাইল ভুলভাবে কমিট হবে:
নেটবিনস ৮.২ (উইন্ডোজে), ভুলভাবে সিআরএলএফ সহ সমস্ত পাঠ্য ফাইল কমিট করবে , যদি না আপনি স্পষ্টভাবে core.autocrlf
বিশ্বব্যাপী হিসাবে সেট করেন । এটি স্ট্যান্ডার্ড গিট ক্লায়েন্ট আচরণের সাথে স্ববিরোধী এবং আপডেট / মার্জ করার সময় পরে প্রচুর সমস্যা সৃষ্টি করে। এই কিছু করে তোলে ফাইল বিভিন্ন প্রদর্শিত (যদিও তারা না) এমনকি যখন আপনি প্রত্যাবর্তন ।
নেটবিনে একই আচরণ হ'ল এমনকি আপনি যদি .gitattributes
আপনার প্রকল্পে সঠিক যোগ করে থাকেন ।
প্রতিশ্রুতি দেওয়ার পরে নিম্নলিখিত কমান্ডটি ব্যবহার করা, কমপক্ষে আপনার গিট রেপোতে লাইন শেষ হওয়ার সমস্যা রয়েছে কিনা তা সনাক্ত করতে আপনাকে কমপক্ষে সাহায্য করবে: git grep -I --files-with-matches --perl-regexp '\r' HEAD
.gitattributes
অবশেষে উপলব্ধি করার জন্য যে আমি এটির উপর নির্ভর করতে পারি না তার সর্বোত্তম সম্ভাব্য ব্যবহারটি সামনে আসতে ঘন্টা সময় ব্যয় করেছি।
দুর্ভাগ্যক্রমে, জেজিট-ভিত্তিক সম্পাদক যতক্ষণ না বিদ্যমান থাকে (যা .gitattributes
সঠিকভাবে পরিচালনা করতে পারে না ), নিরাপদ সমাধান হ'ল এলডিএফকে সর্বত্র এমনকি সম্পাদক-স্তরেও বাধ্য করা।
নিম্নলিখিত anti-CRLF
জীবাণুনাশক ব্যবহার করুন ।
.gitattributes
?