他社の案件に参加することになったのですが、外部からその会社のバージョン管理にアクセスすることができないとのことで、変更したファイルをまとめて送るという方式になりました。
そのためローカルでバージョン管理して、変更のあったファイルをまとめるシェルスクリプトを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が指定されなかった場合は、最新のコミットが自動で指定されます。