Git के साथ निर्देशिका परिवर्तनों की निगरानी करें और Lume को बिल्ड करें

नमस्ते, मुनोऊ हूँ।
कुछ समय पहले,
inotifywait का उपयोग करके केवल तभी पुनर्निर्माण करें जब स्थिर साइट SSG LumeCMS में कोई परिवर्तन हो
मैंने इसे स्वचालित रूप से बनाने के लिए सेट किया था, लेकिन यह तब भी चलता था जब vim स्वैप फ़ाइलें बनती थीं, और कभी-कभी प्रक्रियाएं मर जाती थीं, और अनावश्यक बिल्ड चलते थे, जो बहुत स्थिर नहीं था और मुझे परेशान कर रहा था। तो मैंने सोचा, 'अगर मैं इसे git के साथ प्रबंधित करता हूँ, तो मैं परिवर्तनों पर बिल्ड फ़्लो चला सकता हूँ और कुछ भी होने पर वापस जा सकता हूँ, जो अच्छा होगा।' और मेरे दिमाग में कुछ शेल स्क्रिप्ट भी आ रही थीं, इसलिए मैंने इसे आज़माया।
यह ऐसा है
संक्षेप में, कोड शुरू से ही
Github पर भी उपलब्ध है।
#!/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 भी डाल सकता हूँ...)
छवि में दिखाए गए स्क्रिप्ट को cron द्वारा हर 5 मिनट में निष्पादित किया जाता है।
आइए Git के रिटर्न वैल्यू देखें
किसी भी तरह, ऐसा लगता है कि 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 कमांड के मामले में, यह एक बहुत शक्तिशाली कमांड है, इसलिए परिवर्तन निगरानी के दौरान इसे चलाना काफी बोझिल हो सकता है (क्या यह git के आंतरिक कमांड के रूप में भी चलता है?)
यदि आपको अपना स्वयं का परिवर्तन निगरानी कोड लिखना है, तो आपको बहिष्कृत निर्देशिकाओं के लिए भी तर्क शामिल करना होगा। इस संबंध में, git के साथ परिवर्तन निगरानी में, आप उन अनावश्यक निर्देशिकाओं को प्रभावी ढंग से परिवर्तन निगरानी से बाहर कर सकते हैं जिन्हें आप .gitignore में सूचीबद्ध करके निगरानी नहीं करना चाहते हैं।
इस संबंध में भी, git बहुत उत्कृष्ट है।
हालांकि, git के मामले में, यह कैश को .git में रखता है, इसलिए यह बड़ी फ़ाइलों वाली निर्देशिकाओं की निगरानी के लिए उपयुक्त नहीं हो सकता है। इसलिए, प्रत्येक फ़ाइल को हैश करना और उन्हें /tmp में टेक्स्ट फ़ाइलों के रूप में संग्रहीत करना, अंतर लेना, और यदि कोई अंतर के साथ रिटर्न वैल्यू वापस आती है, तो उसे परिवर्तन फ़्लो में भेजना।
ऐसा कुछ किया जा सकता है।
हालांकि, यदि आप फ़ाइलों को बाहर करने के लिए कोड डालते हैं, diff से पहले सॉर्ट करते हैं, आदि, तो यह काफी जटिल हो सकता है, और मैं ऐसा नहीं करना चाहता।
लिखते समय, मैंने सोचा...
find को चलाए बिना, आप बस ls -laR को /tmp पर आउटपुट कर सकते हैं और अंतर ले सकते हैं।
लेकिन मुझे आश्चर्य है कि git हल्का क्यों लगता है...? यदि ऐसा है, तो मुझे लगता है कि मुझे अब Git को तोड़ना शुरू करना होगा, इसलिए आज के लिए बस इतना ही।
फिर मिलेंगे, कृपया ध्यान रखें।