স্থানীয় ফাইল সিস্টেম থেকে মুছে ফেলা ছাড়াই একটি গিট সংগ্রহস্থল থেকে একটি ফাইল সরান


3041

আমার প্রাথমিক প্রতিশ্রুতিতে কিছু লগ ফাইল রয়েছে। আমি *logআমার সাথে যুক্ত করেছি .gitignoreএবং এখন আমি আমার সংগ্রহশালা থেকে লগ ফাইলগুলি সরাতে চাই।

git rm mylogfile.log

সংগ্রহস্থল থেকে একটি ফাইল সরিয়ে ফেলবে, তবে স্থানীয় ফাইল সিস্টেম থেকে এটি সরিয়ে ফেলবে।

আমি কীভাবে এই ফাইলটির আমার স্থানীয় অনুলিপি মুছে না ফেলে রেপো থেকে এই ফাইলটি সরিয়ে ফেলতে পারি?



14
এটি লক্ষ্য করার মতো বিষয় যে সর্বাধিক উত্সাহিত উত্তর কারও পক্ষে বিপজ্জনক। আপনি যদি নিজের স্থানীয়কে ধাক্কা দেওয়ার চেয়ে কোনও রিমোট রেপো ব্যবহার করেন তবে আপনি গিট থেকে সরানো ফাইলগুলি অন্যত্র টানুন কেবলমাত্র মুছে ফেলা হবে । উত্তরের একটিতে এটি উল্লেখ করা হলেও তাতে কোনও মন্তব্য করা হয়নি।
রিচিএইচএইচ

উত্তর:


4346

থেকে মানুষ ফাইল :

যখন --cachedদেওয়া হয়, তখন স্টেজযুক্ত সামগ্রীটি শাখার ডগায় বা ডিস্কে থাকা ফাইলটির সাথে মেলে, কেবল ফাইলটিকে কেবল সূচি থেকে সরিয়ে ফেলা যায়।

সুতরাং, একটি একক ফাইলের জন্য:

git rm --cached mylogfile.log

এবং একটি একক ডিরেক্টরি জন্য:

git rm --cached -r mydirectory

150
সহজেই মিস হয়েছে কারণ এটি নিজের মতো করে ব্যাখ্যাযোগ্য নয় svn rm --keep-local
মার্টিন

114
তবে আমি কীভাবে ফাইলগুলি রিমোট সার্ভারে সংরক্ষণ করব? এটি আমার স্থানীয় রাখে, তবে আমি অন্য সার্ভার থেকে চাপ এবং টান দিলে ফাইলটি মুছে ফেলা হবে। আমি ফাইলটির জন্য একটি .gitignore যোগ করেছি, কিন্তু এটি এখনও সরিয়ে ফেলা হয়েছে
spankmaster79

6
এটি এরপরেও git pullযদি ফাইলগুলি প্রতিশ্রুতিবদ্ধ থাকেন তবে ফাইলগুলি সরিয়ে দেয়git rm
পেট্র পেলার

9
উল্লেখযোগ্য যে, উত্তরে কমান্ডটি চালানোর পরে, আপনাকে ব্যবহার করা দরকার git commit -m "Commit message"এবং git push। আপনার যদি অন্য কোনও পর্যায়ক্রমে পরিবর্তন হয় (পরীক্ষা করে দেখুন git status) তবে সেগুলিও এই সময়ে প্রতিশ্রুতিবদ্ধ হবে।
সিঞ্জাই

9
যেহেতু এটি সর্বাধিক গৃহীত উত্তর এবং তা না করে, কী জন্য জিজ্ঞাসা করা হয়েছে, আমি কী করব তা বলব। আমি কমান্ডটি ব্যবহার করি git rm --cached mylogfile.logএবং সংগ্রহস্থল থেকে ফাইলটি মুছি। উত্পাদনশীল সিস্টেমে ফাইলটি হারাতে এড়াতে আমি ফাইলটির একটি ব্যাকআপ করি এবং এটির পরে টান। ফাইলটি উল্লিখিত হিসাবে মুছে ফেলা হবে এবং আপনার ব্যাকআপ থেকে ফিরে অনুলিপি করা দরকার। এটি বেশ ব্যথা, তবে আমি এই সমস্যার আর কোনও সমাধান খুঁজে পাইনি।
মার্সেল গ্রোলস

275

রেপো থেকে পুরো ফোল্ডারটি সরিয়ে ফেলতে (পুনঃভাগের ফাইলগুলির মতো) এটি করুন:

git rm -r --cached folderName

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


13
ভবিষ্যতের দর্শকদের জন্য কেবল একটি যুক্ত নোট: কমিটিকে "সিঙ্ক" করার জন্য কোনও জিইউআই ব্যবহার করবেন না রেপোতে ফিরে। এটি আপনার স্থানীয় রেপোগুলিতে ফাইলগুলি নীচে টেনে আনবে। Git Push repo branchরিমোট থেকে ফাইলগুলি সরাতে আপনাকে কিছু করতে হবে ।
রাবারডাক

211

আপনি স্থানীয় ফাইল সিস্টেম থেকে মুছে না ফেলে আপনার .gitignore এর উপর ভিত্তি করে সংগ্রহস্থল থেকে ফাইলগুলি সরাতে পারেন:

git rm --cached `git ls-files -i -X .gitignore`

অথবা, বিকল্পভাবে উইন্ডোজ পাওয়ারশেলে:

git rm --cached $(git ls-files -i -X .gitignore)

7
উইন্ডোজ কাজ করে না। git ls-ফাইল -i -X ​​.gitignore কাজ করে, তবে কীভাবে ফাইলগুলি 'git rm' এ পাঠাতে হয় তা আমি জানি না। আপনি কীভাবে তা জানেন?
এরিক জেড

17
উইন্ডোজে কাজ করে যদি আপনি সিএমডি-কনসোলের পরিবর্তে গিট বাশ ব্যবহার করেন
Andreas Zita

17
এটা খুবই পছন্দ করি. আমার কাছে এমন কিছু ফাইল ছিল যা ব্যতীত কাজ করেছিল যা ফাইলনামে ফাঁকা রয়েছে। আমি এই জন্য এখানে সমাধান সংশোধিত: git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"। দয়া করে উত্তরের জন্য এই সমাধানটি সংশোধন বা যুক্ত করার বিষয়ে বিবেচনা করুন, কারণ এটি থাকা একটি দুর্দান্ত সরঞ্জাম ...
ম্যাপেটিস

আমি চেষ্টা করি নি তবে এটি পরীক্ষা করা উচিত এটি কি এমন ফাইলগুলিকে সরিয়ে ফেলবে .gitkeepযা কোনও সংগ্রহস্থলের মধ্যে একটি খালি ফোল্ডার সংরক্ষণ করে। যেমন। .gitignoreফোল্ডার ধারণ করে uploadsএবং রেপো ট্র্যাক রাখতে বাধ্য হয় .gitkeep। এর অধীনে রেপো থেকে সমস্ত সরিয়ে ফেললে uploadsতাও মুছে যাবে .gitkeep
ভ্লাদিমির ভুকানাক

এই পরামর্শটি পাওয়ারশেলে পুরোপুরি কাজ করেছে: গিট আরএম - ক্যাচড $ (গিট এলএস-ফাইল -i -X ​​.gitignore)
গিকানডগ্লিটার

89

আমার উত্তর অনুসারে এখানে: /programming/6313126/how-to-remove-a-directory-in-my-github-repository

ফোল্ডার / ডিরেক্টরি বা ফাইল কেবল গিট সংগ্রহস্থল থেকে সরানোর জন্য এবং স্থানীয় থেকে নয় 3 সহজ পদক্ষেপ চেষ্টা করুন try


ডিরেক্টরি সরানোর পদক্ষেপ

git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master

পরবর্তী কমিটগুলিতে সেই ফোল্ডারটিকে উপেক্ষা করার পদক্ষেপ

পরের কমিটস থেকে সেই ফোল্ডারটিকে উপেক্ষা করার জন্য .gitignore নামের মূলটিতে একটি ফাইল তৈরি করুন এবং এতে ফোল্ডারগুলির নাম দিন। আপনি চান হিসাবে অনেক রাখতে পারেন

.gitignore ফাইলটি এর মতো দেখতে হবে

/FolderName

ডিরেক্টরি সরান


@ গৌরব এতে খুশী হয়েছে!
ইয়ারনাইওস

69

এছাড়াও, যদি আপনি সংবেদনশীল ডেটা (যেমন পাসওয়ার্ড সম্বলিত একটি ফাইল) কমিট করে থাকেন তবে আপনার এটি সংগ্রহস্থলের ইতিহাস থেকে সম্পূর্ণ মুছে ফেলা উচিত। এটি কীভাবে করবেন তা ব্যাখ্যা করার জন্য এখানে একটি গাইড রয়েছে: http://help.github.com/remove-sensitive-data/


13
এই উত্তরে অন্য ওয়েবসাইটে লিঙ্ক না করে এই কাজটি সম্পন্ন করার জন্য প্রয়োজনীয় আদেশগুলি অন্তর্ভুক্ত করা উচিত।
ফ্লোরিয়ান লেমাইট্রে

1
আমি আরও নোট করব যে আমি গিট বিএফজি রেপো ক্লিনার সরঞ্জামটি আরও সহজ এবং দ্রুত ব্যবহার করেছি।
14:58

64

আরও সাধারণ সমাধান:

  1. .gitignoreফাইল সম্পাদনা করুন।

    ECHO mylogfile.log >> .gitignore

  2. সূচি থেকে সমস্ত আইটেম সরান।

    git rm -r -f --cached .

  3. পুনর্নির্মাণ সূচক।

    git add .

  4. নতুন প্রতিশ্রুতিবদ্ধ করুন

    git commit -m "Removed mylogfile.log"


2
এটি কি আসলে ফাইলটি মুছবে?
মিস্টার_আর_ম্রি_ডিজ

6
গিটহাব থেকে? কোন। আপনি যদি ইতিমধ্যে গিথুবকে ঠেলে দেন তবে এটি এটি সাইট থেকে সরিয়ে ফেলবে না। তবে এটি আপনার স্থানীয় গিট সংগ্রহস্থল আপডেট করবে।
mAsT3RpEE

5
আপনি যে মন্তব্যটি মুছেছিলেন তা আসলে আরও মুছে ফেলা হয়েছে :) সমাধানের সাথে সমস্যাটি rm --cashedহ'ল শেষ পর্যন্ত ফাইলটি মুছে ফেলা হবে - ডান? লোকেরা " স্থানীয় ফাইল সিস্টেম থেকে মুছে না ফেলে একটি সংগ্রহস্থল থেকে একটি ফাইল সরান" বলে যখন এটি চায় তা নয় । এখন উপরোক্ত সমাধানটি কেন আমার বাইরে চলে গেল - সম্ভবত ওপি একা কাজ করছিল এবং কখনই টানেনি? জানিনা। আমি
গিথুবকে

আপনি গিথুবকে না জিজ্ঞাসা করে 100% সমাধান আছে বলে আমি মনে করি না। আপাতত এটিকে আঁকড়ে থাকো। ফাইলটি অনুলিপি করুন, গিটিগনরে যুক্ত করুন, আসল গিট আরএম-আর করুন, প্রতিশ্রুতি দিন, পুশ করুন, ফাইল পুনরুদ্ধার করুন। আপনি কি অন্য সমাধান খুঁজে পেতে পরিচালিত?
mAsT3RpEE

9
আমার সমস্যা গিথুব নয় - সহকর্মীরা যখন টানবেন তখন ফাইলটি আসলে মুছে ফেলা হবে । আমি না ফাইল মুছে যাবে চাই। এটি অতীতে আমার জন্য বিশাল সমস্যা সৃষ্টি করেছে। তাই আমি ভাবছিলাম যদি সত্যিই একটি সমাধান সত্যিই নেই ফাইল মুছে দিন। আরও দেখুন: মন্তব্য সরাইখানা গৃহীত উত্তর stackoverflow.com/questions/1143796/...
Mr_and_Mrs_D

23

গিট আপনাকে সেই ফাইলগুলি অপরিবর্তিত রয়েছে ধরে নিয়ে তা উপেক্ষা করতে দেয়। এটি git update-index --assume-unchanged path/to/file.txtকমান্ড চালিয়ে করা হয় । একবার কোনও ফাইলকে চিহ্নিত করার পরে, গিট সেই ফাইলের কোনও পরিবর্তনকে সম্পূর্ণ উপেক্ষা করবে; গিট স্ট্যাটাস বা গিটের পার্থক্য চালানোর সময় তারা প্রদর্শিত হবে না এবং তারা কখনও প্রতিশ্রুতিবদ্ধ হবে না।

( Https://help.github.com/articles/ignoring-files থেকে )

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

দ্রষ্টব্য: এটি সরাসরি প্রশ্নের উত্তর দিচ্ছে না, তবে অন্যান্য উত্তরের মন্তব্যে অনুসরণ করা প্রশ্নগুলির উপর ভিত্তি করে।


2
এইচএম, আমি এটি করি তবে আমি দেখতে পাচ্ছি যে রেপোতে অন্য কেউ যদি এর মধ্যে পরিবর্তন করে তবে ফাইলটি ওভাররাইট করা যাবে।
AlxVallejo

16

আপনি যদি কেবল একটি ফাইল আনআর্যাক করতে চান এবং স্থানীয় এবং দূরবর্তী রেপো থেকে মুছতে না চান তবে এই কমান্ডটি ব্যবহার করুন:

git update-index --assume-unchanged  file_name_with_path

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

8

উপরের উত্তরগুলি আমার পক্ষে কার্যকর হয়নি। আমি filter-branchসমস্ত প্রতিশ্রুতিবদ্ধ ফাইলগুলি সরিয়ে ফেলতাম।

গিট সংগ্রহস্থল থেকে একটি ফাইল সরিয়ে নিন:

git filter-branch --tree-filter 'rm  file'

গিট সংগ্রহস্থল থেকে একটি ফোল্ডারটি এর সাথে সরিয়ে ফেলুন:

git filter-branch --tree-filter 'rm -rf directory'

এটি সমস্ত কমিট থেকে ডিরেক্টরি বা ফাইল সরিয়ে দেয়।

আপনি ব্যবহার করে একটি প্রতিশ্রুতি নির্দিষ্ট করতে পারেন:

git filter-branch --tree-filter 'rm -rf directory' HEAD

বা একটি ব্যাপ্তি:

git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD

রিমোটে সবকিছু ঠেলাতে, আপনি এটি করতে পারেন:

git push origin master --force

2
এটি git rm -r --cached NAMEআপনার স্থানীয় গিট রেপো থেকে এটি সরিয়ে ফেলার কৌশল এবং
এরপরে যাকে পরে টানলে

1
এটি গিট ইতিহাসের পুনর্লিখন করে এবং আপনার পরে চাপ প্রয়োগ করতে হবে, আমার ধারণা যে প্রশ্নটি আছে তা এটার বাইরে নয় scope একটি সর্বজনীন বিখ্যাত রেপোতে আপনি ঠিক ইতিহাসের রেখাকে পরিবর্তন করতে পারবেন না কারণ ইতিমধ্যে রেপো ক্লোন করা প্রত্যেকে টান দেওয়ার সময় সমস্যাগুলি আসবে।
গিলিয়াম পেরেট

0

ফাইলগুলি উপেক্ষা করুন, গিট থেকে ফাইলগুলি সরিয়ে ফেলুন, গিট আপডেট করুন (অপসারণের জন্য)।

দ্রষ্টব্য: সংবেদনশীল তথ্যের জন্য এটি ইতিহাসের সাথে কাজ করে না।

এই প্রক্রিয়াটি অবশ্যই গিটের সাথে কী চলছে তার কিছুটা আন্ডারগ্র্যান্ডিং নেবে। সময়ের সাথে সাথে, এটি অর্জন করার পরে, আমি যেমন প্রক্রিয়াগুলি করতে শিখেছি:

1) ফাইল উপেক্ষা করুন

  • প্রজেক্টটি .gitignoreএগুলিকে উপেক্ষা করার জন্য যুক্ত করুন বা আপডেট করুন - অনেক ক্ষেত্রে যেমন আপনার, অভিভাবক ডিরেক্টরি, যেমন log/ব্যবহারের জন্য রেজেক্স হবে।
  • .gitignoreফাইল পরিবর্তনটি প্রতিশ্রুতিবদ্ধ এবং পুশ করুন (ধাক্কা আপনার মনে রাখে কিনা তা নিশ্চিত নয়, কাজটি করলে কোনও ক্ষতি হবে না)।

2) গিট থেকে ফাইলগুলি সরান (কেবল)।

  • এখন গিট (শুধুমাত্র) দিয়ে ফাইলগুলি সরান git remove --cached some_dir/
  • তারা এখনও স্থানীয়ভাবে রয়ে গেছে কিনা তা পরীক্ষা করুন (তাদের হওয়া উচিত!)।

3) এই পরিবর্তনটি যুক্ত করুন এবং প্রতিশ্রুতিবদ্ধ করুন (অন্যথায় বিভ্রান্তিকর "অ্যাড" আদেশ থাকা সত্ত্বেও মূলত এটি মুছে ফেলা জিনিসগুলিকে "যোগ" করার পরিবর্তন!)

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