কীভাবে ট্র্যাকিং বন্ধ করবেন এবং গিটের কোনও ফাইলের পরিবর্তনগুলি উপেক্ষা করবেন?


1729

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

আমি *.csprojআমার স্থানীয় সাথে যুক্ত করেছি .gitignore, তবে ফাইলগুলি ইতিমধ্যে রেপোতে রয়েছে।

আমি যখন গিট স্ট্যাটাস টাইপ করি তখন এটি আমার পরিবর্তনগুলি দেখায় যেগুলিতে আমি csprojপ্যাচগুলি ট্র্যাক রাখতে বা জমা দিতে আগ্রহী নই।

কীভাবে আমি আমার ব্যক্তিগত রেপো থেকে এই ফাইলগুলির "ট্র্যাকিং" সরিয়ে ফেলব (তবে তাদের উত্সে রাখি যাতে আমি সেগুলি ব্যবহার করতে পারি) যাতে আমি কোনও স্ট্যাটাস করার সময় পরিবর্তনগুলি দেখতে না পাই (বা কোনও প্যাচ তৈরি করি)?

এই পরিস্থিতিটি পরিচালনা করার জন্য কি কোনও সঠিক / আধ্যাত্মিক উপায় আছে?


17
একটি খুব দরকারী প্রশ্ন, তবে আমি কেন আগ্রহী যে আপনি কেন .csprojফাইলের পরিবর্তনগুলি ট্র্যাক করতে চান না , যা কোনও প্রকল্পের একটি গুরুত্বপূর্ণ অঙ্গ। .csproj.userফাইল বা কোনও .Publish.XMLফাইলের পরিবর্তনগুলি যা আমি পুরোপুরি ট্র্যাকিংয়ের বিষয়টি বুঝতে পারি না তবে আপনি কেন ট্র্যাক করতে চান না তা .csprojসম্পর্কে আমি আগ্রহী ...
ওভেন ব্ল্যাকার

7
তারা কি আলাদা আইডিই ব্যবহার করতে পারে?
জ্যারেট

3
হাস্যকরভাবে, আমি এই থ্রেডে এসেছি কারণ আমি একটি রেপো থেকে .suo ফাইলগুলি সরানোর চেষ্টা করছি তবে সেগুলি স্থানীয়ভাবে রাখছি। উত্তরসূরীদের জন্য। নেট বিকাশের জন্য আপনাকে .csproj ফাইলগুলি রেপোতে রাখা দরকার এবং আপনি যদি আপনার প্রকল্পে অন্য কোনও বিকাশকারীদের ক্রোধ অনুভব করতে না চান তবে এই পরিবর্তনগুলি সর্বদা ট্র্যাক করা উচিত। যদি কখনও অনিশ্চিত হয় তবে গিটিহাব-এ গিটিগনোর ফাইলের রেপো দেখুন: github.com/github/gitignore/blob/master/VisualStudio.gitignore
লংদা

1
@ ক্যাপকেকে, আপনি যে প্রশ্নটির সাথে লিঙ্ক করেছেন সেটির এই 15 দিনের পরে লেখা হয়েছিল? মনে মনে কি আর একটা আছে?
স্টেফেনমুরডোচ

@ মারফার ক্যানোনিকাল প্রশ্নগুলি অগত্যা প্রাচীনতম হতে হবে না, কেবল সেরা প্রশ্ন । আমি যার সাথে লিঙ্ক করেছি তার 20 টি উত্তর রয়েছে, যখন

উত্তর:


2126

git rm --cachedরিভিশন নিয়ন্ত্রণ থেকে আপনি যে ফাইলগুলি সরাতে চান তার প্রতিটিকেই কল করা ভাল হওয়া উচিত। যতক্ষণ না আপনার স্থানীয় উপেক্ষা করার ধরণগুলি সঠিক থাকে আপনি এই ফাইলগুলি গিটের স্থিতির আউটপুটে অন্তর্ভুক্ত দেখতে পাবেন না।

নোট করুন যে এই সমাধানটি ফাইলগুলি সংগ্রহস্থল থেকে সরিয়ে দেয়, সুতরাং সমস্ত বিকাশকারীদের ফাইলের নিজস্ব স্থানীয় (পুনর্বিবেচনা নিয়ন্ত্রিত) অনুলিপিগুলি বজায় রাখতে হবে

এই ফাইলগুলিতে পরিবর্তন সনাক্তকরণ থেকে গিটকে আটকাতে আপনার এই কমান্ডটিও ব্যবহার করা উচিত:

git update-index --assume-unchanged [path]

আপনি সম্ভবত যা করতে চান: (নীচে @ রায়ান টেলরের উত্তর )

  1. এটি গিটকে বলতে আপনার নিজের ফাইল বা ফোল্ডারের নিজস্ব স্বাধীন সংস্করণ চান। উদাহরণস্বরূপ, আপনি উত্পাদন / স্টেজিং কনফিগারেশন ফাইলগুলি ওভাররাইট (বা মুছুন) করতে চান না।

git update-index --skip-worktree <path-name>

সম্পূর্ণ উত্তরটি এখানে এই ইউআরএলে রয়েছে: http://source.kohlerville.com/2009/02/untrack-files-in-git/


186
"গিট আরএম - ক্যাচড <ফাইল>" << ফাইলটিকে সংস্করণ নিয়ন্ত্রণ থেকে অপসারণ করবে, যখন এটি কার্যকরী ভান্ডারে রাখবেন while আপনি যা চান তা তা হোক ...
জাকুব নরবস্কি

51
কিন্তু অন্যরা যখন সংগ্রহশালাটি টানবে, তখন তাদের নিজস্ব * .csproj ফাইলটি সরানো হবে? কারণ আমরা চাইলে ফাইলটি যদি না ফেলে রাখা হয় তবে মুছে ফেলা হয় না।
FMaz008

23
আপনি যদি কোনও ডিরেক্টরিতে সমস্ত ফাইল মুছে ফেলার চেষ্টা করছেন, এটি গিট এলএস-ফাইলগুলির সাথে একত্রিত করুন: git ls-files | xargs git rm --cached- যা প্রকৃত ফাইলগুলি মোছা না করে কোনও প্রদত্ত ডিরেক্টরিতে গিট সূচক থেকে সমস্ত কিছু সরিয়ে ফেলবে।
মার্কো

129
git rm --cached -r <dir>ফোল্ডারে এবং এতে থাকা সমস্ত ফাইলগুলিতে পুনরাবৃত্তভাবে কাজ করে।
ক্রিস কে

41
এটি ফাইলটি ট্র্যাকিং বন্ধ করবে, স্থানীয়ভাবে এটি সংরক্ষণ করবে, তবে যে কেউ টানবে তার জন্য এটি মুছে ফেলা হবে
এডওয়ার্ড নেওয়েল

249

যদি আপনি এটি করেন git update-index --assume-unchanged file.csproj, গিটটি স্বয়ংক্রিয়ভাবে পরিবর্তনের জন্য file.csproj পরীক্ষা করবে না: এটি যখনই আপনি তাদের পরিবর্তন করবেন তখন গিটের স্থিতিতে আসতে তাদের থামিয়ে দেবে। সুতরাং আপনি আপনার সমস্ত .csproj ফাইলকে এইভাবে চিহ্নিত করতে পারেন - যদিও আপনাকে আপস্রোম রেপো আপনাকে যে কোনও নতুন বার্তা প্রেরণ করবে ম্যানুয়ালি চিহ্নিত করতে হবে। (যদি আপনার এগুলিতে থাকে .gitignoreবা থাকে .git/info/excludeতবে আপনি যা তৈরি করেন তা এড়ানো হবে)

আমি .csproj ফাইলগুলি কী তা সম্পূর্ণরূপে নিশ্চিত নই ... যদি তারা আইডিই কনফিগারেশনের লাইনের সাথে কিছু থাকে (একলাইপসের .eclipse এবং .classpath ফাইলগুলির অনুরূপ) তবে আমি তাদের পরামর্শ দিই যে এগুলি কখনও উত্স-নিয়ন্ত্রিত না হওয়া উচিত suggest সব। অন্যদিকে, যদি তারা বিল্ড সিস্টেমের অংশ হয় (মেকফাইলগুলির মতো) তবে পরিষ্কারভাবে তাদের উচিত --- এবং localচ্ছিক স্থানীয় পরিবর্তনগুলি গ্রহণের একটি উপায় (যেমন একটি স্থানীয় কোড স্প্রোজ থেকে একটি লা কনফিগারেশন) কার্যকর হবে would : বিল্ড আপকে বৈশ্বিক অংশ এবং স্থানীয় ওভাররাইডগুলিতে ভাগ করুন।


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

4
এখানেই একমাত্র সঠিক উত্তর! আমি বহু বছর ধরে @araqnids উত্তর ব্যবহার করে আসছি এবং এই সমস্যাটি সমাধান করার অনুরোধ অনুসারে এটি ঠিক কাজ করে।
এনএইচডালি

কমান্ডের যুক্তিতে 'ফাইল' উপসর্গটির অর্থ কী? শুধু তাই নয় কেন .csproj?
গ্রিনএজেজেড

1
কোনও ফাইল আপনি সনাক্ত করতে পারেন যে এটি কোনও ফাইলের জন্য করা হয়েছে, বা কোন ফাইলের জন্য এটি একটি রেপোতে করা হয়েছে? আমি এটি করেছি তা ভুলে গিয়ে আমি কিছুটা ঘাবড়ে যাচ্ছি, তারপর ভাবছি কেন এই ফাইলটি হ্যাক আপডেট হচ্ছে না, পরে!
গ্রিনএজেজেড

4
@ গ্রিনআসজেড: git ls-files -vছোট ফাইলের সূচক (যেমন ক্যাশেড ফাইলগুলির জন্য hস্বাভাবিকের পরিবর্তে H) এর পরিবর্তে ধরে নেওয়া হয়েছে এমন ফাইলগুলি প্রদর্শিত হবে ।
আমদান

237

এখানে 3 টি বিকল্প রয়েছে, আপনি সম্ভবত # 3 চান

1. এটি আপনার জন্য স্থানীয় ফাইলটি রক্ষা করবে, তবে তারা টানলে অন্য কারও জন্য এটি মুছবে।

git rm --cached <file-name> অথবা git rm -r --cached <folder-name>

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

git update-index --assume-unchanged <path-name>

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

git update-index --skip-worktree <path-name>

এটি জানা গুরুত্বপূর্ণ যে গিটের সাথে git update-index প্রচার করবে না এবং প্রতিটি ব্যবহারকারীর এটি স্বাধীনভাবে চালাতে হবে।


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

1
আমি কীভাবে পরীক্ষা করতে পারি, আমার স্থানীয় ক্ষেত্রে, কোন ফাইলগুলি 'অনুমান-অপরিবর্তিত' বা 'স্কিপ-ওয়ার্কট্রি'র জন্য প্রয়োগ হয়?
সুপওয়াত পুসাভন্নো

3
@SupawatPusavanno যা আপনি পূর্বে এই উত্তরটি এ অনুমান-অপরিবর্তিত বা লাফালাফি-worktree চেহারার জন্য নির্বাচিত ফাইলগুলি দেখতে stackoverflow.com/questions/42363881/... - এটা ব্যবহার grepএবংgit ls-files
রায়ান টেলর

1
খুব ভাল উত্তর। আমি যখন অন্য একটি শাখায় স্যুইচ করার চেষ্টা করি তখন গিট ত্রুটিটি ত্রুটি করে: ত্রুটি: "নিম্নলিখিত ফাইলগুলিতে আপনার স্থানীয় পরিবর্তনগুলি চেকআউট দ্বারা ওভাররাইট করা হবে ....." এবং সমাধানটি স্যুইচ করার আগে পরিবর্তনগুলি স্ট্যাচ করা এবং আন-স্ট্যাশ করার সময় সমাধান করা হয় আপনি আবার শাখায় ফিরে আসবেন
ফ্যান্টম রেফারেন্স

@ রায়ান টেইলর: আমি প্রথমে অপরিবর্তিত ধরে নিয়ে কাজ করার চেষ্টা করেছি (কাজ করেনি) এবং ওয়ার্কট্রি কমান্ডটি এড়িয়ে চলুন (কাজ করেনি), যখন আমি গিট স্ট্যাটাস দিয়ে পরীক্ষা করে দেখি যে ফাইলগুলি প্রদর্শন করছে না তার অর্থ কমান্ডটি কাজ করেছে। কিন্তু আমি যখন it gives me error that your local changes would be overwrittenএই 2 টি ফাইলের মধ্যে গিট অরিজিনের রেপো থেকে আবার কোড টানছি তখন এর অর্থ এটি সঠিকভাবে অবরুদ্ধ নয়?
নেভারজিভআপ 161

152

এটি একটি দুই ধাপ পদ্ধতি:

  1. ফাইল / ফোল্ডারটির ট্র্যাকিং সরান - তবে তাদের ডিস্কে রাখুন - ব্যবহার করে

    git rm --cached 
    

    এখন তারা "পরিবর্তিত" হিসাবে দেখায় না তবে এখনও হিসাবে প্রদর্শিত হয়

        untracked files in  git status -u  
    
  2. এগুলিতে যুক্ত করুন .gitignore


56
না, এটি ফাইলটিকে ট্র্যাকিং থেকে সরিয়ে দেবে, স্থানীয়ভাবে এটি সংরক্ষণ করবে, তবে যে কেউ টানবে তার জন্য এটি মুছে ফেলা হবে
এডওয়ার্ড নেওয়েল

1
আমার ক্ষেত্রে, আমি দুর্ঘটনাক্রমে একটি ফোল্ডার যুক্ত করেছি যা আমি ট্র্যাক করতে চাইনি, তাই এটি আমার প্রয়োজন।
সনি

4
হ্যাঁ, জিজ্ঞাসা করা হিসাবে এটি প্রকৃতপক্ষে ভুল উত্তর - তবে এটি সম্ভবত বেশিরভাগ মানুষের পক্ষে সঠিক উত্তর যারা অনুসন্ধান প্রশ্নে (আমার মত) এই প্রশ্নটি খুঁজে পান।
অ্যান্ড্রু স্পেন্সার

95

গৃহীত উত্তরটি এখনও আমার পক্ষে কার্যকর হয়নি

আমি ব্যবহার করতাম

git rm -r --cated।

গিট অ্যাড

গিট কমিট-এম "ফিক্সিং .gitignore"

থেকে উত্তর খুঁজে পাওয়া যায়নি এখানে


লিঙ্কটি খুব কার্যকর, বিশেষত .gitignore
rmcsharry

9
আমি এখানে 3 বার ফিরে এসেছি, আশা করি পরের বারের আগে আমি স্মৃতিতে প্রতিশ্রুতি রাখতে পারি
হ্যারি বোশ

উপরের উত্তরের মতো অ্যাডওয়ার্ড নেওলের মন্তব্যটি এখানেও প্রযোজ্য: "এটি ফাইলটি ট্র্যাকিং থেকে সরিয়ে দেবে, স্থানীয়ভাবে এটি সংরক্ষণ করবে, তবে যে কেউ টানবে তার জন্য এটি মুছে ফেলা হবে "।
ToJo

46

আপনার .gitignore ভুলে গেছেন?

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

git rm --cached -r .

আপনি প্রকল্পের মূলে আছেন তা নিশ্চিত করুন।

তারপরে আপনি স্বাভাবিকটি করতে পারেন

যোগ

git add .

সমর্পণ করা

git commit -m 'removed all and added with git ignore'

ধাক্কা

git push origin master

উপসংহার

আশা করি এটি এমন ব্যক্তিকে সহায়তা করে যা তাদের পরিবর্তন করতে .gitignoreহবে বা একসাথে সব ভুলে গিয়েছিল।

  • এটি পুরো ক্যাশে সরিয়ে দেয়
  • আপনার .gitignore তাকান
  • আপনি ট্র্যাক করতে চান ফাইল যুক্ত করে
  • আপনার রেপোতে ধাক্কা দেয়

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

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

উপরের উত্তরের মতো অ্যাডওয়ার্ড নেওলের মন্তব্যটি এখানেও প্রযোজ্য: "এটি ফাইলটি ট্র্যাকিং থেকে সরিয়ে দেবে, স্থানীয়ভাবে এটি সংরক্ষণ করবে, তবে যে কেউ টানবে তার জন্য এটি মুছে ফেলা হবে "।
ToJo

26

অন্যান্য উত্তরে যেমন উল্লেখ করা হয়েছে, নির্বাচিত উত্তরগুলি ভুল।

উত্তর অপর এক প্রশ্নের প্রস্তাব দেওয়া এটি এড়িয়ে যান-worktree যে প্রয়োজনীয় হবে হতে পারে।

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

2
না, সত্যই নয়: ফাইলটি সংগ্রহস্থলে রাখার--skip-worktree জন্য ব্যবহৃত হয় তবে তার পরিবর্তনগুলি ট্র্যাক করা বন্ধ করে দেয় । যেমন আপনার উত্তরটি বলেছে: - স্কিপ-ওয়ার্ক্রিটি তখন কার্যকর যখন আপনি গিটকে নির্দিষ্ট ফাইলটি স্পর্শ না করার নির্দেশ দেন কারণ বিকাশকারীদের এটি পরিবর্তন করা উচিত
এরদল জি।

4
@ErdalG। যথাযথভাবে। প্রশ্ন অনুসারে, তারা ফাইলের কোনও পরিবর্তন উপেক্ষা করতে চান কিন্তু ফাইলটি
রেপোতে

@ নতুন_ইউএমআর এর সাথে সম্মত হন --assume-unchangedএবং --skip-worktreeএকইরকম প্রভাব রয়েছে তবে তাদের উদ্দেশ্যগুলি সম্পূর্ণ আলাদা। পূর্ববর্তীটি হ'ল গিটকে নির্দিষ্ট ফাইলগুলি পরীক্ষা না করাকে বোকা বানিয়ে গিট পারফরম্যান্সের গতি বাড়ানোর জন্য , অন্যদিকেটি হ'ল নির্দিষ্ট ফাইলগুলিতে ভবিষ্যতের পরিবর্তনগুলি উপেক্ষা করার জন্য , যা রানটাইম তবে প্রয়োজনীয় ফাইলগুলির জন্য উপযুক্ত।
ভিক্টর ওয়াং

22

কিছু সময় বাঁচাতে আপনি আপনার .gitignore এ যে নিয়ম যুক্ত করেছেন তা একাধিক ফাইল / ফোল্ডারগুলি অপসারণ করতে ব্যবহার করা যেতে পারে

git rm --cached app/**/*.xml

অথবা

git rm --cached -r app/widgets/yourfolder/

ইত্যাদি


এটি যে কোনও সুযোগে আপনি gitignore ধাপে ধাপে ধাপে ঠিক করতে চান এটি একটি খুব ভাল সমাধান কারণ
cutiko

15

গিট দ্বারা কোনও ফাইল নিরীক্ষণ রোধ করতে

git update-index --assume-unchanged [file-path]

এবং এটি ফিরে ব্যবহার ফিরে

git update-index --no-assume-unchanged [file-path]

অনুরূপ ব্যবহারের ক্ষেত্রে https://github.com/awslabs/git-secrets উল্লেখ করার জন্য একটি রেপো


1
টিপ ফিরিয়ে দেওয়া একটি জীবনরক্ষক ছিল, ধন্যবাদ!
হামান স্যামুয়েল

9

প্রচুর লোক আপনাকে ব্যবহার করার পরামর্শ দেয় git update-index --assume-unchanged। প্রকৃতপক্ষে, এটি একটি ভাল সমাধান হতে পারে, তবে কেবল অল্প সময়ে।

কি আপনি সম্ভবত কাজ করতে চান, তা হল: git update-index --skip-worktree

(তৃতীয় বিকল্প, যা আপনি সম্ভবত চান না তা হ'ল: git rm --cachedএটি আপনার স্থানীয় ফাইলটি রাখবে, তবে এটি দূরবর্তী সংগ্রহস্থল থেকে সরানো হিসাবে চিহ্নিত করা হবে))

প্রথম দুটি বিকল্পের মধ্যে পার্থক্য?

  • assume-unchangedঅস্থায়ী হ'ল আপনাকে কোনও ফাইল থেকে পরিবর্তনগুলি আড়াল করতে দেয়। আপনি যদি কোনও ফাইলের মধ্যে করা পরিবর্তনগুলি আড়াল করতে চান, ফাইলটি সংশোধন করুন, তারপরে অন্য একটি শাখা চেকআউট করুন, আপনাকে no-assume-unchangedসম্ভবত স্ট্যাশ পরিবর্তনগুলি সম্পন্ন করতে হবে।
  • skip-worktree আপনি যা যা শাখা চেকআউট করবেন না কেন তা আপনার পরিবর্তনগুলি অনুসরণ করবে!

কেস ব্যবহার করুন assume-unchanged

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

আমি কেবল তখনই ব্যবহার করতে চাই যখন আমি কিছুক্ষণের জন্য পরিবর্তনগুলি ট্র্যাক করা বন্ধ করতে চাই + একই সংশোধন git commit -aসম্পর্কিত ফাইলের একগুচ্ছ প্রতিশ্রুতিবদ্ধ ।

কেস ব্যবহার করুন skip-worktree

আপনার পরামিতি (যেমন পাসওয়ার্ড সহ) সমেত একটি সেটআপ ক্লাস রয়েছে যা আপনার বন্ধুদের তাদের সেটআপের সাথে সাথে পরিবর্তন করতে হবে।

  • 1: এই শ্রেণীর প্রথম সংস্করণ তৈরি করুন, ফিল্ডগুলি পূরণ করুন এবং অন্যকে শূন্য / শূন্য রাখতে পারেন।
  • 2: প্রতিশ্রুতিবদ্ধ এবং এটি দূরবর্তী সার্ভারে ধাক্কা।
  • 3: git update-index --skip-worktree MySetupClass.java
  • 4: আপনার নিজস্ব পরামিতিগুলির সাথে আপনার কনফিগারেশন ক্লাস আপডেট করুন।
  • 5: অন্য কার্যকারিতা নিয়ে কাজ করতে ফিরে যান।

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

PS: এক বা অন্যটি করুন, তবে উভয়ই আপনার অনাকাঙ্ক্ষিত পার্শ্ব-প্রতিক্রিয়া হিসাবে থাকবে না। আপনি যদি অন্য পতাকাটি ব্যবহার করে দেখতে চান তবে প্রথমে আপনাকে পরবর্তীটি অক্ষম করা উচিত।


7

গিটকে আপনার স্থানীয় ফাইল / ফোল্ডারে পরিবর্তনগুলি ট্র্যাক না করার জন্য বলতে (মানে গিট স্ট্যাটাস এতে পরিবর্তনগুলি সনাক্ত করবে না), করুন:

git update-index --skip-worktree path/to/file

এবং গিটকে আবার আপনার স্থানীয় সংস্করণে পরিবর্তনগুলি ট্র্যাক করতে বলতে (যাতে আপনি পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করতে পারেন), করুন:

git update-index --no-skip-worktree path/to/file

1

একটি লাইন উত্তর git update-index --assume-unchanged [path]

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

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

সেরা


0

আমি ধরে নিচ্ছি যে আপনি প্রতিটি ফাইল আলাদাভাবে নির্বাচন করার পরিবর্তে একটি নির্দিষ্ট ফোল্ডার বা বিন ফোল্ডারের সমস্ত ফাইল কীভাবে সরিয়ে ফেলতে বলছেন ।

আপনি এই কমান্ডটি ব্যবহার করতে পারেন:

git rm -r -f /<floder-name>\*

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

আপনার .gitignore আসন্ন কমিটির জন্য প্রস্তুত আছে তা নিশ্চিত করুন।
ডকুমেন্টেশন: গিট আরএম


0

অপারেশনের আদেশের কারণে সমস্যা হতে পারে। আপনি যদি প্রথমে .gitignore সংশোধন করেন, তবে গিট আরএম - ক্যাচড এক্সএক্সএক্স, আপনার এই সমস্যার মুখোমুখি হতে হতে পারে।

সঠিক সমাধান :

  1. গিট আরএম - ক্যাচড এক্সএক্সএক্সএক্স
  2. .gitignore পরিবর্তন করেছেন

অর্ডার দাও!

পরিবর্তনের পরে .gitignore পুনরায় লোড!


0

আমি ধরে নিচ্ছি যে আপনি গিট টে্যাকিং থেকে একটি ফাইল মুছে ফেলার চেষ্টা করছেন। তার জন্য আমি কমান্ডের নীচে সুপারিশ করব।

গিট আপডেট-ইনডেক্স - এসেসিউম-অপরিবর্তিত

প্রাক্তন - গিট আপডেট-সূচক - এসেসিউম-অপরিবর্তিত .gitignore .idea / compiler.xML


0

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

নীচে, "বাদ দেওয়া" হল সেই ডিরেক্টরিটির নাম যা আমি দেখতে চাই না changes

প্রথমে আপনার পরিবর্তন ট্র্যাকিং ক্যাশে (আপনার ফাইল সিস্টেম থেকে সরিয়ে না দিয়ে) যে কোনও নতুন ফাইল সরিয়ে ফেলুন।

git status | grep "new file:" | cut  --complement -d " " -f1-4 | grep "^excludedir" | xargs git rm --cache

আপনি একই সঙ্গে করতে পারেন modified:renamed:কিছুটা জটিল, কারণ আপনাকে ->নতুন ফাইলের জন্য পোস্ট বিটটি দেখতে হবে এবং নীচের ->জন্য বর্ণিত পূর্ব বিটটি করতে হবে deleted:

deleted: ফাইলগুলি কিছুটা আরও জটিল প্রমাণিত হয়েছে, যেহেতু আপনি স্থানীয় সিস্টেমে উপস্থিত নেই এমন কোনও ফাইলের আপডেট-ইনডেক্সটি মনে করতে পারবেন না

echo .deletedfiles >> .gitignore
git status | grep "deleted:" | cut  --complement -d " " -f1-4 | grep "^excludedir" > .deletedfiles
cat .deletedfiles | xargs -d '\n' touch
cat .deletedfiles | xargs -d '\n' git add -f
cat .deletedfiles | xargs -d '\n' git update-index --assume-unchanged
cat .deletedfiles | xargs -d '\n' rm

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

তারপরে, সেই ডিরেক্টরি থেকে পরিবর্তন ট্র্যাকিং অবরুদ্ধ করুন

git ls-files excludedir/ | xargs git update-index --skip-worktree
git update index --skip-worktree excludedir/

0

এই উত্তরে প্রায় গিট কমান্ড-মুক্ত পদ্ধতি দেওয়া হয়েছিল :

প্রতিটি স্থানীয় রেপো জন্য নির্দিষ্ট ফাইল উপেক্ষা :

  1. আপনার টার্মিনালে ~/.gitignore_globalযেমন একটি ফাইল তৈরি করুন touch ~/.gitignore_global
  2. git config --global core.excludesfile ~/.gitignore_globalএকবারের জন্য চালান ।
  3. আপনি যে ফাইল / ডিয়ার পাথগুলিতে এড়াতে চান তা লিখুন ~/.gitignore_global। উদাহরণস্বরূপ modules/*.H, যা আপনার কর্ম ডিরেক্টরিতে অনুমান করা হবে, যেমন $WORK_DIR/modules/*.H

একক স্থানীয় রেপোর জন্য নির্দিষ্ট ফাইলগুলিকে উপেক্ষা করতে :

  1. .git/info/excludeরেপোর মধ্যে ফাইলের জন্য উপরের তৃতীয় পদক্ষেপটি করুন , তা হল ফাইল / দির পাথগুলি লিখুন যা আপনি উপেক্ষা করতে চান .git/info/exclude। উদাহরণস্বরূপ modules/*.C, যা আপনার কর্ম ডিরেক্টরিতে অনুমান করা হবে, যেমন $WORK_DIR/modules/*.C

0

বর্তমান / ভবিষ্যতে .gitignore প্রয়োগ করুন

এই পদ্ধতিটি স্ট্যান্ডার্ড .gitignore আচরণ প্রয়োগ করে এবং উপেক্ষা করা দরকার এমন ফাইলগুলিকে ম্যানুয়ালি উল্লেখ করার প্রয়োজন নেই

--exclude-from=.gitignoreআর ব্যবহার করতে পারবেন না : / - আপডেট হওয়া পদ্ধতিটি এখানে:

সাধারণ পরামর্শ: একটি পরিষ্কার রেপো দিয়ে শুরু করুন - প্রতিশ্রুতিবদ্ধ সমস্ত কিছুই, ডিরেক্টরি ডিরেক্টরি বা সূচীতে কোনও কিছুই মুলতুবি নেই এবং ব্যাকআপ করুন !

#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"

#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached

#optionally add anything to the index that was previously ignored but now shouldn't be:
git add *

#commit again
#optionally use the --amend flag to merge this commit with the previous one instead of creating 2 commits.

git commit -m "re-applied modified .gitignore"

#other devs who pull after this commit is pushed will see the  newly-.gitignored files DELETED

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


-1

দীর্ঘ সময় অনুসন্ধানের পরে, এটি করার একটি উপায় সন্ধান করুন। একটি Git কমান্ড ওরফে .gitconfigঅ্যান্ড্রয়েড স্টুডিও প্রকল্পে .like, আগে চেকআউট শাখা প্রত্যাবর্তন কনফিগ ফাইল এবং তারপর এটি এড়িয়ে যান তাহলে চেকআউট শাখা ব্যবহারের পরে sedআমার স্থানীয় কনফিগ পরিবর্তন কনফিগ ফাইল। checkoutandmodifylocalproperties = !git update-index --no-skip-worktree local.properties && git checkout local.properties && git checkout $1 && git update-index --skip-worktree local.properties && sed -i '' 's/.*sdk.dir.*/sdk.dir=\\/Users\\/run\\/Library\\/Android\\/sdk/g' local.properties && :

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