গিট chmod সমস্যা: চেকআউট স্ক্রু এক্সিকিউট বিট


10

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

$ ls -l file
-rw-r--r-- ... file

# on branch master:
$ git commit -m 'mode is 644' file
[master 0123456] mode is 644
 1 files changed, 1 insertions(+), 1 deletions(-)
# All ok

$ git checkout dev-branch
Switched to branch 'dev-branch'
# Seemingly all ok, but file now has the exec bit set

$ git merge master
Updating 6543210..0123456
error: Your local changes to 'file' would be overwritten by merge.  Aborting.
Please, commit your changes or stash them before you can merge.
# Oops...

$ ls -l file
-rwxr-xr-x ... file

কারও কি ধারণা আছে, কখন এবং কেন ফাঁসির বিট পিছলে? core.filemodeসেট করা আছে true

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

সংযোজন 1: এটি চেকআউট, যেখানে অনুমতিগুলি স্ক্রু করা হয়। আমি খেলাটি চালিয়ে যেতে পারি:

$ git br
* master
  dev-branch

$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755

$ chmod 644 file

$ git diff

$ git checkout dev-branch

$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755

$ chmod 644 file

$ git diff

$ git checkout master

$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755

# ...and so on ad inf.

সংযোজন 2: যাইহোক, এই প্রতিলিপিগুলির প্রতিটি ফাইলের জন্য, আমি প্রতিশ্রুতিবদ্ধ এটি ঘটবে। সফল অঙ্গীকারের পরে আমি অনুমতি স্ক্রু-আপ ছাড়াই শাখাগুলি স্যুইচ করতে পারি না।


আপনি কি # সন্ধানকারী সমস্ত ঠিক ধাপে অনুমতিগুলি পরীক্ষা করেছেন ...
রোবটহুমানস

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

@ aking1012: হ্যাঁ, ইতিমধ্যে ফাইলের মোডগুলি ইতিমধ্যে পরিবর্তিত হয়েছে। আমি প্রশ্ন আপডেট করব।
বোল্ডউইন

@ ইউরিআইমাস্টার: কোনোটাই git-logআউটপুট দেখায় না master, dev-branchবা না মিলিয়ে HEAD( বা যা আশ্চর্যজনক, তাই না? কমান্ডটি কি শেষ প্রতিশ্রুতি বার্তাটি প্রিন্ট করা উচিত নয় master?)
বোলডউইন

2
আপনি কোন ফাইল সিস্টেম চালু করছেন?
বিটমাস্ক

উত্তর:


12

গিট ব্যবহারকারী নয়, তবে আমি বিশ্বাস করি যে গিট পুরো ফাইল অনুমতি মুখোশ সংরক্ষণ করে।

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

গিট এ জাতীয় পরিবর্তনগুলি উপেক্ষা করতে, ব্যবহার করুন

git config core.filemode false

থেকে Git-কনফিগ (1) :

   core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

1
আসলে, আমি সঠিক অনুমতি দিয়ে ফাইলগুলি প্রতিশ্রুতিবদ্ধ করার জন্য কঠোর চেষ্টা করি। এমনকি আমি সমস্ত ফাইলগুলি chmod'ing করার পরে আবার প্রতিশ্রুতিবদ্ধ। যেহেতু আমি সময়ে সময়ে উইন্ডোজটিতে কাজ করি (যদিও এই রেপোর সাথে নয়) core.fileModeতবে আমি এটি সম্পর্কে জানি তবে আমি আশা করি এটি ছেড়ে দিতে সক্ষম হব true
বোল্ডউইন

এমনকি তারা "ভাঙা ফাইল সিস্টেম" নামে কাজ করে এমন সময়ে গিটে একটি বাগও হতে পারে। কোনও ভাঙা ফাইল সিস্টেম নেই, কেবল ভাঙা সফ্টওয়্যার।
harrymc


3
ঠিক আছে, এটি ফাইল সিস্টেম ছিল। আমি অন্য মেশিনে এটি পুনরুত্পাদন করতে পারিনি, যেখানে ডিরেক্টরিটি এনএফএসের মাধ্যমে মাউন্ট করা হয়েছে। মূল মেশিনে এটি যেমনটি আমি বলেছিলাম, সিআইএফএস। আমি যখন গিট মেলিংয়ের তালিকায় জিজ্ঞাসা করেছি, আমি উত্তর পেয়েছি যে সিআইএফএস কার্যকর করা বিটের বিষয়ে ভেঙে গেছে। অভিশাপ!
বোল্ডউইন

2
@ ডলম্যান: কমেন্টস. gmane.org/gmane.comp.version-control.git/160861 :-)
বোলডউইন

3

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

হুকগুলি মূলত কিছু ইভেন্টে (কমিট, চেকআউট ইত্যাদি) গিট দ্বারা কল করা ছোট প্রোগ্রাম programs


ভাল চেষ্টা করুন, তবে আমার .git/hooksডিরেক্টরিটি অনুচ্চারিত।
বোল্ডউইন

1

আপনি কি শাখা দেব-শাখায় গিট কমিট-এম 'মোড ইজ 644' ফাইলটি চেষ্টা করেছেন?

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


1
আসলে, আমি কখনই মূল দৃশ্যে অনুমতিগুলি স্পর্শ করি না। সমস্ত অনুমতি পরিবর্তন 'চেকআউট' পদক্ষেপে গিট দ্বারা সম্পন্ন হয়।
বোল্ডউইন

... এটি হ'ল আমি chmodএকবার ফাইলগুলিতে কিছু আইএনজি করেছি, তবে দুর্ভাগ্যক্রমে মনে করতে পারি না, যদি সমস্যাটি ঠিক তখন থেকেই শুরু হয়। আমার মনে হয়, তা হয়নি।
বোল্ডউইন

আমি আপনার সমস্যার প্রতিলিপি দেওয়ার চেষ্টা করেছি এবং আমি তা করতে পারি না
রোবটহম্যানস

কারণ আপনি মাউন্ট করা সিআইএফএস ;-) এ কাজ করেন না। চেষ্টা করার জন্য আমি +1 ভুলে গেছি, ধন্যবাদ!
বোল্ডউইন

1

এই লিঙ্কগুলিতে ভাল উত্তর আছে।

/programming/9027584/how-to-change-the-file-mode-on-github

এবং

/programming/1611211/how-do-i-make-git-accept-mode-changes-without-accepting-all-text-changes

মূলত আপনার প্রয়োজন git update-index --chmod=(+|-)x <file>এবং এটি এমন একটি পরিবর্তন যুক্ত করবে যা আপনাকে এরপরে অনুমতিগুলি যুক্ত / অপসারণের জন্য প্রতিশ্রুতিবদ্ধ এবং ধাক্কা দেওয়ার দরকার।

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