Git কিভাবে একটি ফাইল সম্পর্কে "ভুলে যাওয়া" তৈরি করতে হয় যা ট্র্যাক করা হয়েছিল কিন্তু বর্তমানে। Gitignore তে?




git-rm (14)

যখন এটি ব্যবহার করুন:

1. আপনি অনেক ফাইল অট্যাক্ট করতে চান, অথবা

2. আপনি আপনার gitignore ফাইল আপডেট

সোর্স লিংক: http://www.codeblocq.com/2016/01/Untrack-files-already-added-to-git-repository-based-on-gitignore/ on-gitignore http://www.codeblocq.com/2016/01/Untrack-files-already-added-to-git-repository-based-on-gitignore/

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

ধাপ 1: আপনার সমস্ত পরিবর্তন কমিট করুন

এগিয়ে যাওয়ার আগে, আপনার .gitignore ফাইল সহ আপনার সমস্ত পরিবর্তন প্রতিশ্রুতিবদ্ধ কিনা তা নিশ্চিত করুন।

পদক্ষেপ 2: সংগ্রহস্থল থেকে সবকিছু মুছে ফেলুন

আপনার রেপো পরিষ্কার করার জন্য ব্যবহার করুন:

git rm -r --cached .
  • rm অপসারণ কমান্ড
  • -R recursive অপসারণ অনুমতি দেবে
  • ক্যাশে শুধুমাত্র সূচী থেকে ফাইল মুছে ফেলবে। আপনার ফাইল এখনও সেখানে থাকবে।

rm কমান্ড ক্ষমাপ্রার্থী হতে পারে। যদি আপনি পূর্বে যা করেন তা চেষ্টা করতে চান তবে জিনিসগুলি পরীক্ষা করার জন্য -n বা --dry-run flag যুক্ত করুন।

ধাপ 3: সবকিছু যোগ করুন

git add .

ধাপ 4: Commit

git commit -m ".gitignore fix"

আপনার সংগ্রহস্থান পরিষ্কার করা হয় :)

সেইসাথে কার্যকর পরিবর্তনগুলি দেখতে আপনার রিমোটে পরিবর্তনগুলি চাপুন।

.gitignore দ্বারা ট্র্যাক করা একটি ফাইল আছে, কিন্তু এখন ফাইলটি। .gitignore তালিকাতে রয়েছে।

যাইহোক, যে ফাইলটি সম্পাদিত হওয়ার পরে git status । আপনি কিভাবে সম্পূর্ণরূপে ভুলে git জোর না?


কি আমার জন্য কাজ করে না

(লিনাক্সের অধীনে), আমি এখানে পোস্টগুলি ব্যবহার করতে চেয়েছিলাম ls-files --ignored --exclude-standard | xargs git rm -r --cached ls-files --ignored --exclude-standard | xargs git rm -r --cached পদ্ধতির। যাইহোক, (কিছু) ফাইলগুলি সরিয়ে ফেলা হবে তাদের নামের মধ্যে একটি এমবেডেড নতুন লাইন / LF / \n । সমাধানগুলির মধ্যেও নয়:

git ls-files --ignored --exclude-standard | xargs -d"\n" git rm --cached
git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

এই পরিস্থিতির সাথে সামঞ্জস্য করুন (পাওয়া ফাইল সম্পর্কে ত্রুটি পান)।

তাই আমি প্রস্তাব

git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached

এটি ls-files থেকে -z আর্গুমেন্ট ব্যবহার করে এবং ফাইল- নামগুলিতে "কদর্য" অক্ষরগুলির জন্য নিরাপদে / সঠিকভাবে পূরণ করতে xargs -0 আর্গুমেন্টটি ব্যবহার করে।

ম্যানুয়াল পেজ জিআইটি-এল-ফাইল (1) এ , এটি বলে:

যখন -জে বিকল্পটি ব্যবহার করা হয় না, পাথনামগুলিতে TAB, LF, এবং ব্যাকস্ল্যাশ অক্ষরগুলি যথাক্রমে \ t, \ n, এবং \\ হিসাবে উপস্থাপিত হয়।

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

সম্পাদন করুন: আমাকে এটি যোগ করার জন্য বলা হয়েছে --- যে কোন git rm কমান্ড --- এটি অপসারণের স্থায়ীত্বের জন্য একটি কমিট অনুসরণ করতে হবে, যেমন git commit -am "Remove ignored files"


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


আমি গিট ফিল্টার-শাখা ব্যবহার করে এই সম্পন্ন। আমি ব্যবহৃত সঠিক কমান্ডটি ম্যান পেইজ থেকে নেওয়া হয়েছিল:

সতর্কতা : এটি আপনার সমগ্র ইতিহাস থেকে ফাইল মুছে ফেলবে

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

এই কমান্ডটি সম্পূর্ণ কমিটির ইতিহাস পুনঃপ্রতিষ্ঠা করবে, প্রতিটি git rm আগে git rm কার্যকর করবে এবং তাই নির্দিষ্ট ফাইলটি পরিত্রাণ পাবে। কমান্ডটি চালানোর আগে এটি ব্যাক আপ করতে ভুলবেন না এটি হারিয়ে যাবে।


আমি মনে করি, সম্ভবত গিট সম্পূর্ণরূপে তার ধারণার কারণে ফাইলটি ভুলে যেতে পারে না ( বিভাগ "স্ন্যাপশট, না পার্থক্য" )।

এই সমস্যা অনুপস্থিত, উদাহরণস্বরূপ, যখন সিভিএস ব্যবহার করে। ফাইল-ভিত্তিক পরিবর্তনগুলির তালিকা হিসাবে CVS তথ্য সংরক্ষণ করে। সিভিএসের তথ্য ফাইলগুলির একটি সেট এবং সময়ের সাথে সাথে প্রতিটি ফাইলে করা পরিবর্তন।

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

এই 2 টি নিবন্ধ আমার জন্য সহায়ক ছিল:

git অনুমান-বিহীন বনাম skip-worktree এবং Git এর সাথে ট্র্যাক করা ফাইলগুলির পরিবর্তনগুলি কীভাবে উপেক্ষা করা যায়

ফাইলটি ইতোমধ্যে ট্র্যাক করা থাকলে এটির উপর ভিত্তি করে আমি নিম্নলিখিত কাজ করি:

git update-index --skip-worktree <file>

এই মুহুর্তে এই ফাইলের সমস্ত স্থানীয় পরিবর্তনগুলি উপেক্ষা করা হবে এবং দূরবর্তীতে যাবে না। ফাইলটি রিমোটে পরিবর্তিত হলে, সংঘর্ষ ঘটে যখন git pull টানবে। স্ট্যাশ কাজ করবে না। এটি সমাধান করার জন্য, নিরাপদ স্থানে ফাইল সামগ্রী অনুলিপি করুন এবং এই পদক্ষেপগুলি অনুসরণ করুন:

git update-index --no-skip-worktree <file>
git stash
git pull 

ফাইল কন্টেন্ট দূরবর্তী কন্টেন্ট দ্বারা প্রতিস্থাপিত হবে। নিরাপদ স্থানে ফাইল থেকে ফাইল পরিবর্তন করুন এবং আবার সঞ্চালন করুন:

git update-index --skip-worktree <file>

যদি প্রত্যেকে, প্রকল্পের সাথে কাজ করে তবে git update-index --skip-worktree <file> সম্পাদন করবে, git update-index --skip-worktree <file> সমস্যাগুলি অনুপস্থিত থাকা উচিত। এই সমাধান কনফিগারেশনের ফাইলগুলির জন্য ঠিক আছে, যখন প্রত্যেক বিকাশকারীর নিজস্ব প্রকল্প কনফিগারেশন থাকে।

প্রতিবার রিমোটে ফাইল পরিবর্তন করা গেলে এটি রিমোট সামগ্রী দ্বারা ওভাররাইটিং থেকে রক্ষা করতে পারে।


আমি সবসময় এই untracked ফাইল মুছে ফেলার জন্য এই কমান্ড ব্যবহার করুন। এক লাইন, ইউনিক্স-শৈলী, পরিষ্কার আউটপুট:

git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

এটি আপনার সমস্ত অবহিত ফাইলগুলিকে তালিকাবদ্ধ করে, প্রতিটি আউটপুট লাইনকে উদ্ধৃত লাইন দিয়ে প্রতিস্থাপনের সাথে পাথগুলি পরিচালনা করার পরিবর্তে প্রতিস্থাপন করে এবং সূচী থেকে পাথ / ফাইল / git rm -r --cached সরাতে git rm -r --cached সবকিছু পাস করে।


নিম্নলিখিত পদক্ষেপ ক্রমশই করুন, আপনি ভাল হবে।

1. ডিরেক্টরি / স্টোরেজ থেকে ভুলভাবে যোগ করা ফাইল মুছে ফেলুন । আপনি "rm -r" (linux) কমান্ড ব্যবহার করতে পারেন অথবা ডিরেক্টরিগুলি ব্রাউজ করে মুছে ফেলতে পারেন।

2. ফাইলটি এখন / gitignore ফাইল এবং ডিরেক্টরি gitignore করুন এবং এটি সংরক্ষণ করুন।

3. এখন এই কমান্ডগুলি ব্যবহার করে গিট ক্যাশে থেকে তাদের সরিয়ে দিন (যদি একাধিক ডিরেক্টরি থাকে তবে বার বার এই কমান্ডটি ইস্যু করে একে অপরকে সরান )

git rm -r --cached path-to-those-files

4. এখন একটি কমিট এবং ধাক্কা , এই কমান্ড ব্যবহার করুন।এই git দূরবর্তী থেকে যারা ফাইল মুছে ফেলা হবে এবং গিট বন্ধ যারা ফাইল ট্র্যাক করা।

git add .
git commit -m "removed unnecessary files from git"
git push origin

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

প্রথম:

git rm -r --cached . 
git add .

তারপর:

git commit -am "Remove ignored files"

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

# Get files matching exclusionsfrom .gitignore
# Excluding comments and empty lines
$ignoreFiles =  gc .gitignore | ?{$_ -notmatch  "#"} |  ?{$_ -match  "\S"} | % {
                    $ignore = "*" + $_ + "*"
                    (gci -r -i $ignore).FullName
                }
$ignoreFiles = $ignoreFiles| ?{$_ -match  "\S"}

# Remove each of these file from Git 
$ignoreFiles | % { git rm $_}

git add .

যদি আপনি git rm ট্র্যাকেড ফাইলটি git rm --cached করতে না পারেন তবে অন্য লোকেদের এটির প্রয়োজন হতে পারে (সতর্কতা, এমনকি যদি আপনি git rm --cached অন্য কেউ এই পরিবর্তনটি পায় তবে তাদের ফাইলগুলি তাদের ফাইল সিস্টেমে মোছা হবে)। এইগুলি প্রায়ই কনফিগার ফাইল ওভার্রাইড, প্রমাণীকরণ শংসাপত্র ইত্যাদি কারণে সম্পন্ন করা হয়। দয়া করে https://gist.github.com/1423106 দেখুন যেভাবে লোকেরা সমস্যাটির পক্ষে কাজ করেছে।

সংক্ষেপ:

  • আপনার আবেদনটি উপেক্ষা করা ফাইল config-overide.ini এর জন্য দেখুন এবং প্রতিশ্রুতিবদ্ধ ফাইল config.ini (বা অন্যথায়, ~ / .config / myapp.ini, অথবা $ MYCONFIGFILE এর জন্য দেখুন) ব্যবহার করুন।
  • ফাইল config-sample.ini কমান্ড এবং ফাইল config.ini উপেক্ষা, একটি স্ক্রিপ্ট বা প্রয়োজনীয় যদি ফাইল প্রয়োজনীয় অনুরূপ কপি আছে।
  • আপনার জন্য পরিবর্তনগুলি প্রয়োগ এবং অপসারণের জন্য gitattributes পরিষ্কার / স্মুজি জাদু ব্যবহার করার চেষ্টা করুন, উদাহরণস্বরূপ কনফিগার ফাইলটিকে বিকল্প শাখা থেকে চেকআউট হিসাবে মুছুন এবং HEAD থেকে চেকআউট হিসাবে কনফিগার ফাইলটি পরিষ্কার করুন। এটি চতুর জিনিস, আমি নবীন ব্যবহারকারীর জন্য এটি সুপারিশ করি না।
  • কনফিগার ফাইলটিকে নিয়োজিত কোনও স্থাপনার শাখায় রাখুন যা কখনো মাস্টারের সাথে মেশানো হয় না। আপনি যখন স্থাপন / কম্পাইল / পরীক্ষা করতে চান তখন আপনি সেই শাখাটিতে একত্রিত হন এবং সেই ফাইলটি পান। এটি মানবিক মার্জ নীতিগুলি এবং অতিরিক্ত-গিট মডিউলগুলির ব্যবহার ব্যতীত নির্বোধ / পরিষ্কার পদ্ধতি।
  • এন্টি-পুনর্মিলন: অনুমান-অপরিবর্তিত ব্যবহার করবেন না, এটি শুধুমাত্র অশ্রু শেষ হবে।

.gitignore জিট দ্বারা ট্র্যাক করা ফাইলগুলির সেটের সাথে সংযুক্ত হওয়া (কোনও add -f -ফ ছাড়া) অচুক্ত ফাইলগুলিকে আটকাবে। তবে জিটি ইতিমধ্যেই ট্র্যাক করা যে কোনও ফাইলগুলি ট্র্যাক করতে থাকবে।

একটি ফাইল ট্র্যাকিং বন্ধ করার জন্য আপনাকে সূচী থেকে এটি অপসারণ করতে হবে। এই কমান্ড দিয়ে অর্জন করা যেতে পারে।

git rm --cached <file>

প্রধান সংশোধন থেকে ফাইল অপসারণ পরবর্তী কমিটিতে ঘটবে।


এটি সর্বশেষ গিটে কোন সমস্যা নয় (লেখার সময় v2.17.1)।

.gitignore অবশেষে ট্র্যাক-কিন্তু-মুছে ফেলা ফাইল উপেক্ষা করে। নিচের স্ক্রিপ্টটি চালানোর মাধ্যমে আপনি নিজের জন্য এই পরীক্ষা করতে পারেন। চূড়ান্ত git status বিবৃতি "কমিট কিছুই" রিপোর্ট করা উচিত।

# Create empty repo
mkdir gitignore-test
cd gitignore-test
git init

# Create a file and commit it
echo "hello" > file
git add file
git commit -m initial

# Add the file to gitignore and commit
echo "file" > .gitignore
git add .gitignore
git commit -m gitignore

# Remove the file and commit
git rm file
git commit -m "removed file"

# Reintroduce the file and check status.
# .gitignore is now respected - status reports "nothing to commit".
echo "hello" > file
git status

ইতিমধ্যে প্রতিশ্রুতিবদ্ধ ক্ষেত্রে DS_Store:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

তাদের দ্বারা উপেক্ষা করুন:

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global

অবশেষে, একটি কমিট করা!


git ls-files --ignored --exclude-standard -z | xargs -0 git rm --cached
git commit -am "Remove ignored files"

এটি উপেক্ষা করা ফাইলগুলির তালিকা নেয় এবং সূচী থেকে তাদের সরিয়ে নেয়, তারপর পরিবর্তনগুলি সম্পাদন করে।





git-rm