আমি উত্তরসূচক-ভল্ট কমান্ডের মাধ্যমে সিক্রেটযুক্ত ফাইলগুলির স্বয়ংক্রিয় এনক্রিপ্টিং এবং ডিক্রিপ্টিং পেতে গিটের মধ্যে পরিষ্কার / স্মুড ফিল্টার সেটআপ করার চেষ্টা করছি ।
জবাবদিহি-কমান্ড কমান্ডের বিশেষত্ব হ'ল এটি আদর্শবান নয় (প্রতিবার একই ডাটাতে ডাকা হলে এটি একটি আলাদা বাইনারি তৈরি করে)।
আমি এই ব্লগ পৃষ্ঠায় প্রস্তাবিত বাস্তবায়ন দিয়ে শুরু করেছি । দুর্ভাগ্যক্রমে এটি সঠিকভাবে কাজ করে না, যখনই স্মুড নামে ডাকা হয় (এটি গিট চেকআউট, বা কেবল গিট স্ট্যাটাস), গোপন ফাইলগুলি গিটের জন্য পরিবর্তিত হিসাবে দেখায়, তা না হলেও।
সুতরাং আমি ভাবলাম যে গিটটি সূচকটিতে তার যে বাইনারি রয়েছে তা পরিষ্কার ফিল্টার করা বর্তমান ফাইলের সাথে তুলনা করবে, এবং আমি এই স্ক্রিপ্টটি নীচের মতো তৈরি করার চেষ্টা করেছি:
#!/bin/sh -x
# clean filter, it is invoked with %f
if [ ! -r "$HOME/.vault_password" ]; then
exit 1
fi
tmp=`mktemp`
cat > $tmp
# get the plain text from the binary in the index
tmphead=`mktemp`
git show HEAD:$1 > $tmphead
contenthead=`echo "embedded" | ansible-vault view $tmphead --vault-password-file=$HOME/.vault_password`
export PAGER=cat
echo -n "$contenthead" | tee $tmphead
# if current and index plain text version differ
if [ "`md5sum $tmp | cut -d' ' -f1`" != "`md5sum $tmphead | cut -d' ' -f1`" ]; then
tmpcrypt=`mktemp`
cp $tmp $tmpcrypt
# generate a new crypted blob
echo "embedded" | ansible-vault encrypt $tmpcrypt --vault-password-file=$HOME/.vault_password > /dev/null 2>&1
cat "$tmpcrypt"
else
# just return the HEAD version
cat "$tmphead"
fi
rm $tmp $tmphead $tmpcrypt
এখানে পার্থক্যটি হ'ল এটি সরল পাঠের (এনক্রিপ্ট করা না হওয়া) গোপন ফাইলগুলির বর্তমান এবং প্রধান সংস্করণগুলির তুলনা করার চেষ্টা করে এবং কেবলমাত্র যদি তারা আউটপুট থেকে পৃথক হয় তবে উত্তরীয়-ভল্টের সাথে এনক্রিপ্ট করা একটি নতুন বাইনারি ব্লব রয়েছে।
দুর্ভাগ্যক্রমে, এই পরিবর্তনের পরে গিটটি ভাবতে থাকে যে গোপন ফাইলটি সর্বদা সংশোধিত হয়। এমনকি git add
ফাইলটি আবার ইনগ্রেট করার পরেও যাতে গিট ব্লবটি গণনা করা যায়, গিট ফাইলটি আলাদা বলে মনে করে এবং পরিবর্তনটি কমিটের মধ্যে যেতে দেয়। মনে রাখবেন git diff
খালি পরিবর্তনগুলি যেমনটি হওয়া উচিত তেমন ফিরিয়ে দিন।
রেফারেন্সের জন্য, এটি ধাক্কা:
#!/bin/sh
if [ ! -r "$HOME/.vault_password" ]; then
exit 1
fi
tmp=`mktemp`
cat > $tmp
export PAGER='cat'
CONTENT="`echo "embedded" | ansible-vault view "$tmp" --vault-password-file=$HOME/.vault_password 2> /dev/null`"
if echo "$CONTENT" | grep 'ERROR: data is not encrypted' > /dev/null; then
echo "Looks like one file was commited clear text"
echo "Please fix this before continuing !"
exit 1
else
echo -n "$CONTENT"
fi
rm $tmp
এবং এটি পৃথক:
#!/bin/sh
if [ ! -r "$HOME/.vault_password" ]; then
exit 1
fi
export PAGER='cat'
CONTENT=`echo "embedded" | ansible-vault view "$1" --vault-password-file=$HOME/.vault_password 2> /dev/null`
if echo "$CONTENT" | grep 'ERROR: data is not encrypted' > /dev/null; then
cat "$1"
else
echo "$CONTENT"
fi
-n
স্মাগ ইকো থেকে মুছে ফেলার চেষ্টা করব , তবে এটি অনুমান। গিট ডিফের জন্য কোনও একক বিকল্প নেই যা এটি একক লাইনের সমাপ্তি উপেক্ষা করতে বলছে?