উবুন্টু এবং ডেবিয়ানের অধীনে সর্বশেষ প্রতিশ্রুতিবদ্ধ ফাইলগুলি যখন আমি পরে একটি চেকআউট চেষ্টা করি তখন এক্সিকিউশন বিট সেট পাচ্ছে। এটি বেশ আশ্চর্যজনক এবং আমাকে বাদাম চালাচ্ছে:
$ 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: যাইহোক, এই প্রতিলিপিগুলির প্রতিটি ফাইলের জন্য, আমি প্রতিশ্রুতিবদ্ধ এটি ঘটবে। সফল অঙ্গীকারের পরে আমি অনুমতি স্ক্রু-আপ ছাড়াই শাখাগুলি স্যুইচ করতে পারি না।
git-log
আউটপুট দেখায় না master
, dev-branch
বা না মিলিয়ে HEAD
( বা যা আশ্চর্যজনক, তাই না? কমান্ডটি কি শেষ প্রতিশ্রুতি বার্তাটি প্রিন্ট করা উচিত নয় master
?)