গিটে অযাচিত পরিবর্তন থেকে "ওল্ড মোড 100755 নতুন মোড 100644" বলে ফাইলগুলি কীভাবে সরিয়ে ফেলব?


723

কোনও কারণে, যখন আমি প্রথমদিকে আমার গিট প্রকল্পের জন্য সংগ্রহস্থল থেকে টান দিয়েছিলাম, আমার কার্যকরী কপির মধ্যে আমি এমন একটি টন ফাইল পেয়েছি যার মধ্যে কোনও স্পষ্ট পরিবর্তনযোগ্য পরিবর্তন নেই, তবে আমার unstaged changesঅঞ্চলে প্রদর্শন করে চলেছি ।

আমি উইন্ডোজ এক্সপি-তে গিট গুই ব্যবহার করছি এবং আমি যখন ফাইলটি দেখতে যাই তখন কী পরিবর্তন হয়েছে তা দেখতে। আমি যা দেখছি তা হ'ল:

old mode 100755  
new mode 100644  

এর অর্থ কী কেউ জানে?

আমি কীভাবে এই ফাইলগুলিকে আমার স্টেস্ট না করা পরিবর্তনগুলির তালিকা থেকে বের করতে পারি? (আমি সম্প্রতি সম্পাদিত ফাইলগুলি বাছাই করতে কেবল ফাইলগুলি বেছে নেওয়ার জন্য 100 টি ফাইলের মধ্যে দিয়ে যেতে খুব বিরক্তিকর)।

উত্তর:


1283

এটি আমার কাছে ইউনিক্স ফাইল অনুমতি মোডের মতো দেখাচ্ছে ( 755= rwxr-xr-x, 644= rw-r--r--) - পুরানো মোডে + x (এক্সিকিউটেবল) পতাকাটি অন্তর্ভুক্ত করেছে, নতুন মোডটি তা করে না।

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

git config core.filemode false

132
+1 টি। এর অর্থ এই যে গিটটি মনে করে যে এটি চেক আউট করা ফাইলগুলিতে এক্সিকিউটেবল বিটটি সঠিকভাবে সেট করতে পারে, কিন্তু যখন এটি করার চেষ্টা করে তখন এটি কাজ করে না (বা কমপক্ষে কোনওভাবে এটি পড়তে পারে না)। এরপরে যখন এই ফাইলগুলির স্থিতি ফিরে আসে তখন মনে হয় এক্সিকিউটেবল বিটটি ইচ্ছাকৃতভাবে আনসেট করা হয়নি। কোর.ফলেমোডকে মিথ্যা হিসাবে সেট করা গিটকে ফাইল সিস্টেমে কোনও এক্সিকিউটেবল বিট পরিবর্তন উপেক্ষা করার জন্য বলে দেয় যাতে এটি এটিকে কোনও পরিবর্তন হিসাবে দেখবে না। যদি আপনাকে এক্সিকিউটেবল বিট চেঞ্জ করার দরকার হয় তবে এর অর্থ হ'ল আপনাকে ম্যানুয়ালি করতে হবে git update-index --chmod=(+|-)x <path>
সিবি বেইলি

7
যদি আমার মতো, মোডের পরিবর্তনগুলি গুরুত্বপূর্ণ, আপনি কোর.ফলেমোডকে মিথ্যা হিসাবে সেট করতে পারেন, আপনার আসল কোড পরিবর্তন করতে পারেন, এবং তারপরে কোর.ফিলমোডকে সত্যে সেট করতে পারেন এবং গিট ফাইলের পরিবর্তনগুলি সংরক্ষণ করবে।
মাইকেল টি। স্মিথ

8
আমারও একই সমস্যা, তবে এটি এসএসএইচ গিট সিএমডি লাইনের মাধ্যমে এবং উইন্ডোজের ম্যাপযুক্ত ড্রাইভে গিট এক্সটেনশনের মাধ্যমে একই গিট রেপ্রো ব্যবহার করার কারণে হয়েছিল! । । সমাধানটি একই ছিল, "কনফিগারেশন" [মূল] ফাইলমোড = মিথ্যে যুক্ত হয়েছে
ইয়ান

2
সে জীবন রক্ষাকারী ছিল, ধন্যবাদ স্যার! ওএসএক্সে আমার সাথে এটি ঘটেছিল, আমি যখন পাবলিক ফোল্ডারে ক্লোন করা ভাণ্ডার ভাগ করে নিয়েছি এবং ফাইলগুলির অনুমতি পরিবর্তন করেছি।
থিয়াগো গঞ্জারোল্লি

8
@robsch আপনি git config --global ...আপনার বৈশ্বিক কনফিগারেশন ফাইলটিতে বিকল্প সেট করতে ব্যবহার করতে পারেন ।
অ্যাম্বার

97

core.filemodeমিথ্যাতে সেট করা কাজ করে, তবে নিশ্চিত হয়ে নিন যে সেটিংসটি ~/.gitconfigসেগুলির দ্বারা ওভাররাইড হচ্ছে না .git/config


3
ওখানে এসেছি। দুঃখের সাথে আমি নিজেই সমস্যাটি সমাধান করার পরে আপনার মন্তব্যটি পেয়েছি। তবুও, +1!
ডেভিড স্মিট

1
অন্য ব্যবহারকারীরা যদি এই প্রকল্পটি ক্লোনিং করে থাকেন তবে উইন্ডোজটিতে, ~/.gitconfigফাইলটিতে পরিবর্তনটি প্রয়োগ করা ভাল might
ইয়ান ভন

আপনি যদি উইন্ডোজ পাওয়ারশেল পরীক্ষা করতে চান। git config --list --show-origin | sls filemodeঅথবা লিনাক্সে git config --list --show-origin | grep filemode। এটি আপনাকে দেখাবে যে আপনার কোথায় সমন্বয় করতে হবে।
ফ্রাঙ্ক ফু

আপনি এটি পেরেক !! সাবাশ.
কিম

27

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

sudo chmod -R -x . # remove the executable bit from all files

পূর্ববর্তী কমান্ডটি গিট ডিফের প্রতিবেদনিত পার্থক্যগুলিকে প্রকৃতপক্ষে সমাধান করবে, তবে ডিরেক্টরিগুলি তালিকাভুক্ত করার আপনার ক্ষমতাটি বাতিল করবে, যাতে ls ./ব্যর্থ হয় ls: .: Permission denied। এটি ঠিক করতে:

sudo chmod -R +X . # add the executable bit only for directories

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

chmod +x ./build.sh # where build.sh is the file you want to make executable again

2
ধন্যবাদ, আমাকে অনেক সাহায্য করেছে! এটিতে git config core.filemodeসেট করা আছে কিনা তাও পরীক্ষা করা উচিত true, অন্যথায় অনুমতি পরিবর্তনগুলি সনাক্ত করা যায় না। গিট সূচকটি এটিকে নিতে প্রতিটি পরিবর্তনের পরে আমার সতেজ হওয়া দরকার।
প্যাট-এস

আপনি যদি প্রভাবিত নির্ভরতা সম্পর্কে উদ্বিগ্ন হন তবে এই সমাধানটি সবচেয়ে নিরাপদ।
জ্বিন

9

সাধারণত ঘটে যখন উইন্ডো এবং লিনাক্স / ইউনিক্স মেশিনগুলির মধ্যে রেপো ক্লোন করা হয়।

ফাইলমোড পরিবর্তন উপেক্ষা করতে গিটকে বলুন, এখানে বেশ কয়েকটি উপায় রয়েছে:

  1. কেবলমাত্র বর্তমান রেপোর জন্য কনফিগার করুন:

    git config core.filemode false
    
  2. বিশ্বব্যাপী কনফিগার করুন:

    git config --global core.filemode false
    
  3. ~ / .Gitconfig এ যুক্ত করুন:

    [core]
         filemode = false
    

তাদের মধ্যে একটি নির্বাচন করুন।


গ্লোবাল কনফিগারেশন কাজ করে না কারণ (আমার ধারণা) গিট এই অপশনগুলি সত্য হিসাবে সেট করে একটি রেপো তৈরি করে (আমি লিনাক্সে একটি রেপো তৈরি করেছি)
হার্গট

4

দেখে মনে হচ্ছে আপনি ডিরেক্টরিটির কিছু অনুমতি পরিবর্তন করেছেন। আমি এটি পুনরুদ্ধার করতে নিম্নলিখিত পদক্ষেপগুলি করেছি।

$  git diff > backup-diff.txt                ### in case you have some other code changes 

$  git checkout .

3

প্রত্যাশিত ডিফল্ট অবস্থায় রেপোটিকে পুনরায় সেট করতে আপনি গিট পুনরায় সেট করার চেষ্টা করতে পারেন - হেড হেড AD


8
যদি গিট একটি টানার পরে এক্সিকিউটেবল বিটটি সঠিকভাবে / ধারাবাহিকভাবে সেট করতে সক্ষম না হয়, তবে এটি পুনরায় সেট করার পরে আর ভাল হতে পারে না।
সিবি বেইলি

2
আমি কিছু প্রকল্পগুলি একটি ইউএসবি ড্রাইভ (ফ্যাট 32) এ স্থানান্তরিত করে আবার আমার উবুন্টু মেশিনে (এক্সট 4) ফিরিয়েছিলাম এবং পরিবর্তিত ফাইলগুলির গুচ্ছ দিয়ে শেষ করেছি, ভাল, বৈশিষ্ট্যগুলি। git reset --hard HEADআমার জন্য পুরোপুরি কাজ। ধন্যবাদ
cirovladimir

7
-1। ওপিতে বলা হয়েছে "আমি সম্প্রতি সম্পাদিত ফাইলগুলি নির্বাচন করতে এবং প্রতিশ্রুতিবদ্ধ করতে চাই" states এটি সেই সম্পাদনাগুলিও সরিয়ে ফেলবে।
হোয়াইটফিন

9
এই কমান্ডটি গিটের সাথে পরামর্শ দেওয়ার সাথে "আপনি কেবল আরএম -আরএফ ./ করতে পারেন, আমি নিশ্চিত যে এর কোনও অনিচ্ছাকৃত পরিণতি হবে না" বলে আমি নিশ্চিত।
কেজকাই

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

2

আমি একই সমস্যার মুখোমুখি হয়েছি। এবং এটি আমার জীবন বাঁচায়: https://gist.github.com/jtdp/5443498

git diff -p -R --no-color \
| grep -E "^(diff|(old|new) mode)" --color=never  \
| git apply`

1

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

chmod +x <yourfile> //For one file
chmod +x folder/* // For files in a folder

আপনার যা করার দরকার হতে পারে:

chmod -x <file> // Removes execute bit

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


1

আপনার ফাইল মোডটি ফিরে পরিবর্তন করতে আপনি নীচের কমান্ডটি ব্যবহার করতে পারেন। git add --chmod=+x -- filename তারপরে শাখায় প্রতিশ্রুতিবদ্ধ।


0

পরিবর্তিত অনুমতি সহ আমার কাছে একটি সমস্যাযুক্ত ফাইল ছিল। এটিকে পৃথকভাবে রোল করতে, আমি এটির সাহায্যে ম্যানুয়ালি মুছে ফেলেছিলাম rm <file>এবং তারপরে একটি নতুন কপি টানতে একটি চেকআউট করেছি।

ভাগ্যক্রমে আমি এখনও এটি মঞ্চ না।

আমি থাকলে দৌড়ানোর git reset -- <file>আগে দৌড়াতে পারতামgit checkout -- <file>


0

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

প্রথম আমি ডিফ চালিয়েছি:

git checkout my-branch
git diff master

এটি ফিরে এসেছে:

diff --git a/bin/script.sh b/bin/script.sh
old mode 100755
new mode 100644

আমি তখন নীচের অংশটি ঠিক করেছিলাম:

rm bin/script.sh
git merge -X theirs master

এর পরে, git diffআমার-শাখা এবং মাস্টার মধ্যে কোনও পার্থক্য ফিরিয়ে দেয় না।

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