আমি কীভাবে আমার .git ফোল্ডারটি পরিষ্কার করতে পারি? আমার প্রকল্পের ডিরেক্টরিটি পরিষ্কার করেছেন তবে .git এখনও প্রচুর


86

.Git / বস্তু আমার পাগল প্রকল্প ডিরেক্টরির এখনও ব্যাপক হয়, ঘটনাক্রমে উত্পন্ন আবর্জনা মেগাবাইট শত শত মুছে ফেলার পরেও।

আমি git add -Aসূচি আপডেট করার এবং অস্তিত্বহীন ফাইলগুলি অপসারণ করার জন্য অন্যান্য কমান্ডের পাশাপাশি চেষ্টা করেছি । আমি একত্রিত করেছি, সম্ভবত ভুলভাবে, যে ডিরেক্টরিতে দুটি অক্ষরের নামযুক্ত ফাইলগুলি ব্লব হয়। আমি আগের কমিটগুলিতে ফিরে যাওয়ার চেষ্টা করেছি, তবে ভাগ্য নেই।

এই ডিরেক্টরিটি পরিষ্কার করতে আমি কী করতে পারি?

উত্তর:


139
  • আপনি যদি ফাইলগুলি যুক্ত করেন এবং সেগুলি সরিয়ে থাকেন তবে ব্লবগুলি এখনও বিদ্যমান তবে ঝুঁকছে। git fsckঅ্যাক্সেসযোগ্য ব্লবগুলি তালিকাভুক্ত করবে এবং git pruneসেগুলি মুছে ফেলবে।

  • আপনি যদি ফাইলগুলি যুক্ত করেন, সেগুলি প্রতিশ্রুতিবদ্ধ করেন এবং তারপরে আবার ঘূর্ণিত হন তবে git reset --hard HEAD^সেগুলি আরও গভীরভাবে আটকে যায়। git fsckকোনও ঝুঁকিপূর্ণ কমিট বা ব্লবকে তালিকাবদ্ধ করবে না, কারণ আপনার শাখার রিফ্লোগ তাদের উপর ধারণ করে। আপনার ইতিহাসে সঠিকভাবে কেবলমাত্র অবজেক্টই থাকবে তা নিশ্চিত করার জন্য এখানে একটি উপায় রয়েছে:

    git reflog expire --expire=now --all
    git repack -ad  # Remove dangling objects from packfiles
    git prune       # Remove dangling loose objects
    
  • আরেকটি উপায় হ'ল সংগ্রহস্থলটিকে ক্লোন করা, কারণ এটি কেবল অ্যাক্সেসযোগ্য অবজেক্টগুলিকে বহন করবে। তবে, যদি ঝোলা জিনিসগুলি প্যাক হয়ে যায় (এবং আপনি যদি অনেকগুলি ক্রিয়াকলাপ সম্পাদন করেন তবে গিটটি স্বয়ংক্রিয়ভাবে প্যাক হয়ে থাকতে পারে), তবে কোনও স্থানীয় ক্লোন পুরো প্যাকফাইলে বহন করবে:

    git clone foo bar                 # bad
    git clone --no-hardlinks foo bar  # also bad
    

    গিটকে একটি নতুন প্যাক গণনা করতে বাধ্য করতে আপনাকে অবশ্যই একটি প্রোটোকল নির্দিষ্ট করতে হবে:

    git clone file://foo bar  # good
    

হ্যাঁ, সমস্যাটি দেখার আগে আমি প্রতিশ্রুতিবদ্ধ হয়েছি। আমি শেষ কমান্ড ব্যতীত সমস্ত কিছু চেষ্টা করেছি। আমি যখন আমার প্রকল্প ডিরেক্টরিতে এটি চালনা করি "সতর্কতা: আপনি একটি খালি সংগ্রহস্থল ক্লোন করেছেন বলে মনে হয়" " আমি ডকুমেন্টেশন পড়ছি, তবে এটি ভারী জিনিস। আমি কীভাবে সঠিক উত্সটিতে ক্লোনটি নির্দেশ করতে পারি?
লাইট 24 বুলবস

4
@ ব্যবহারকারীর file://fooইউআরএল বর্তমান ডিরেক্টরিটির সাথে সম্পর্কিত এবং একটি file:///home/me/foo(তিনটি স্ল্যাশ) পরম।
জোশ লি

ধন্যবাদ! এটি অর্ধেক কাটা আকার, তবে আমার প্যাকটি এখনও বাকী সংগ্রহস্থলের চেয়ে দশগুণ বেশি। আমি ছাঁটাই করার চেষ্টা করেছি ..
লাইট 24 বুলবুল

4
@ ব্যবহারকারীর যদি প্রচুর কমিটের ভুল ফাইল থাকে তবে সেগুলি বেছে নিতে আপনি গিট-ফিল্টার-শাখা ব্যবহার করতে পারেন ।
জোশ লি

4
দুঃখিত, কোন প্রভাব নেই। আমার ডেভ সীসা বলে যে আকারটি এখন গ্রহণযোগ্য তবে প্রতিকূল সীমার মধ্যে। যদি আপনার হাতে সময় থাকে তবে আমাকে চামচ খাওয়ানোর জন্য এটি সর্বোত্তম হবে তবে আপনি আমাকে আমার পায়ে ফিরে পেয়েছেন। ধন্যবাদ জেলিদেভ
light24ulbs


15

বিশাল চিত্রের চেকিন বহুবার টানতে ব্যর্থ হওয়ার পরে স্পার্কলেসারে 13 গিগাবাইট tmp_pack_ ফাইল তৈরি করেছে আমার গিটটিতে। একমাত্র জিনিস যা সাহায্য করেছিল ...

rm -f .git/objects/*/tmp_*

'git gc' এই ফাইলগুলি সরিয়ে দেয়নি।


এটি একটি দুর্দান্ত উদ্দীপনা সমাধান তবে আমি এটি দেখায় না যে এটি কাজ করবে না। সুন্দর!
লাইট 24 বুলবস

4
মরিয়া পরিস্থিতিগুলি মরিয়া পদক্ষেপের প্রয়োজন, এটি একটি কবজির মতো কাজ করেছিল! Tks।
মদিনা

rm লিনাক্স কমান্ডের জন্য? উইন্ডোজ ব্যবহারকারীর কথা কি তবে @ ক্যাট?
gumuruh

7

( gc --aggressive --prune=tomorrow...) ছাঁটাই এবং পুনরায় পোস্ট করার পরে যদি আপনার কাছে এখনও একটি বড় রেপো থাকে তবে আপনি কেবল বিজোড়টিকে সন্ধান করতে পারেন:

git rev-list --objects --all |
    while read sha1 fname
    do 
        echo -e "$(git cat-file -s $sha1)\t$\t$fname"
    done | sort -n

এটি আপনাকে আরোহণের আকারের আকারের বাছাই করা তালিকা দেবে। আপনার রেপো থেকে অপরাধীকে অপসারণ করতে আপনি গিট-ফিল্টার-শাখা ব্যবহার করতে পারেন।

দিকনির্দেশের জন্য http://progit.org/book/ch9-7.html এ "অবজেক্টগুলি সরানো" দেখুন


@ ডেভিডজেমস ইঙ্গিতটির জন্য ধন্যবাদ। আমি এটিকে আরও পঠনযোগ্য করে
তুলেছি

এই ক্ষেত্রে যদি অন্য কেউ ট্রিপ করে থাকে: প্রথম বন্ধুর লেখায় একটি টাইপ রয়েছে: হওয়া উচিত --aggressive। সম্পাদনা করার চেষ্টা করা হয়েছিল, কিন্তু দেখা যাচ্ছে আপনি এত ছোট টাইপ সম্পাদনা করতে পারবেন না।
Hellobenallan

নোট জন্য @hellobenallan ধন্যবাদ, সংশোধন করা হয়েছে
sehe

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