他社の案件に参加することになったのですが、外部からその会社のバージョン管理にアクセスすることができないとのことで、変更したファイルをまとめて送るという方式になりました。
そのためローカルでバージョン管理して、変更のあったファイルをまとめるシェルスクリプトをChatGPTの手を借りて作りました。
#!/bin/bash
# --- 引数チェック ---
if [ -z "$1" ]; then
echo "使い方: $0 <開始コミットID> [終了コミットID(省略時は HEAD)]"
exit 1
fi
START_COMMIT=$1
END_COMMIT=${2:-HEAD} # $2が空ならHEADを使う
DEST_DIR="changed_files"
# 保存先ディレクトリ作成
rm -rf "$DEST_DIR"
mkdir -p "$DEST_DIR"
# --- 変更されたファイル一覧取得 ---
FILES=$(git diff --name-only "$START_COMMIT" "$END_COMMIT")
# --- 各ファイルをコピー ---
for file in $FILES; do
if [ -f "$file" ]; then
mkdir -p "$DEST_DIR/$(dirname "$file")"
cp "$file" "$DEST_DIR/$file"
fi
done
こちらを archive.sh などと名前をつけて .git のあるディレクトリに置きます。それから下記のように実行します。
archive.sh [開始コミットID] [終了コミットID]
実行が終了すると、changed_filesというディレクトリに変更があったファイルが保存されています。
なお、終了コミットIDが指定されなかった場合は、最新のコミットが自動で指定されます。