গিট কি স্বয়ংক্রিয়ভাবে স্পেস এবং ট্যাবগুলির মধ্যে স্যুইচ করতে পারে?


196

আমি আমার অজগর প্রোগ্রামগুলিতে ইন্ডেন্টেশনের জন্য ট্যাব ব্যবহার করি, তবে আমি তার পরিবর্তে স্পেস ব্যবহার করে এমন লোকদের সাথে (গিট ব্যবহার করে) সহযোগিতা করতে চাই।

গিটের জন্য ঠেলাঠেলি / আনার ক্ষেত্রে ফাঁকা স্থান এবং ট্যাবগুলির মধ্যে স্বয়ংক্রিয়ভাবে রূপান্তর করার কোনও উপায় আছে (বলুন, 4 স্পেস = 1 ট্যাব)? (সিআর / এলএফ রূপান্তর মত)


33
পিইপি 8 হ'ল আমার সমস্যা। প্রত্যেকে এটি অনুসরণ করে এবং আমি আমার ট্যাবগুলিতে আটকে আছি। আমার মনে হয় যে এক ইন্ডেন্টেশন = একটি ট্যাব হ'ল সঠিক জিনিস (ফাঁকা জায়গা কেন? 4 স্পেস কেন? পিইপি 8 তা ব্যাখ্যা করে না ...)। যাইহোক, এই গিট কৌশলটি সহ, আমি আনন্দের সাথে আমার কম্পিউটারে ট্যাবগুলি ব্যবহার করতে পারি এবং সেখানে সমস্ত পিইপি 8 অনুগামীদের সাথে আমার কোডটি ভাগ করে নিতে পারি।
অলিভিয়ার ভারদিয়ার

7
উহু! আমি টেক্সটমেট ব্যবহার করি এবং আমি স্পেসগুলির মধ্যে ট্যাবগুলিতে রূপান্তর করতে পারি। বিষয়টি হ'ল আমি যখন ট্যাবটি হিট করি তখন আমার সম্পাদকটি ... ট্যাব লিখতে পছন্দ করেন। সুতরাং আমি যদি ফাঁকাগুলি সহ একটি অজগর প্রকল্পটি চেকআউট করি তবে আমি সমস্ত ধরণের ট্যাব .োকাব। আমার অবশ্যই ম্যানুয়ালি ট্যাবগুলিতে রূপান্তর করতে হবে, তবে আমি যখন চেক ইন করি, তখন এটি 1000 মুছে ফেলা, 1000 সংযোজন এবং আমার সহযোগীরা খুশি হবে না। :-)
অলিভিয়ার ভারদিয়ার

6
পিইপি 8 ট্যাবগুলির পরিবর্তে স্পেস নির্দিষ্ট করে কারণ ক্রমাগত ইন্ডেন্টেশন নিয়ম। প্যারেন্টেথিকালের অভ্যন্তরে একটি দীর্ঘ-দীর্ঘ রেখা চালিয়ে যাওয়ার দুটি উপায় রয়েছে। যদি আপনি কোনও প্রথমসূত্রের অবিলম্বে কোনও নতুন লাইন শুরু করেন তবে আপনি কেবল একটি যুক্ত করুন। আপনি যদি পরিবর্তে প্রথম লাইনে প্রথম বন্ধনে অংশের বিষয়বস্তুর কিছু অংশ রেখে থাকেন তবে আপনাকে পরবর্তী পংক্তিতে খোলার প্যারেন্টিথিকালের ইন্ডেন্টেশন স্তরে প্যারেন্টিথিকালটি চালিয়ে যেতে হবে। আপনি যদি এমন ট্যাব ব্যবহার করেন যা কাজ করে না।
জন ক্রিস্টোফার জোন্স

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

উত্তর:


194

এখানে সম্পূর্ণ সমাধান:

আপনার সংগ্রহস্থলে একটি ফাইল যুক্ত করুন .git/info/attributesযা এতে রয়েছে:

*.py  filter=tabspace

লিনাক্স / ইউনিক্স

এখন কমান্ডগুলি চালান:

git config --global filter.tabspace.smudge 'unexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'expand --tabs=4 --initial'

ওএস এক্স

প্রথমে ব্রিউ দিয়ে কোর্টিলগুলি ইনস্টল করুন:

brew install coreutils

এখন কমান্ডগুলি চালান:

git config --global filter.tabspace.smudge 'gunexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'gexpand --tabs=4 --initial'

সমস্ত সিস্টেম

আপনি এখন আপনার প্রকল্পের সমস্ত ফাইল পরীক্ষা করে দেখতে পারেন। আপনি এটি দিয়ে এটি করতে পারেন:

git checkout HEAD -- **

এবং সমস্ত পাইথন ফাইলের এখন ফাঁকা জায়গাগুলির পরিবর্তে ট্যাব থাকবে।

সম্পাদনা করুন : জোর করে চেকআউট কমান্ডটি পরিবর্তন করা হয়েছে। অবশ্যই আপনার কাজটি অবশ্যই প্রথমে করা উচিত।


1
পরিষ্কার ফিল্টারটি আমার পক্ষে কাজ করছে না। আমি যখন গিট অ্যাড করি আমি "ত্রুটি: বাহ্যিক ফিল্টার প্রসারিত --tabs = 4 --initial ব্যর্থ হয়েছে" বলে ত্রুটি পেয়েছি। আমি উইন্ডোজ এ আছি এটা কি কোন পার্থক্য তৈরি করবে?
জেরেমি হিক্স

2
@ জেরেমি: প্রসারিত / আনস্প্যান্ডফ্যান্ড হ'ল ইউনিক্স কমান্ড। আপনাকে হয় উইন্ডোজ পোর্ট / সমতুল্য সন্ধান করতে হবে বা সাইগউইনের
টিম

1
আমি পেয়েছি
বেস্ট

3
@ মার্ক-অ্যান্ড্রে ভাল পয়েন্ট। আমি আসলে কোর্টিলস সংস্করণ ব্যবহার করি। (ইনস্টল করুন homebrewএবং তারপরে চালান brew install coreutils)।
অলিভিয়ার ভারদিয়ার

2
দেখে মনে হচ্ছে এটি আর কাজ করে না, ফিল্টারগুলি আমার জন্য কিছুই করে না। চেকআউটের পরে, ফাইলগুলির এখনও ফাঁকা জায়গা রয়েছে। এ সম্পর্কে কোন আপডেট?
ফিলিপ লুডভিগ

141

হ্যাঁ, একটি সম্ভাব্য সমাধান হ'ল গিট অ্যাট্রিবিউট ফিল্টার ড্রাইভার ( গিটপ্রো বইটিও দেখুন ), একটি ধুয়ে / পরিষ্কার ব্যবস্থা নির্ধারণ করার জন্য।

বিকল্প পাঠ

ঐ দিকে:

  • প্রতিবার যখন আপনি আপনার রেপোর কয়েকটি ফাইল চেক আউট করবেন তখন স্পেসগুলি ট্যাবগুলিতে রূপান্তরিত হতে পারে,
  • তবে যখন আপনি চেক ইন করেন (এবং পুশ এবং প্রকাশ করুন), সেই একই ফাইলগুলি কেবলমাত্র স্পেস ব্যবহার করে সঞ্চিত থাকে।

আপনি এই ফিল্টার ড্রাইভারকে (এখানে নামকরণ করা হয়েছে ' tabspace') এর মধ্যে .git/info/attributes(গিট রেপোর অভ্যন্তরে সমস্ত ফাইলের জন্য প্রয়োগ করা ফিল্টারটির জন্য ) ঘোষণা করতে পারেন :

*.py  filter=tabspace

এখন কমান্ডগুলি চালান:

# local config for the current repo
git config filter.tabspace.smudge 'script_to_make_tabs'
git config filter.tabspace.clean 'script_to_make_spaces'

দেখুন অলিভিয়ের এর উত্তর এই ধরনের একটি ছাপ / নির্দেশাবলীর পরিষ্কার সেটের একটি কংক্রিট কাজ উদাহরণস্বরূপ।


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

@ অলিভার: অদ্ভুত, আমি যতক্ষণ না চেকআউট / চেক-আস্তে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে না নেওয়ার জন্য যতক্ষণ না আমি সাবধানতার সাথে অ্যাট্রিবিউট ফিল্টারের পরিধি (একটি নির্দিষ্ট সাবট্রিতে কেবলমাত্র একটি নির্দিষ্ট ধরণের ফাইলের জন্য) সীমাবদ্ধ রাখি ততক্ষণ আমার কোনও সমস্যা হয়নি range প্রক্রিয়াধীন. উদাহরণস্বরূপ দেখুন stackoverflow.com/questions/62264/...
VonC

ধন্যবাদ! এখন এটা কাজ করছে. সম্পূর্ণ সমাধানটি দেখুন: স্ট্যাকওভারফ্লো.com
অলিভিয়ার ভার্দিয়ার

@ ভনক: সম্ভবত --globalপতাকাটি সরিয়ে নেওয়া উচিত , যেহেতু এটি বোঝানো হবে, আপনি প্রতিটি সহযোগী প্রকল্পে স্পেস পাঠিয়ে দিন ...
উইলিম ভ্যান ওনসেম

@ কমুসফট কেবলমাত্র সেই প্রকল্পগুলিতেই অধিকার রয়েছে যাগুলিতে .gitattributes। তবে হ্যাঁ, কনফিগারেশনটি স্থানীয় রেপোতে রাখা হয়েছে কিনা তা বোঝা সহজ। আমি উত্তর সম্পাদনা করেছি।
ভোনসি

39

গিটহাব (বা অন্যান্য অনুরূপ পরিষেবা) ব্যবহার করে প্রত্যেকের জন্য খুব দরকারী তথ্য

~/.gitconfig

[filter "tabspace"]
    smudge = unexpand --tabs=4 --first-only
    clean = expand --tabs=4 --initial
[filter "tabspace2"]
    smudge = unexpand --tabs=2 --first-only
    clean = expand --tabs=2 --initial

তারপরে আমার কাছে দুটি ফাইল রয়েছে: attributes

*.js  filter=tabspace
*.html  filter=tabspace
*.css  filter=tabspace
*.json  filter=tabspace

এবং attributes2

*.js  filter=tabspace2
*.html  filter=tabspace2
*.css  filter=tabspace2
*.json  filter=tabspace2

ব্যক্তিগত প্রকল্পে কাজ করা

mkdir project
cd project
git init
cp ~/path/to/attributes .git/info/

এইভাবে, আপনি অবশেষে গিথুবটিতে আপনার কাজটি চাপ দিলে কোড ব্রাউজটিতে এটি নির্বোধ দেখাবে না 8 space tabsযা সমস্ত ব্রাউজারে ডিফল্ট আচরণ।

অন্যান্য প্রকল্পে অবদান

mkdir project
cd project
git init
cp ~/path/to/attributes2 .git/info/attributes
git remote add origin git@github.com:some/repo.git
git pull origin branch

এইভাবে আপনি 2 space indentedপ্রকল্পগুলিতে সাধারণ ট্যাবগুলির সাথে কাজ করতে পারেন ।

আপনি 4 space to 2 spaceযদি আমার দ্বারা প্রকাশিত প্রকল্পগুলিতে অবদান রাখতে চান এবং আপনি বিকাশের সময় 2 স্পেস ব্যবহার করার প্রবণতা পোষণ করেন তবে অবশ্যই রূপান্তরকরণের জন্য আপনি অনুরূপ সমাধান লিখতে পারেন ।


2
সম্পর্কিত: সংগ্রহস্থলের অংশ হিসাবে গিট কনফিগারেশন সংরক্ষণ করা ; এছাড়াও খেয়াল করুন যে আপনি নিজের .gitattributes
রেপোতে

1

আপনি যদি উইন্ডোতে থাকেন তবে @ অলিভিয়ার ভার্ডিয়ারের কাজ করার সমাধান পেতে আপনার কাছে কয়েকটি অতিরিক্ত পদক্ষেপ রয়েছে ।

  1. উইন্ডোজ জন্য CoreUtils ডাউনলোড করুন
  2. ইনস্টল করার পরে আপনার পাঠাতে ইনস্টলের অবস্থানটি রাখুন ( একটি পাথের পরিবর্তনশীল কীভাবে যুক্ত করবেন )
  3. ইতোমধ্যে একটি উইন্ডো প্রসারিত ইউটিলিটি থাকায় আমি প্রসারণ.এক্সইটির নামকরণ করে জিপস্প্যান্ড.এক্সে রাখলাম।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.