自宅鯖の/etc
以下にある設定ファイルはetckeeperで管理しているので、Initialから現時点での差分をパッチ化するスクリプト。不完全なところもあると思うけど、概ね役立つ。
#!/bin/bash
patches_dir="/tmp/patches"
if [ -e $patches_dir ]; then
mkdir $patches_dir
fi
cd /etc
initial_commit_id=`git log | grep 'commit [0-9a-f]*' | tail -1 | awk '{print $2}'`
echo $initial_commit_id
for file_path in `find /etc -type d -name '.git' -prune -o -type f`; do
file_type=`file $file_path | awk '{print $2}'`
if [ "$file_type" != "Berkeley" ]; then
echo "Extracting diff of $file_path ..."
initial_commit=`git show $initial_commit_id $file_path`
if [ "$initial_commit" == "" ]; then
first_commit_id=`git log --diff-filter=A -- $file_path | head -1 | awk '{print $2}'`
else
first_commit_id=$initial_commit_id
fi
last_commit_id=`git log $file_path | head -1 | awk '{print $2}'`
echo "Last Commit: "$last_commit_id", First Commit: "$first_commit_id
if [ "$first_commit_id" != "" ] && [ "$last_commit_id" != "" ]; then
gitdiff=`git diff-tree -p $first_commit_id $last_commit_id $file_path`
if [ "$gitdiff" != "" ]; then
dir_path=`dirname $file_path`
mkdir -p $patches_dir$dir_path
echo -e "$gitdiff" > $patches_dir$file_path.patch
fi
fi
fi
done