গিট দিয়ে ডিরেক্টরি পরিবর্তন পর্যবেক্ষণ করা এবং Lume বিল্ড করা

নমস্কার, আমি অযোগ্য।
কিছুদিন আগে
inotifywait ব্যবহার করে স্ট্যাটিক সাইট SSG LumeCMS-এ পরিবর্তন হলে শুধুমাত্র রি-বিল্ড করা
আমি এটি স্বয়ংক্রিয়ভাবে বিল্ড করার জন্য সেট করেছিলাম, কিন্তু এটি vim সোয়াপ ফাইল তৈরি হলে বা প্রক্রিয়াটি মারা গেলে বা অপ্রয়োজনীয় বিল্ড চললে এটি খুব স্থিতিশীল ছিল না, তাই আমি ভেবেছিলাম, 'যদি আমি এটি git দিয়ে পরিচালনা করি, তাহলে পরিবর্তন হলে বিল্ড ফ্লো চালানো যাবে এবং কিছু ঘটলে ফিরে আসা যাবে, যা ভালো হবে।' এবং কিছু শেল স্ক্রিপ্ট লেখার ধারণা আমার মাথায় এসেছিল, তাই আমি এটি চেষ্টা করেছি।
এইরকম কিছু
শুরু থেকেই সম্পূর্ণ কোড
এটি গিটহাবেও প্রকাশিত হয়েছে।
#!/bin/bash
LUME_DIR="/your/lume/dir"
SRC_DIR="$LUME_DIR/src"
BUILD_DIR="site"
WEBPSH="/your/webp/convert/path"
COMMIT_COMMENT="`echo "Memory" && free -h | head -2 | awk '{print $(NF-5)"," $(NF-4)"," $(NF-3)}' | column -t -s ","`"
export DENO_INSTALL="/home/$USER/.deno"
export PATH="$DENO_INSTALL/bin:$PATH"
cd "$SRC_DIR" || exit
ls "$SRC_DIR/.git" || git init || exit
git add . || exit
git commit -m "$COMMIT_COMMENT"
if [ $? -eq 0 ]; then
$WEBPSH
cd $LUME_DIR || exit
# deno task lume --dest=$BUILD_DIR
deno task lume --dest=$BUILD_DIR > /dev/null 2>&1
else
exit 1
fi
যাইহোক, আমি যতটা সম্ভব সংক্ষিপ্ত কোড দিয়ে এটি বাস্তবায়ন করতে চেয়েছিলাম, তাই এটি এমন হয়েছে।
ঠিক আছে, COMMIT_COMMENT কিছুটা বিশৃঙ্খল, তবে এটি কেবল মজার জন্য...
প্রথমে আমি date দিয়ে সময় রেকর্ড করতাম, কিন্তু এখন git log দিয়ে এটি পরীক্ষা করা যায়, তাই এটি আর প্রয়োজন নেই, তাই না?
(হয়তো এখন কিছু র্যান্ডম AA যোগ করা যেতে পারে...)
উপরের স্ক্রিপ্টটি প্রতি 5 মিনিটে cron দ্বারা চালানো হয়।
আসুন গিট রিটার্ন ভ্যালু দেখি
যাইহোক, মনে হচ্ছে git add . করার সময় গিটের রিটার্ন ভ্যালু পরিবর্তন সনাক্ত করতে পারে না, উদাহরণস্বরূপ, যখন git init করা হয়নি তখন রিটার্ন ভ্যালু।
alleycat:[haturatu]:~/git/gittest$ ls -la
মোট 8
drwxr-xr-x 2 haturatu haturatu 4096 10月 14 01:08 .
drwxr-xr-x 72 haturatu haturatu 4096 10月 14 01:08 ..
alleycat:[haturatu]:~/git/gittest$ git add .
fatal: not a git repository (or any of the parent directories): .git
alleycat:[haturatu]:~/git/gittest$ echo $?
128
এটি 128।
তাহলে, git init করার পরে একটি ফাইল তৈরি বা মুছে ফেলি।
alleycat:[haturatu]:~/git/gittest$ ls -la
মোট 12
drwxr-xr-x 3 haturatu haturatu 4096 10月 14 01:11 .
drwxr-xr-x 72 haturatu haturatu 4096 10月 14 01:08 ..
drwxr-xr-x 7 haturatu haturatu 4096 10月 14 01:11 .git
alleycat:[haturatu]:~/git/gittest$ git add .
alleycat:[haturatu]:~/git/gittest$ echo $?
0
alleycat:[haturatu]:~/git/gittest$ touch test
alleycat:[haturatu]:~/git/gittest$ ls -la
মোট 12
drwxr-xr-x 3 haturatu haturatu 4096 10月 14 01:11 .
drwxr-xr-x 72 haturatu haturatu 4096 10月 14 01:08 ..
drwxr-xr-x 7 haturatu haturatu 4096 10月 14 01:11 .git
-rw-r--r-- 1 haturatu haturatu 0 10月 14 01:11 test
alleycat:[haturatu]:~/git/gittest$ git add .
alleycat:[haturatu]:~/git/gittest$ echo $?
0
সুতরাং, git add . এর সাথে রিটার্ন ভ্যালু পরিবর্তন হয় না, তাই পরিবর্তন সনাক্ত করা যায় না।
তাহলে, আসুন commit করার সময় রিটার্ন ভ্যালু দেখি।
alleycat:[haturatu]:~/git/gittest$ ls -la
মোট 12
drwxr-xr-x 3 haturatu haturatu 4096 10月 14 01:11 .
drwxr-xr-x 72 haturatu haturatu 4096 10月 14 01:08 ..
drwxr-xr-x 7 haturatu haturatu 4096 10月 14 01:11 .git
-rw-r--r-- 1 haturatu haturatu 0 10月 14 01:11 test
alleycat:[haturatu]:~/git/gittest$ git commit -m "nyaa"
[master (root-commit) 60bed93] nyaa
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test
alleycat:[haturatu]:~/git/gittest$ echo $?
0
alleycat:[haturatu]:~/git/gittest$ git commit -m "nyan nyan"
On branch master
nothing to commit, working tree clean
alleycat:[haturatu]:~/git/gittest$ echo $?
1
মনে হচ্ছে কোনো পরিবর্তন না থাকলে 1 ফেরত আসে।
সুতরাং, এই রিটার্ন ভ্যালু থেকে এটি নির্ধারণ করা যেতে পারে, এবং বাকিটা যেকোনো উপায়ে করা যেতে পারে।
পরিবর্তন পর্যবেক্ষণ যা বেশ গভীর হতে পারে
সুতরাং, মনে হচ্ছে এই পদ্ধতিটি অন্যান্য পরিবর্তন ব্যবস্থাপনার জন্যও ব্যবহার করা যেতে পারে।
তবে আমি যা অন্বেষণ করছি তা হল আরও সহজে, হালকাভাবে এবং পুনরাবৃত্তিমূলকভাবে ডিরেক্টরি পরিবর্তনগুলি পর্যবেক্ষণ করা, যা দেখতে সহজ মনে হলেও আসলে তা নয়।
find কমান্ডের ক্ষেত্রে, এটি একটি খুব শক্তিশালী কমান্ড, তাই পরিবর্তন পর্যবেক্ষণের সময় এটি চালানো বেশ বিরক্তিকর হতে পারে (এটি কি গিটের অভ্যন্তরীণ কমান্ড হিসাবেও চলে?)
যদি আপনাকে নিজের পরিবর্তন পর্যবেক্ষণ কোড লিখতে হয়, তবে আপনাকে বাদ দেওয়া ডিরেক্টরিগুলির জন্যও শর্ত যোগ করতে হবে। এই ক্ষেত্রে, গিট দিয়ে পরিবর্তন পর্যবেক্ষণ করলে, আপনি .gitignore এ অপ্রয়োজনীয় ডিরেক্টরিগুলি লিখে কার্যত পরিবর্তন পর্যবেক্ষণ থেকে বাদ দিতে পারেন।
এই দিক থেকেও গিট অত্যন্ত চমৎকার।
তবে, গিটের ক্ষেত্রে ক্যাশে .git এ সংরক্ষণ করা হয়, তাই এটি বড় ফাইলযুক্ত ডিরেক্টরিগুলি পর্যবেক্ষণের জন্য উপযুক্ত নাও হতে পারে।
অতএব, প্রতিটি ফাইলকে হ্যাশ করে /tmp এ একটি টেক্সট ফাইল হিসাবে সংরক্ষণ করা, পার্থক্য নেওয়া এবং যদি একটি পার্থক্য সহ একটি রিটার্ন ভ্যালু ফিরে আসে, তবে পরিবর্তনের ফ্লোতে পাঠানো যেতে পারে।
এরকম কিছু করা যেতে পারে।
তবে, ফাইল বাদ দেওয়ার জন্য কোড যোগ করা, diff করার আগে সাজানো ইত্যাদি করলে এটি বেশ জটিল হয়ে উঠবে, তাই আমি এটি করতে চাই না।
লিখতে গিয়ে মনে হলো...
find না চালিয়েও, আপনি কেবল ls -laR কে /tmp এ আউটপুট করে পার্থক্য নিতে পারেন।
কিন্তু কেন গিটকে হালকা মনে হয়...? যদি এমন হয়, তাহলে মনে হয় আমাকে গিটকে বিচ্ছিন্ন করা শুরু করতে হবে, তাই আজকের জন্য এটুকুই।
তাহলে আবার দেখা হবে, ধন্যবাদ।