উইন্ডোজে গিতে ফাইল এক্সিকিউট মোড অনুমতিগুলি কীভাবে তৈরি করবেন?


377

আমি উইন্ডোজে গিট ব্যবহার করি এবং একটি কমিট দ্বারা এক্সিকিউটেবল শেল স্ক্রিপ্টটি গিট রেপোতে ঠেলাতে চাই।

সাধারণত আমার দুটি ধাপ করতে হবে ( git commit)।

$ vi install.sh
$ git add install.sh  
$ git commit -am "add new file for installation" # first commit
[master f2e92da] add support for install.sh
 1 files changed, 18 insertions(+), 3 deletions(-)
 create mode 100644 install.sh
$ git update-index --chmod=+x install.sh
$ git commit -am "update file permission"        # second commit
[master 317ba0c] update file permission
  0 files changed
  mode change 100644 => 100755 install.sh

এই দুটি পদক্ষেপকে আমি কীভাবে এক ধাপে একত্রিত করতে পারি? গিট কনফিগারেশন? উইন্ডোজ কমান্ড?

অনুস্মারক : দুটি উত্তর ভাল, git add --chmod=+x fileনতুন গিট সংস্করণে সমর্থিত

তথ্যসূত্র: দ্বিতীয় প্রতিশ্রুতি দেওয়ার জন্য উইন্ডোজে গিট ফাইলের অনুমতিগুলির মধ্যে প্রশ্ন দেখুন


10
গিট 2.9.x / 2.10 (Q3 2016) সহ, git add --chmod=+xআসলে সম্ভব। দেখুন নিচের আমার উত্তর , এর ক্রেডিট এডওয়ার্ড থমসন
ভোনসি

5
git add --chmod=+xসংস্করণে নির্বাচিত উত্তরটি আপডেট করার পক্ষে এটি
হ'ল

উত্তর:


589

দুটি কমিটে এটি করার দরকার নেই, আপনি ফাইলটি যুক্ত করতে এবং এটি একটি একক প্রতিশ্রুতিতে সম্পাদনযোগ্য হিসাবে চিহ্নিত করতে পারেন:

C:\Temp\TestRepo>touch foo.sh

C:\Temp\TestRepo>git add foo.sh

C:\Temp\TestRepo>git ls-files --stage
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

আপনি যেমন নোট করেছেন, যোগ করার পরে, মোডটি 0644 (অর্থাত্ কার্যকর নয়)। তবে আমরা প্রতিশ্রুতি দেওয়ার আগে এটি নির্বাহযোগ্য হিসাবে চিহ্নিত করতে পারি:

C:\Temp\TestRepo>git update-index --chmod=+x foo.sh

C:\Temp\TestRepo>git ls-files --stage
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

এবং এখন ফাইলটি 0755 মোড (এক্সিকিউটেবল)।

C:\Temp\TestRepo>git commit -m"Executable!"
[master (root-commit) 1f7a57a] Executable!
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100755 foo.sh

এবং এখন আমরা একটি একক এক্সিকিউটেবল ফাইল সঙ্গে একক প্রতিশ্রুতি আছে।


147

প্রকৃতপক্ষে, git-addএকটি --modeপতাকা থাকলে এটি দুর্দান্ত হবে

git 2.9.x / 2.10 (Q3 2016) আসলে এটি অনুমতি দেবে ( এডওয়ার্ড থমসনকে ধন্যবাদ ):

git add --chmod=+x -- afile
git commit -m"Executable!"

এটি সমস্ত প্রক্রিয়াটিকে ত্বরান্বিত করে এবং core.filemodeমিথ্যাতে সেট করা সত্ত্বেও কাজ করে ।

দেখুন কমিট 4e55ed3 (31 মে 2016) দ্বারা এডওয়ার্ড থমসন ( ethomson)
সহায়তা করেছেন: জোহানেস শিন্ডেলিন ( dscho)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট c8b080a , 06 জুলাই 2016)

add: অ্যাড --chmod=+x/ --chmod=-xঅপশন

এক্সিকিউটেবল বিট সনাক্ত করা হবে না (এবং সেইজন্য সেট করা হবে না) সঙ্গে একটি সংগ্রহস্থলের মধ্যে পাথ জন্য core.filemodeমিথ্যাতে সেট, যদিও ব্যবহারকারীদের এখনো অন্যান্য ব্যবহারকারী যারা সাথে সামঞ্জস্যের জন্য এক্সিকিউটেবল হিসাবে ফাইল যোগ করতে চাইতে পারেন না আছে core.filemode কার্যকারিতা।
উদাহরণস্বরূপ, উইন্ডোজ ব্যবহারকারীরা শেল স্ক্রিপ্ট যুক্ত করে তাদের উইন্ডোজবিহীন ব্যবহারকারীদের সাথে সামঞ্জস্যের জন্য এক্সিকিউটেবল হিসাবে যুক্ত করতে চান।

যদিও এটি একটি নদীর গভীরতানির্ণয় কমান্ড ( git update-index --add --chmod=+x foo) দিয়ে করা যায়, কমান্ডটি শেখানো git-addব্যবহারকারীদের এমন একটি কমান্ডের সাহায্যে একটি ফাইল নির্বাহ করতে সক্ষম করে যা তারা ইতিমধ্যে পরিচিত


22

যদি ফাইলগুলি ইতিমধ্যে + x পতাকা সেট git update-index --chmod=+xকরে রাখে, কিছুই না করে এবং গিট মনে করে যে প্রতিশ্রুতিবদ্ধ হওয়ার মতো কিছুই নেই, যদিও পতাকাটি রেপোতে সংরক্ষণ করা হচ্ছে না।

আপনাকে প্রথমে পতাকাটি সরিয়ে ফেলতে হবে, গিট কমান্ডটি চালাতে হবে এবং তারপরে পতাকাটি পিছনে রাখতে হবে:

chmod -x <file>
git update-index --chmod=+x <file>
chmod +x <file>

তারপরে গিট পরিবর্তন দেখায় এবং আপনাকে এই পরিবর্তনটি সম্পাদন করতে দেয়।


9

নোটটি প্রথমে আপনাকে অবশ্যই কনফিগার গিট ফাইল filemodeসেট আপ করতে হবে falseবা এই আদেশটি ব্যবহার করতে হবে:

git config core.filemode false

এবং তারপরে আপনি এই আদেশটি দিয়ে 0777 অনুমতি সেট করতে পারেন:

git update-index --chmod=+x foo.sh

3

আমার cmd.exe তে আমার কোনও আদেশ নেই touchএবং chmodআমার git update-index --chmod=+x foo.shপক্ষে কাজ করে না।

আমি অবশেষে skip-worktreeকিছুটা সেট করে সমাধান করেছি :

git update-index --skip-worktree --chmod=+x foo.sh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.