আপনি যদি এই মুহুর্তে আসছেন তবে আমি আজই এটি পেরিয়েছি এবং সংক্ষিপ্তসারটি বলতে পারি যেখানে এটি দাঁড়িয়ে। আপনি যদি এখনও এটি চেষ্টা না করেন তবে এখানে কিছু বিশদ সহায়তা করতে পারে।
আমি মনে করি @ ওমিদ আরিয়ান এর পদ্ধতির সেরা উপায়। প্রাক কমিট এবং পোস্ট-চেকআউট স্ক্রিপ্টগুলি যুক্ত করুন। ওমিড যেভাবে তাদের নাম ঠিক রাখবেন তা ভুলে যাবেন না এবং এগুলি কার্যকর করতে ভুলে যাবেন না। আপনি যদি সেগুলির মধ্যে কোনওটি ভুলে যান তবে সেগুলির কোনও প্রভাব নেই এবং আপনি কেন কিছু ঘটছেন না তা ভেবে বার বার "গিট কমিট" চালান :) এছাড়াও, আপনি যদি ওয়েব ব্রাউজারটি কেটে পেস্ট করে ফেলে থাকেন তবে সতর্কতা অবলম্বন করুন যে উদ্ধৃতি চিহ্ন এবং টিকগুলি না রয়েছে বদলে দিয়েছিলেন।
আপনি যদি একবার প্রি-কমিট স্ক্রিপ্টটি চালান (গিট কমিট চালিয়ে) তবে ফাইলটি .perifications তৈরি হবে। আপনি এটিকে সংগ্রহস্থলে যুক্ত করতে পারেন এবং আমি মনে করি প্রাক-কমিট স্ক্রিপ্টের শেষে এটি বারবার যুক্ত করা অপ্রয়োজনীয়। তবে এটি ক্ষতি করে না, আমি মনে করি (আশা করি)।
ওমিডের স্ক্রিপ্টগুলিতে ফাইলের নামের ডিরেক্টরি নাম এবং স্পেসগুলির অস্তিত্ব সম্পর্কে কয়েকটি সামান্য সমস্যা রয়েছে। স্পেসগুলি এখানে সমস্যা ছিল এবং আইএফএস ফিক্স নিয়ে আমার কিছুটা সমস্যা হয়েছিল। রেকর্ডের জন্য, এই প্রাক কমিট স্ক্রিপ্টটি আমার পক্ষে সঠিকভাবে কাজ করেছে:
#!/bin/bash
SELF_DIR=`git rev-parse --show-toplevel`
DATABASE=$SELF_DIR/.permissions
# Clear the permissions database file
> $DATABASE
echo -n "Backing-up file permissions..."
IFSold=$IFS
IFS=$'\n'
for FILE in `git ls-files`
do
# Save the permissions of all the files in the index
echo $FILE";"`stat -c "%a;%U;%G" $FILE` >> $DATABASE
done
IFS=${IFSold}
# Add the permissions database file to the index
git add $DATABASE
echo "OK"
এখন, আমরা এ থেকে কি পেতে পারি?
.Perifications ফাইলটি গিট রেপুর শীর্ষ স্তরে রয়েছে। প্রতি ফাইলটিতে এটির একটি লাইন রয়েছে, এখানে আমার উদাহরণের শীর্ষস্থানীয়:
$ cat .permissions
.gitignore;660;pauljohn;pauljohn
05.WhatToReport/05.WhatToReport.doc;664;pauljohn;pauljohn
05.WhatToReport/05.WhatToReport.pdf;664;pauljohn;pauljohn
আপনি দেখতে পারেন, আমাদের আছে
filepath;perms;owner;group
এই পদ্ধতির সম্পর্কে মন্তব্যগুলিতে, একটি পোস্টার অভিযোগ করেছেন যে এটি কেবল একই ব্যবহারকারীর সাথে কাজ করে এবং এটি প্রযুক্তিগতভাবে সত্য তবে এটি ঠিক করা খুব সহজ। নোট করুন চেকআউট পোস্টের স্ক্রিপ্টটিতে 2 টি অ্যাকশন টুকরা রয়েছে,
# Set the file permissions
chmod $PERMISSIONS $FILE
# Set the file owner and groups
chown $USER:$GROUP $FILE
সুতরাং আমি কেবল প্রথমটি রাখছি, এটাই আমার প্রয়োজন। ওয়েব সার্ভারে আমার ব্যবহারকারীর নাম প্রকৃতপক্ষে পৃথক, তবে আরও গুরুত্বপূর্ণ আপনি রুট না হলে আপনি ডাকা চালাতে পারবেন না। তবে "chgrp" চালাতে পারেন। এটি কীভাবে ব্যবহার করতে হয় তা যথেষ্ট সহজ is
এই পোস্টের প্রথম উত্তরে, যেটি বহুলভাবে গ্রহণযোগ্য, সেই পরামর্শটি তাই গিট-ক্যাশে-মেটা ব্যবহার করুন, একটি স্ক্রিপ্ট যা একই কাজ করছে যা এখানে প্রাক / পোস্ট হুক স্ক্রিপ্টগুলি করছে (আউটপুট পার্সিং থেকে git ls-files
) । এই স্ক্রিপ্টগুলি আমার পক্ষে বুঝতে সহজ, গিট-ক্যাশে-মেটা কোডটি বরং আরও বিস্তৃত। গিট-ক্যাশে-মেটা পথে রাখা সম্ভব এবং প্রাক-কমিট এবং পোস্ট-চেকআউট স্ক্রিপ্টগুলি এটি ব্যবহার করবে তা লিখতে পারে।
ফাইলের নামের ফাঁকা জায়গাগুলি ওমিডের দুটি স্ক্রিপ্টই সমস্যা। পোস্ট-চেকআউট স্ক্রিপ্টে, আপনি যদি জানাতে চান যে ফাইলের নামের মধ্যে ফাঁকা স্থান রয়েছে
$ git checkout -- upload.sh
Restoring file permissions...chmod: cannot access '04.StartingValuesInLISREL/Open': No such file or directory
chmod: cannot access 'Notebook.onetoc2': No such file or directory
chown: cannot access '04.StartingValuesInLISREL/Open': No such file or directory
chown: cannot access 'Notebook.onetoc2': No such file or directory
আমি তার জন্য সমাধানগুলি পরীক্ষা করছি এখানে এমন কিছু যা কাজ করছে বলে মনে হচ্ছে তবে আমি কেবলমাত্র একটি ক্ষেত্রে পরীক্ষা করেছি
#!/bin/bash
SELF_DIR=`git rev-parse --show-toplevel`
DATABASE=$SELF_DIR/.permissions
echo -n "Restoring file permissions..."
IFSold=${IFS}
IFS=$
while read -r LINE || [[ -n "$LINE" ]];
do
FILE=`echo $LINE | cut -d ";" -f 1`
PERMISSIONS=`echo $LINE | cut -d ";" -f 2`
USER=`echo $LINE | cut -d ";" -f 3`
GROUP=`echo $LINE | cut -d ";" -f 4`
# Set the file permissions
chmod $PERMISSIONS $FILE
# Set the file owner and groups
chown $USER:$GROUP $FILE
done < $DATABASE
IFS=${IFSold}
echo "OK"
exit 0
যেহেতু অনুমতিগুলির তথ্যগুলি একবারে একটি লাইন, তাই আমি আইএফএসকে $ এ সেট করেছিলাম, সুতরাং কেবল লাইন ব্রেকগুলিই নতুন জিনিস হিসাবে দেখা যায়।
আমি পড়েছি যে আইএফএস পরিবেশ পরিবর্তনশীলটিকে ঠিক সেভাবে সেট করা খুব গুরুত্বপূর্ণ! আপনি যদি দেখতে পান তবে শেল সেশনটি কেন খারাপভাবে যেতে পারে $ কেবলমাত্র পৃথককারী হিসাবে।