বড় ফাইলের কারণে আমি ইতিমধ্যে মুছে ফেলার কারণে গিটহাবের দিকে ধাক্কা দিতে পারি না


272

বর্তমানে আমি আছে

  1. খালি গিটহাব রেপো
  2. এসএসএইচ সার্ভার রেপো (প্রধান)
  3. স্থানীয় রেপো

এসএসএইচ সার্ভার রেপো ছিল সর্বাধিক আপ টু ডেট রেপো (প্রোডাকশন সাইট) তাই আমি সেখান থেকে লোকালতে গিট ক্লোন করেছিলাম। আমি তখন git pushগিটহাবকে একটি করার চেষ্টা করেছি ।

সবকিছু ঠিকঠাক হয়ে গেছে তবে এরপরে গিটহাবের জন্য ফাইল নাম.gz খুব বড় হওয়া সম্পর্কে এটি কিছু বলেছিল। আমার এই ফাইলটির দরকার নেই তাই গিট ক্যাশে থেকে মুক্তি পাওয়ার জন্য আমি বেশ কয়েকটি গিট কমান্ড দৌড়েছিলাম তারপর এসএসএইচ সার্ভারে ফিরে এসেছি।

আমি স্থানীয়ভাবে বড় ফাইলটি দেখতে পাই না তবে এটি এখনও এসএসএইচ সার্ভারে রয়েছে যদিও git diffকিছু না ফেরায় এবং গিট পুশ রিটার্ন দেয় "সবকিছুই আপ টু ডেট" "- এবং আমি চেষ্টা করি যখন স্থানীয় রেপোতে ফাইলটি দৃশ্যমান না হলেও গিটিহাব আমি এখনও এটি সম্পর্কে ত্রুটি পেয়েছি

দূরবর্তী: ত্রুটি: ফাইল fpss.tar.gz 135.17 মেগাবাইট; এটি গিটিহাবের ফাইল আকারের সীমা 100 এমবি ছাড়িয়ে গেছে

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

যখন ফাইলটি স্থানীয় না থাকে বা গিটের স্থিতি / ডিফ / পাশতে তালিকাভুক্ত না হয় তখন ইথারে ফাইলটি কীভাবে থাকবে?


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

@ শাহবাজ আমি এই সাইটে তালিকাভুক্ত "সমস্যা সমাধানের" পদক্ষেপ অনুসরণ করেছি ... তা কি যথেষ্ট হওয়া উচিত ছিল না? help.github.com/articles/working-with-large-files
কেভিন ডব্লিউ।

গিটার সম্পর্কে আমার জ্ঞানের চেয়ে কমান্ডটি আরও উন্নত, তাই আমি সত্যিই বলতে পারি না। যাইহোক, যদি git log -- the_big_fileআপনাকে কিছু ফিরিয়ে আনা হয় তবে ফাইলটি এখনও ইতিহাসে রয়েছে।
শাহবাজ

@Shahbaz যে আয় Nothings> <
কেভিন ডব্লিউ

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

উত্তর:


446

তুমি ব্যবহার করতে পার

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD

এটি সেই ফাইলের ইতিহাসের সমস্ত কিছু মুছে ফেলবে। সমস্যাটি হ'ল ফাইলটি ইতিহাসে উপস্থিত রয়েছে।

এই কমান্ডটি আপনার কমিটের হ্যাশগুলি পরিবর্তন করে যা একটি আসল সমস্যা হতে পারে, বিশেষত ভাগ করা সংগ্রহস্থলগুলিতে। পরিণতি না বুঝে এটি সম্পাদন করা উচিত নয়।


23
আমার জন্য কাজ করেছে তবে আমাকে এটি 'জোর করে' করতে হয়েছিল: গিট ফিল্টার-শাখা - ইন্ডেক্স-ফিল্টার 'গিট আরএম -r - ক্যাচড --ignore-unmatch <file / dir>'
alexoviedo999

30
এই কমান্ডটি আপনার কমিটের হ্যাশগুলি পরিবর্তন করে যা একটি আসল সমস্যা হতে পারে, বিশেষত ভাগ করা সংগ্রহস্থলগুলিতে। পরিণতি না বুঝে এটি সম্পাদন করা উচিত নয়।
ক্রিস

6
আপনার সমস্যার কারণ হয়ে থাকা ফাইল বা দিরের নাম দিয়ে <ফাইল / ডির> প্রতিস্থাপন করার কথা রয়েছে?
ডেভিড রোডেন

12
মনে রাখবেন যে আপনি যদি এই পরিবর্তনগুলি সমস্ত শাখায় প্রয়োগ করতে চান তবে আপনার --allপরিবর্তে একটি পতাকা ব্যবহার করতে হবেHEAD
নিক স্প্রেইটিজার

9
আমি পাচ্ছি:Rewrite 657560fa18c030bcfac9132ce1c3541e84a5bc2c (1/10) (0 seconds passed, remaining 0 predicted) /usr/lib/git-core/git-filter-branch: 1: eval: Syntax error: end of file unexpected
জোও আব্রান্তেস

68

আমি স্কোয়াশিংয়ের চেয়ে বেশি দরকারী বলে মনে করি filter-branch। আমি নিম্নলিখিতগুলি করেছেন:

  1. স্থানীয়ভাবে বড় ফাইল মুছুন।
  2. স্থানীয় মুছে ফেলা প্রতিশ্রুতিবদ্ধ।
  3. নরম রিসেট করে ফিরে এক্স নম্বর (আমার জন্য এটি ছিল 3): git reset --soft HEAD~3
  4. তারপরে সমস্ত পরিবর্তন একসাথে পুনরায় স্বীকার করুন (একে একে স্কোয়াশ) git commit -m "New message for the combined commit"
  5. স্কোয়াশেড কমিটকে পুশ করুন।

বিশেষ কেস (ব্যবহারকারী @ লিটুও থেকে): উপরেরটি যদি কাজ না করে তবে আপনার এই ক্ষেত্রে থাকতে পারে। কমিট 1 বড় ফাইল অন্তর্ভুক্ত করে এবং বড় ফাইল ত্রুটির কারণে কমিট 1 এর পুশ ব্যর্থ হয়। কমিট 2 এর মাধ্যমে বড় ফাইলটি সরানো হয়েছেgit rm --cached [file_name]তবে কমিট 2 এর পুশটি এখনও ব্যর্থ হয়েছিল। আপনি উপরের একই ধাপগুলি অনুসরণ করতে পারেন তবে ব্যবহারের পরিবর্তেHEAD~3, ব্যবহার করুনHEAD~2


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

5
এটি শীর্ষ উত্তরের চেয়ে অনেক ভাল। শীর্ষ উত্তর উত্তর আপনার সম্পূর্ণ প্রতিশ্রুতিবদ্ধ ইতিহাস আপ।
manic.coder

আমার সমস্যাটি ঠিক করেনি
হীরক সরকার

3
এটি এখন পর্যন্ত কেবলমাত্র একমাত্র উত্তর যা সম্পূর্ণরূপে সংগ্রহস্থলকে ঝুঁকি না দিয়ে বড় বড় আপমুক্ত বা প্রতিশ্রুতিবদ্ধ ফাইলগুলি ঠিক করে দেয়! আপভোটেড যাতে এটি শীর্ষে যেতে পারে :-)
Æএলেক্স

1
@ তবে আমি একটি মোড়কের ক্লাস নই: আপনাকে অনেক ধন্যবাদ! এটি
মনোমুগ্ধকর

61

আপনি সাহায্যের জন্য জিজ্ঞাসা করার আগে আপনি ইতিমধ্যে আপনার রেপো নিয়ে ঘোরাঘুরি করছেন এমন কিছু আমি এখানে সুপার সহায়ক হিসাবে পেয়েছি। প্রথম প্রকার:

git status

এর পরে, আপনার লাইনের সাথে কিছু দেখতে হবে

On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

গুরুত্বপূর্ণ অংশটি হল "2 কমিট"! এখান থেকে, এগিয়ে যান এবং টাইপ করুন:

git reset HEAD~<HOWEVER MANY COMMITS YOU WERE BEHIND>

সুতরাং, উপরের উদাহরণের জন্য, একটি টাইপ করবে:

git reset HEAD~2

আপনি এটি টাইপ করার পরে আপনার "গিট স্ট্যাটাস" এ বলা উচিত:

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

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


11
বিজয়ী। সহজ, পরিষ্কার, কার্যকর, গিট বিল্ট সলিউশন। ভাল উত্তর উত্তর।
রিসি ড্যানিয়েলস

3
এটিই এখানে সেরা সমাধান।
ওরাহুল

40

যদি ফাইলটি আপনার সাম্প্রতিক কমিটের সাথে যুক্ত করা হয়েছিল , এবং আপনি দূরবর্তী সংগ্রহস্থলের দিকে ঠেলাঠেলি করেন না , আপনি ফাইলটি মুছে ফেলতে এবং কমিটটি সংশোধন করতে পারেন, এখান থেকে নেওয়া :

git rm --cached giant_file
    # Stage "giant_file" for removal with "git rm"
    # Leave it on disk with "--cached". if you want to remove it from disk
    # then ignore the "--cached" parameter
git commit --amend -CHEAD
    # Commit the current tree without the giant file using "git commit"
    # Amend the previous commit with your change "--amend" 
    # (simply making a new commit won't work, as you need
    # to remove the file from the unpushed history as well)
    # Use the log/authorship/timestamp of the last commit (the one we are
    # amending) with "-CHEAD", equivalent to --reuse-message=HEAD
git push
    # Push our rewritten, smaller commit with "git push"

1
যেহেতু ফাইল Git সূচক আর হয় না এই সমাধান কাজ করবে না (এটা যেমন ফলাফল untrackedএ ফাইল তালিকা git status
loretoparisi

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

4
- CHEAD এর অর্থ কী?
অ্যারিন

1
যদি আমি একটি নির্দিষ্ট প্রতিশ্রুতি থেকে এটি চেষ্টা করতে চান - খুব শেষ প্রতিশ্রুতি নয়? আমি চেষ্টা করেছি git rm --cached giant_file commit_idকিন্তু এটি কার্যকর হয়নি :(
পুইফাইস

@ ফুফাইস আমি আগের প্রতিশ্রুতিতে ফিরে যেতে চাইব, এই পদক্ষেপগুলি করব এবং তারপরে বর্তমানের সাথে একীভূত হব। আমি নিশ্চিত নই যে এটি সর্বোত্তম পন্থা, আমি গিট বিশেষজ্ঞ নই
ব্লু মুন93

13

আমার অনুরূপ সমস্যা ছিল এবং ফাইলটি সরাতে উপরের পদক্ষেপটি ব্যবহার করেছি । এটি পুরোপুরি কাজ করেছে।

আমি তখন দ্বিতীয় ফাইলটিতে একটি ত্রুটি পেয়েছিলাম যা আমার অপসারণ করতে হবে: remote: error: File <path/filename> is 109.99 MB; this exceeds GitHub's file size limit of 100.00 MB

আমি একই পদক্ষেপটি চেষ্টা করেছি, একটি ত্রুটি পেয়েছি: "A previous backup already exists in <path/filename>"

এই ওয়েবসাইটে গবেষণা থেকে আমি কমান্ডটি ব্যবহার করেছি:git filter-branch --force --index-filter "git rm --cached --ignore-unmatch <path/filename>" --prune-empty --tag-name-filter cat -- --all

দুর্দান্ত কাজ করেছে এবং বড় ফাইলগুলি সরানো হয়েছে।

অবিশ্বাস্যরূপে, ধাক্কাটি এখনও অন্য ত্রুটির সাথে ব্যর্থ হয়েছিল: error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 fatal: The remote end hung up unexpectedly

এটি আমি .git কনফিগারেশন ফাইলটি সরাসরি সংশোধন করে ঠিক করেছি - postBuffer = 999999999

এরপরে ধাক্কাটা কেটে গেল!


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

এটি আমার জন্যও কাজ করেছিল। আমি reset hardসাধারণ ধাক্কা দিয়ে পৃষ্ঠার নীচের ধাপটি এড়িয়ে চললাম। czettner.com/2015/07/16/…
মন্টি

এটি 'গিট পুশ

12

আমি বড় ফাইলটি মোছার পরেও কেন গিটহাব আমার রেপো প্রত্যাখ্যান করছে?

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

আমি কীভাবে গিটহাবকে আমার রেপো গ্রহণ করতে পারি?

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

আমি আমার গিট রেপো থেকে বড় ফাইলগুলি কীভাবে পরিষ্কার করব?

গিট ইতিহাসের বাইরে অযাচিত বড় ফাইলগুলি পরিষ্কার করার সেরা সরঞ্জামটি হ'ল বিএফজি রেপো-ক্লিনার - এটি git-filter-branchগিটারের ইতিহাস থেকে অযাচিত ফাইলগুলি সরিয়ে ফেলার জন্য বিশেষভাবে তৈরি করা একটি সহজ এবং দ্রুত বিকল্প ।

সাবধানতার সাথে ব্যবহারের নির্দেশাবলী অনুসরণ করুন , মূল অংশটি এটি:

$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git

১০০ এমবি আকারের যে কোনও ফাইল (যা আপনার সর্বশেষ প্রতিশ্রুতিতে নেই) আপনার গিট সংগ্রহস্থলের ইতিহাস থেকে সরানো হবে। তারপরে আপনি git gcমৃত ডেটা পরিষ্কার করতে ব্যবহার করতে পারেন :

$ git gc --prune=now --aggressive

বিএফজি চালানোর চেয়ে কমপক্ষে 10-50x দ্রুত git-filter-branchএবং সাধারণত ব্যবহার করা অনেক সহজ।

সম্পূর্ণ প্রকাশ: আমি বিএফজি রেপো-ক্লিনার এর লেখক।


1
আমার ক্ষেত্রে অতিরিক্ত জটিলতা ছিল যা স্কোয়াশ বন্ধ করে দেয়। বিএফজি সরঞ্জামটি দুর্দান্ত কাজ করেছে। ধন্যবাদ।
দানটোপা

এটি একটি অভূতপূর্ব সমাধান
সেক্সুয়ালপোটোটোস

4

আমি একই সমস্যা পেয়েছি এবং উত্তরগুলির কোনওটিই আমার পক্ষে কাজ করে না। আমি নিম্নলিখিত পদক্ষেপগুলি দ্বারা সমাধান করেছি:

1. কোন কমিট (গুলি) এর মধ্যে বড় ফাইল রয়েছে তা সন্ধান করুন

git log --all -- 'large_file`

নীচের অঙ্গীকারটি সবচেয়ে পুরানো ফলাফল তালিকার প্রতিশ্রুতি।

২. প্রাচীনতমের ঠিক আগে একটি সন্ধান করুন।

git log

ধরুন আপনি পেয়েছেন:

commit 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32

3. গিট রিবেস

git rebase -i 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32

টিপস :

  1. তালিকাবদ্ধ
  2. আমি কেবল কমিটের dropজন্য বেছে নিই যাতে বড় ফাইল থাকে।
  3. আপনি পুনর্বাসনের সময় সংঘাতগুলি পূরণ করতে পারেন সেগুলি ঠিক করতে এবং git rebase --continueএটি শেষ না করা অবধি ব্যবহার করতে পারেন।
  4. রিবেস করার সময় যদি কিছু ভুল হয়ে থাকে তবে git rebase --abortএটি বাতিল করুন।

4

আমি উপরের সমস্ত পদ্ধতি চেষ্টা করেছি তবে সেগুলির কোনওোটাই আমার পক্ষে কাজ করে না।

তারপরে আমি আমার নিজের সমাধান নিয়ে এসেছি।

  1. প্রথমত, আপনার একটি পরিষ্কার, আধুনিক প্রযুক্তির স্থানীয় রেপো দরকার। সমস্ত যৌনসঙ্গম বড় ফাইল মুছুন।

  2. এখন আপনার রেপো ফোল্ডারের একটি নতুন ফোল্ডার তৈরি করুন এবং এটিকে একটি নতুন গিট সংগ্রহস্থল হিসাবে তৈরি করতে "এখানে গিট তৈরি করুন সংগ্রহশালা" ব্যবহার করুন, আসুন একে নতুন_লোকাল_রেপো বলুন। এই হল! উপরের সমস্ত পদ্ধতিতে আপনাকে ইতিহাস পরিষ্কার করতে হবে ..., ভাল, আমি এতে অসুস্থ, আসুন একটি নতুন রেপো তৈরি করুন যার কোনও ইতিহাস নেই!

  3. নতুন, সুন্দর রেপোতে আপনার পুরানো, ফাক আপ স্থানীয় রেপো থেকে ফাইলগুলি অনুলিপি করুন। নোট করুন যে ফোল্ডার আইকনের সবুজ লোগো অদৃশ্য হয়ে যাবে, এটি আশাব্যঞ্জক কারণ এটি একটি নতুন রেপো!

  4. স্থানীয় শাখায় প্রতিশ্রুতিবদ্ধ এবং তারপরে রিমোট নতুন শাখায় চাপ দিন। আসুন একে নতুন_মোট_ ব্রাঞ্চ বলি। আপনি যদি নতুন স্থানীয় রেপো থেকে কীভাবে চাপতে না জানেন তবে এটি গুগল করুন।

  5. অভিনন্দন! আপনি আপনার পরিষ্কার, আপ-টু-ডেট কোডটি গিটহাবের দিকে ঠেলে দিয়েছেন। আপনার যদি আর রিমোট মাস্টার শাখাটির প্রয়োজন না হয় তবে আপনি নিজের নতুন_মোট_ব্র্যাঞ্চকে নতুন মাস্টার শাখা হিসাবে তৈরি করতে পারেন। আপনি কীভাবে এটি করতে না জানেন তা গুগল করুন।

  6. শেষ পদক্ষেপ, এখনই আপ পুরাতন স্থানীয় রেপো মোছার সময়। ভবিষ্যতে আপনি কেবল নতুন_লোকাল_রেপো ব্যবহার করেন।



1

বড় ফাইল / ফোল্ডারগুলি কার্যকারী ফোল্ডারের মধ্যে রাখার সমাধান

এখানে জিজ্ঞাসিত সমস্যাটি সমাধান করার জন্য এটি লাইনটি কাজ করেছে (উত্তর 1 থেকে):

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD

এই কমান্ডটি যদি ফাইল / ডিরটি কার্যকারী গাছের মধ্যে থাকে তবে ফাইল / ডিরটিও মুছুন।

আপনি যদি কাজের গাছের মধ্যে ফাইল / ফোল্ডারটি রাখতে চান তবে আমি নীচের পদক্ষেপগুলি গ্রহণ করার প্রস্তাব করছি।

  1. তার পরে ত্রুটি রান git reset HEAD^
  2. প্রশ্নে থাকা ফাইল / ফোল্ডারটিকে g g .gitignore``` ফাইলটিতে যুক্ত করুন।

  3. যথারীতি এগিয়ে যান git add .যা অন্য ফাইল / ফোল্ডারগুলি ক্যাপচার করতে পারে তবে অবশ্যই .gitignoreফাইল ক্যাপচার করতে পারে। পরবর্তী git commit -m"message"এবং শেষ অবধিgit push origin <branch_name>


0

এটি আমার জন্য কাজ করেছে। গিথব স্কোয়াশিং গিট কমিটস গিট রিসেট উত্স / মাস্টার থেকে ডকুমেন্টেশন

git checkout master && git pull;
git merge feature_branch;
git add . --all;
git commit -m "your commit message"

এখানে ডকুমেন্টেশন সন্ধান করুন


0

আমি প্রথম উত্তরে যুক্ত করছি।

গিট ফিল্টার-শাখা - ইন্ডেক্স-ফিল্টার 'গিট আরএম-আর - ক্যাচড --ignore-unmatch' হেড

উত্স / মাস্টার থেকে কিছু সংহত বিরোধ থাকবে।

আপনার শাখা এবং 'উত্স / মাস্টার' ডাইভার্জ হয়েছে এবং যথাক্রমে 114 এবং 109 টি আলাদা কমিট করেছে। (রিমোট শাখাটি আপনার মধ্যে মার্জ করার জন্য "গিট টান" ব্যবহার করুন)

দয়া করে এটি চালান

গিট রিসেট --হাড় উত্স / মাস্টার

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


0

সুতরাং আমি একটি বিশেষ পরিস্থিতির মুখোমুখি হয়েছি: আমি গীতলাব থেকে একটি সংগ্রহস্থল ক্লোন করেছি, যার মধ্যে 100 এমবি এর চেয়ে বড় ফাইল রয়েছে, তবে গিট ইতিহাসের কোনও এক সময় সরিয়ে ফেলা হয়েছে। তারপরে পরে যখন আমি একটি নতুন গিথুব প্রাইভেট রেপো যুক্ত করেছি এবং নতুন রেপোতে চাপ দেওয়ার চেষ্টা করেছি, তখন আমি কুখ্যাত 'ফাইলটি খুব বড়' ত্রুটি পেয়েছি। এই মুহুর্তে, আমার আর মূল গিটলব রেপোতে অ্যাক্সেস নেই। যাইহোক, আমি bfg-repo-cleanerআমার মেশিনে একটি স্থানীয় সংগ্রহস্থল ব্যবহার করে নতুন ব্যক্তিগত গিথুব রেপোতে চাপ দিতে সক্ষম হয়েছি:

$ cd ~
$ curl https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar > bfg.jar
$ cd my-project
$ git gc
$ cd ../
$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-project
$ cd my-project
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
$ git remote -v # confirm origin is the remote you want to push to
$ git push origin master

0

কখনও কখনও ফাইলটি ট্র্যাকিংয়ের ইতিহাসে রাখা হয়, নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করে দেখুন:

  1. git commit, আপনি যদি তালিকাভুক্ত বড় ফাইলের সাথে তৈরি মোডটি দেখছেন , তবে করুন:
  2. git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch filename' HEAD। আপনার কনসোলটিতে পুনরায় লেখকের একগুচ্ছ দেখতে পাওয়া উচিত যা এর সাথে শেষ হয়:

    আরএম 'ফাইলের নাম' এবং

    শেষ লাইন রেফটি আবার লেখা হয়েছিল।

হয়ে গেছে।

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