গিটের (ফাইলের সীমা) এবং সংখ্যা (আকার) কত?


175

ফাইলের সংখ্যা এবং ফাইলের আকারের গিট সীমা কি কি কেউ জানেন?


উইন্ডোজে, একটি বাগের কারণে সর্বাধিক ফাইলাইজ 4 জিবি (2020 সালের জুলাই পর্যন্ত): github.com/git-for-windows/git/issues/1063
কাপলিনেটর

উত্তর:


161

লিনাসের এই বার্তাটি আপনাকে আরও কিছু সীমাবদ্ধতায় সহায়তা করতে পারে

[...] সিভিএস, অর্থাত্‍ এটি শেষ হয় "এক সময় এক ফাইলের" মডেলটির প্রতি pretty

কোনটি আপনার পক্ষে এক মিলিয়ন ফাইল থাকতে পারে তা ঠিক আছে এবং তারপরে কেবল কয়েকটি কয়েকটি পরীক্ষা করে দেখুন - আপনি অন্য 999,995 ফাইলের প্রভাব দেখতে পাবেন না ।

গিট মৌলিকভাবে কখনই পুরো রেপোর চেয়ে কম দেখায় না। এমনকি আপনি কিছুটা সীমাবদ্ধ রেখেছেন (যেমন, কেবলমাত্র একটি অংশ দেখুন, বা ইতিহাসটি খানিকটা পিছনে ফিরে যেতে পারে), গিটটি সর্বদা পুরো জিনিসটির যত্ন নিয়ে এবং জ্ঞানকে ঘিরে রাখে ends

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

এবং হ্যাঁ, তাহলে "বড় ফাইল" সমস্যা আছে আমি সত্যিই জানি না বিশাল ফাইলগুলি সম্পর্কে কী করা উচিত। আমরা তাদের স্তন্যপান, আমি জানি।

আমার অন্যান্য উত্তরে আরও দেখুন : গিতের সীমাটি হ'ল প্রতিটি সংগ্রহস্থল অবশ্যই " ফাইলের সুসংগত সেট ", নিজের মধ্যে থাকা "সমস্ত সিস্টেম" (আপনি "একটি সংগ্রহস্থলের অংশ" ট্যাগ করতে পারবেন না) প্রতিনিধিত্ব করতে পারে।
যদি আপনার সিস্টেমটি স্বায়ত্তশাসিত (তবে আন্তঃনির্ভরশীল) অংশগুলি দিয়ে তৈরি হয় তবে আপনাকে অবশ্যই সাবমডিউলগুলি ব্যবহার করতে হবে ।

টালজোর জবাব দ্বারা চিত্রিত হিসাবে , সীমাটি সিস্টেম এক হতে পারে (ফাইলগুলির বৃহত সংখ্যক), তবে আপনি যদি গিটের প্রকৃতি বুঝতে পারেন (এর SHA-1 কী দ্বারা উপাত্ত সংহতি সম্পর্কে), আপনি সত্য "সীমা" উপলব্ধি করতে পারবেন একটি হল ব্যবহার অর্থাত, আপনি দোকান থেকে চেষ্টা করা উচিত নয়: এক সবকিছু একটি গীত সংগ্রহস্থলের মধ্যে, যদি না আপনি সবসময় পেতে বা ট্যাগ সবকিছু ফিরে প্রস্তুত করা হয়। কিছু বড় প্রকল্পের জন্য, এটি কোনও ধারণা রাখে না।


গিট সীমাগুলির আরও গভীরভাবে দেখার জন্য, " বড় ফাইলগুলির সাথে গিট " দেখুন
(যা গিট-এলএফএস উল্লেখ করে : গিট রেপোর বাইরে বড় ফাইলগুলি সংরক্ষণ করার সমাধান a গিটহাব, এপ্রিল 2015)

গিট রেপো সীমাবদ্ধ তিনটি বিষয়:

  • বিশাল ফাইল ( প্যাকফিলের জন্য এক্সডেল্টা কেবল স্মৃতিতে থাকে যা বড় ফাইলগুলির সাথে ভাল হয় না)
  • বিপুল সংখ্যক ফাইল , যার অর্থ, প্রতি ব্লাঙ্কের জন্য একটি ফাইল, এবং একবারে একটি প্যাকফিল তৈরি করতে ধীর গিট জিসি।
  • বিশাল packfiles , একটি packfile সূচক অদক্ষ (বড়) packfile থেকে তথ্য পুনরুদ্ধার করতে হয়।

আরও সাম্প্রতিক থ্রেড (ফেব্রুয়ারী ২০১৫) একটি গিট রেপোর জন্য সীমাবদ্ধ কারণগুলি চিত্রিত করে :

কেন্দ্রীয় সার্ভারের কয়েকটি যুগপত ক্লোনগুলি কি অন্যান্য ব্যবহারকারীদের জন্য অন্যান্য সমবর্তী ক্রিয়াকলাপকে ধীর করে দেবে?

ক্লোনিং করার সময় সার্ভারে কোনও লক নেই, সুতরাং তত্ত্বের ক্ষেত্রে ক্লোনিং অন্যান্য ক্রিয়াকলাপগুলিকে প্রভাবিত করে না। ক্লোনিং যদিও প্রচুর মেমোরি ব্যবহার করতে পারে (এবং যদি আপনি পুনঃব্যবহারযোগ্যতা বিটম্যাপ বৈশিষ্ট্যটি চালু না করেন তবে প্রচুর সিপিইউ) যা আপনার উচিত)

' git pull' ধীর হয়ে যাবে?

যদি আমরা সার্ভারের দিকটি বাদ দিই তবে আপনার গাছের আকারটি প্রধান কারণ , তবে আপনার 25 কে ফাইলগুলি সূক্ষ্ম হওয়া উচিত (লিনাক্সের 48k ফাইল রয়েছে)।

' git push'?

আপনার রেপুর ইতিহাস কত গভীর, বা আপনার গাছটি কত প্রশস্ত তার দ্বারা এটি প্রভাবিত হয় না, তাই দ্রুত হওয়া উচিত ..

আহ রেফ সংখ্যা উভয় git-pushএবং প্রভাবিত করতে পারে git-pull
আমি মনে করি স্টিফান এই অঞ্চলে আমার চেয়ে ভাল জানেন।

' git commit'? (এটি রেফারেন্সে ধীর হিসাবে তালিকাভুক্ত 3। ) ' git status'? (3 টি আবার রেফারেন্সে ধীর করুন যদিও আমি এটি দেখছি না))
(এছাড়াও git-add)

আবার, আপনার গাছের আকার। আপনার রেপুর আকারে, আমি আপনাকে এটি সম্পর্কে চিন্তা করার দরকার নেই বলে মনে করি।

কিছু ক্রিয়াকলাপ দিনব্যাপী মনে হচ্ছে না তবে যদি ওয়েব ফ্রন্ট-এন্ড থেকে গিটল্যাব / স্ট্যাশ / গিটহাব ইত্যাদির কাছে ঘন ঘন তাদের ডাকা হয় তবে তারা বাধা হয়ে উঠতে পারে। (উদাঃ ' git branch --contains' প্রচুর সংখ্যক শাখায় ভয়াবহভাবে বিরূপ প্রভাবিত বলে মনে হচ্ছে))

git-blame একটি ফাইল অনেক সংশোধন করা যখন ধীর হতে পারে।


4
@ Thr4wn: আরও দেখুন stackoverflow.com/questions/1979167/git-submodule-update/... GitPro submodule পৃষ্ঠাতে আরো জন্য। একটি সংক্ষিপ্ত সংস্করণ জন্য: stackoverflow.com/questions/2065559/...
VonC

1
গিট সাবমুলস ডকুমেন্টেশনের জন্য হালনাগাদ লিঙ্ক = git-scm.com/book/en/Git-
টুলস-

আমি সত্যিই অবাক হয়েছি যে অনেকগুলি স্ক্লাইট এবং লিনাক্সে উপলব্ধ অনেক ডাটাবেস বিকল্পের সাথে কেন তারা কেবল ডাটাবেসটি ব্যবহার করতে পারেনি যা ব্যাকআপ, প্রতিলিপি এবং স্কেল করা সহজ।
আকাশ কাভা

"গিট স্কেলগুলি সত্যই খারাপভাবে দেখা যায় যদি আপনি এটিকে সবকিছুকে এক বিশাল ভাণ্ডার হিসাবে দেখাতে বাধ্য করেন " এটি মনোরেপসের আকার পরিবর্তনযোগ্যতা সম্পর্কে কী বলে?
ইফেমার

@ পেফার যা বলে তা হ'ল ... এটি উদ্ধৃতিটি 10 ​​বছর আগের। তারপর থেকে, 2017, মাইক্রোসফট নিজস্ব monorepo আছে ( devblogs.microsoft.com/bharry/... : 300GB + +) এবং উন্নতি 2019 এখনও আসন্ন আছেন: stackoverflow.com/a/57129687/6309
VonC

36

কোন আসল সীমা নেই - 160-বিট নামের সাথে সমস্ত কিছুর নামকরণ করা হয়েছে। ফাইলের আকার অবশ্যই একটি bit৪ বিট সংখ্যায় উপস্থাপনযোগ্য হতে পারে যাতে সেখানে কোনও আসল সীমা থাকে না।

যদিও ব্যবহারিক সীমা রয়েছে। আমার কাছে একটি সংগ্রহস্থল রয়েছে যা 880 গিগাবাইট ডলার সহ> 880,000 ফাইল এবং গিট জিসি কিছুটা সময় নেয়। কার্যকারী গাছটি বরং বৃহত তাই সম্পূর্ণ কার্যক্ষম ডিরেক্টরিটি পরীক্ষা করে এমন ক্রিয়াকলাপগুলি বেশ কিছুক্ষণ সময় নেয়। এই রেপো কেবলমাত্র ডেটা স্টোরেজের জন্য ব্যবহৃত হয়, তবে এটি কেবল এটি পরিচালনা করে এমন স্বয়ংক্রিয় সরঞ্জামগুলির একটি গোছা। রেপো থেকে পরিবর্তনগুলি টানানো একই ডেটা রিসাইং করার চেয়ে অনেক দ্রুত।

%find . -type f | wc -l
791887
%time git add .
git add .  6.48s user 13.53s system 55% cpu 36.121 total
%time git status
# On branch master
nothing to commit (working directory clean)
git status  0.00s user 0.01s system 0% cpu 47.169 total
%du -sh .
29G     .
%cd .git
%du -sh .
7.9G    .

2
যদিও তাত্ত্বিক সীমাবদ্ধতাগুলি সম্পর্কে কথা বলার উপরে উপরে একটি "আরও সঠিক" উত্তর রয়েছে তবে এই উত্তরটি আমার পক্ষে আরও সহায়ক বলে মনে হচ্ছে কারণ এটি আপনার নিজের পরিস্থিতির সাথে নিজের তুলনা করতে দেয়। ধন্যবাদ।
বনানউইজন

1
খুব আকর্ষণীয়. ওয়ার্কিং কপিটি .gitডিরেক্টরি থেকে আরও বড় কীভাবে সম্ভব ? আমার নিষ্পাপ ধারণাটি হ'ল .gitএতে কার্যকারী ডিরেক্টরি এবং ইতিহাসের একটি অনুলিপি রয়েছে তাই এটি আরও বৃহত্তর হতে হবে। এই আকারগুলি কীভাবে সম্পর্কিত তা বোঝার জন্য কি কেউ আমাকে কোনও উত্সকে নির্দেশ করতে পারে?
bluenote10

1
@ bluenote10 .gitডিরেক্টরিতে থাকা সামগ্রীটি সংকুচিত হয়েছে। সুতরাং তুলনামূলকভাবে কম কমিটের একটি সংগ্রহস্থলের অসম্পূর্ণ কাজ ডিরেক্টরিের চেয়ে কম সংকুচিত ইতিহাসের সম্ভাবনা রয়েছে। আমার অভিজ্ঞতাটি দেখায় যে অনুশীলনে, সি ++ কোড সহ পুরো ইতিহাসটি সাধারণত ওয়ার্কিং ডিরেক্টরি হিসাবে একই আকারের হয়।
প্রিপিন

28

যদি আপনি খুব বড় ফাইলগুলি যুক্ত করেন (আমার ক্ষেত্রে জিবি, সাইগউইন, এক্সপি, 3 জিবি র‌্যাম), এটি আশা করুন।

মারাত্মক: মেমরির বাইরে, malloc ব্যর্থ

আরও বিশদ এখানে

আপডেট 3/2/11: উইন্ডোজ 7 x 64 এর কাছিম গিটের সাথে একই রকম দেখেছিল। প্রচুর স্মৃতি ব্যবহৃত হয়েছে, খুব ধীর গতির সিস্টেমের প্রতিক্রিয়া।


17

২০১২ সালের ফেব্রুয়ারিতে, জোশুয়া রেডস্টোন নামে একটি গিটার মেইলিং তালিকায় একটি খুব আকর্ষণীয় থ্রেড ছিল , একটি বিশাল পরীক্ষার ভাণ্ডারটিতে গিট পরীক্ষা করা ফেসবুক সফটওয়্যার ইঞ্জিনিয়ার:

পরীক্ষার রেপোতে 4 মিলিয়ন কমিট, রৈখিক ইতিহাস এবং প্রায় 1.3 মিলিয়ন ফাইল রয়েছে।

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


2
+1 আকর্ষণীয়। এটি বিশাল ফাইল / ফাইলের সংখ্যা / প্যাকফাইলেসের সীমাবদ্ধতার বিবরণ গিট সীমা সম্পর্কে আমার নিজের উত্তর প্রতিধ্বনিত করে ।
ভোনসি


2

এটি আপনার অর্থ কী তার উপর নির্ভর করে। ব্যবহারিক আকারের সীমা রয়েছে (যদি আপনার কাছে প্রচুর বড় ফাইল থাকে তবে এটি বিরক্তিকরভাবে ধীর হতে পারে)। আপনার যদি প্রচুর ফাইল থাকে তবে স্ক্যানগুলি ধীর হয়ে যেতে পারে।

যদিও মডেলের আসলে অন্তর্নিহিত সীমা নেই। আপনি অবশ্যই এটি খারাপ ব্যবহার করতে পারেন এবং খারাপ হতে পারেন।


1

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


1

আমার কাছে প্রচুর পরিমাণে ডেটা রয়েছে যা আমার রেপোতে পৃথক জেএসওএন খণ্ড হিসাবে সংরক্ষণ করা হয়। কয়েকটি ডিরেক্টরি অধীনে প্রায় 75,000 ফাইল রয়েছে এবং এটি কার্য সম্পাদনের জন্য ক্ষতিকারক নয়।

প্রথমবার এগুলি পরীক্ষা করা স্পষ্টতই কিছুটা ধীর ছিল।


1

আমি এটি একটি রেপোতে প্রচুর পরিমাণে ফাইল (350 কে +) সঞ্চয় করার চেষ্টা করেছি। হ্যাঁ, স্টোর। Laughs।

$ time git add . 
git add . 333.67s user 244.26s system 14% cpu 1:06:48.63 total

বিটবাকেট ডকুমেন্টেশন থেকে নিম্নলিখিত সূত্রগুলি বেশ আকর্ষণীয়।

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

... বিটবকেট গ্রাহকদের 94% গ্রাহকের 500MB এর নীচে থাকা সংগ্রহস্থল রয়েছে। লিনাক্স কার্নেল এবং অ্যান্ড্রয়েড উভয়ই 900MB এর নিচে।

এই পৃষ্ঠায় প্রস্তাবিত সমাধানটি হল আপনার প্রকল্পটিকে ছোট অংশগুলিতে ভাগ করা।


আমার ধারণা এটি বেশ পুরানো। এই মুহুর্তে, আপনি লিঙ্ক করছেন এমন সাইটে অ্যান্ড্রয়েড (না লিনাক্স) রেপো সম্পর্কে কিছুই নেই বলে মনে হচ্ছে। তবে আমি ভাবছি যদি এটি আবারও ভুল ছিল না? উদাহরণস্বরূপ এই উত্তরটি তুলনা করুন । তারা কি অন্য কিছু বোঝাতে পারে?
jjj

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