Skip to content

vemikrs/git-maintenance

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Git AutoCRLF 無効化+キャッシュクリア ツール

このツールは、既存の複数Gitリポジトリでcore.autocrlf=falseへの無効化とGitキャッシュの一括クリア安全かつ簡単に行うためのツールです。

特徴

  • 安心: コミット作業不要、全自動で安全にautocrlf無効化+キャッシュクリア
  • シンプル: バッチファイルは1つだけ
  • 安全: 変更は自動スタッシュ、差分があればHEADで上書き
  • 一括処理: 複数リポジトリを一度にautocrlf無効化+キャッシュクリア

動作内容

各リポジトリに対して以下の処理を自動で実行します:

  1. .gitフォルダバックアップ - 安全のため.gitフォルダをバックアップ
  2. 変更確認 - 未コミットの変更を検出
  3. 自動スタッシュ - 変更がある場合は自動でスタッシュ保存
  4. autocrlf無効化 - core.autocrlf=false を設定
  5. Gitキャッシュ一括クリア - git rm --cached -r . でキャッシュをクリア
  6. HEADリセット - git reset --hard HEAD でワーキングディレクトリをHEADの状態に復元
  7. 整理 - 一時的に生成されたファイルのみを整理(重要なファイルは保護されます)

コミット作業は一切不要です。すべて自動で安全にautocrlf無効化+キャッシュクリアが完了します。

ファイル構成

git-maintenance/
├── git-autocrlf-disable-cache-clear.bat   # メインツール(autocrlf無効化+キャッシュクリア)
├── setup.bat                              # 初回セットアップスクリプト
├── restore-git.bat                        # .git復旧ツール
├── conf/                                  # 設定ファイル(個人環境用)
│   ├── config.txt.sample                  # 設定ファイルのサンプル
│   └── repositories.txt.sample            # リポジトリリストのサンプル
├── log/                                   # ログファイル(実行時に自動作成)
├── backup/                                # .gitフォルダバックアップ(実行時に自動作成)
├── .gitignore                             # Git管理対象外ファイル
└── README.md                              # このファイル

初回セットアップ

自動セットアップ(推奨)

setup.bat を実行すると、ディレクトリ作成と設定ファイル作成が一度に完了します。

手動セットアップ

  1. ディレクトリ作成と設定ファイルコピー
mkdir conf
mkdir log
mkdir backup
copy conf\config.txt.sample conf\config.txt
copy conf\repositories.txt.sample conf\repositories.txt
  1. 設定ファイルの編集

conf\config.txt を編集して、複数のGitリポジトリが配置されているベースディレクトリを指定します。

BASE_DIR=D:\projects

# 7z.exeのパス(バックアップ圧縮用)
# 7-Zipを使用すると大幅にバックアップサイズを削減できます
# 例: C:\Program Files\7-Zip\7z.exe
# 空白または存在しないパスの場合はxcopyによるフォルダコピーを使用
SEVENZIP_PATH=C:\Program Files\7-Zip\7z.exe
  1. リポジトリリストの編集

conf\repositories.txt を編集して、処理対象のリポジトリ名(フォルダ名)を列挙します。

# コメント行は # で始める
my-web-app
my-api-server
my-desktop-app
  1. ツールの実行

git-autocrlf-disable-cache-clear.bat をダブルクリックして実行します。

実行時に以下のメニューが表示されます:

1. AutoCRLF無効化+キャッシュクリア実行        ← メイン機能
2. リポジトリ情報確認                        ← 実行前の確認用
3. スタッシュ一覧表示                        ← スタッシュ確認用
4. git-autocrlf-disable関連スタッシュ復元      ← 元に戻したい時
5. 終了

実行モード詳細

1. AutoCRLF無効化+キャッシュクリア実行

メイン機能です。すべて自動でautocrlf無効化+キャッシュクリア処理されます。

2. リポジトリ情報確認

実行前にリポジトリの状態を確認できます。

  • ブランチ情報
  • 現在のautocrlf設定
  • 未保存変更の有無
  • スタッシュの数

3. スタッシュ一覧表示

各リポジトリのスタッシュ状況を確認できます。

4. スタッシュ復元

このツールで作成されたスタッシュを復元できます。

安全性について

  • データ損失なし: 変更は自動でスタッシュに保存されます
  • 元に戻せる: スタッシュ復元機能で元の状態に戻せます
  • キャッシュクリア: git rm --cached -r . でGitキャッシュを一括クリア
  • HEADリセット: git reset --hard HEAD で改行コード変更による差分を自動解決
  • 安全な整理: 重要なファイルは保護され、一時ファイルのみが整理されます
  • .gitバックアップ: 万が一に備えて.gitフォルダを自動バックアップ
  • 7z圧縮対応: 7-Zipを使用してバックアップサイズを大幅削減(オプション)
  • 整合性チェック: 復旧時にgit fsckによるリポジトリ整合性確認
  • 詳細なエラー処理: 各段階でのエラー検出と分かりやすい対処法提示

ログファイル

実行時に以下の場所にログファイルが生成されます:

log/git-autocrlf-disable-cache-clear_YYYYMMDD_HHMMSS.log

バックアップファイル

実行時に以下の場所に.gitフォルダのバックアップが作成されます:

7-Zip使用時(推奨):

backup/リポジトリ名_YYYYMMDD_HHMMSS.7z

フォルダコピー時:

backup/リポジトリ名_YYYYMMDD_HHMMSS/

7-Zipを使用すると、大容量リポジトリでもバックアップサイズを大幅に削減できます。

よくある質問

Q: 元に戻したい場合は?

A: メニューの「4. git-autocrlf-recovery関連スタッシュ復元」を選択してください。

Q: どのファイルが変更されるの?

A: 改行コードが変更されるテキストファイル全般ですが、HEADリセットにより自動で元の状態に戻されます。

Q: コミットは必要?

A: 一切不要です。すべて自動で処理されます。

Q: 安全?

A: はい。変更は自動でスタッシュに保存され、いつでも元に戻せます。

Q: .gitフォルダが破損した場合は?

A: 自動作成されたバックアップ(backup/リポジトリ名_日時/)から復旧できます。詳細は「緊急時の復旧手順」をご参照ください。

Q: バックアップはいつ作成される?

A: メイン処理(モード1)実行時に、各リポジトリの処理開始前に自動作成されます。

Q: 7-Zipの設定は必須?

A: いいえ。7-Zipが設定されていない場合は自動的にxcopyを使用します。ただし、7-Zipを使用すると大幅にバックアップサイズを削減できます。

Q: エラーが発生した場合はどうすれば?

A: ツールが自動的に詳細な対処法を表示します。「このツールが提供する対処法」と「一般的なトラブルシューティング」を参考にしてください。

トラブルシューティング

エラーが発生した場合

  1. ログファイルを確認してください
  2. 「リポジトリ情報確認」で状態をチェックしてください
  3. 必要に応じて「スタッシュ復元」で元に戻してください

設定ファイルが見つからない

  • conf\config.txt.sample をコピーして conf\config.txt を作成してください
  • conf\repositories.txt.sample をコピーして conf\repositories.txt を作成してください

ディレクトリが見つからない

  • conf\config.txtBASE_DIR パスを確認してください

文字化けが発生

  • コマンドプロンプトで chcp 932 を実行してから再実行してください

緊急時の復旧手順

.gitフォルダが破損した場合の復旧

万が一、.gitフォルダに問題が発生した場合、自動作成されたバックアップから復旧できます。

簡単復旧(推奨)

# 復旧ツールを使用(対話式)
restore-git.bat

手動復旧

1. バックアップの確認

# backupフォルダ内のバックアップを確認
dir backup
# 例: sample-repo_20250714_143022 のようなフォルダが存在

2. 破損した.gitフォルダの退避

# 対象リポジトリに移動
cd D:\projects\sample-repo

# 現在の.gitフォルダを退避(念のため)
move .git .git_broken

3. バックアップからの復元

# git-maintenanceフォルダから実行
# xcopyで.gitフォルダを復元
xcopy "backup\sample-repo_20250714_143022" "D:\projects\sample-repo\.git" /E /I /H /Y

4. 復旧確認

# 対象リポジトリで状態確認
cd D:\projects\sample-repo
git status
git log --oneline -5

5. 復旧後の処理

  • 復旧が成功したら .git_broken フォルダを削除
  • 復旧が失敗した場合は .git_broken.git に戻して他の方法を検討

複数リポジトリの一括復旧

複数のリポジトリで問題が発生した場合の復旧バッチファイルの例:

@echo off
set "BACKUP_BASE=D:\path\to\git-maintenance\backup"
set "PROJECT_BASE=D:\projects"

# 各リポジトリに対して復旧処理
for /d %%d in ("%BACKUP_BASE%\*") do (
    for /f "tokens=1,2 delims=_" %%a in ("%%~nd") do (
        set "REPO_NAME=%%a"
        echo 復旧中: !REPO_NAME!
        if exist "%PROJECT_BASE%\!REPO_NAME!" (
            xcopy "%%d" "%PROJECT_BASE%\!REPO_NAME!\.git" /E /I /H /Y
        )
    )
)

重要な注意事項

  • バックアップは実行時に自動作成されます
  • 複数のバックアップが残るため、適切なタイムスタンプのものを選択してください
  • 復旧前に現在の状態を退避することを強く推奨します
  • 復旧後は必ずgit statusで状態確認を行ってください
  • リモートリポジトリとの同期が必要な場合があります

開発者向け情報

リリース作成手順

自動リリース(推奨)

  1. タグをプッシュ:git tag v1.0.0 && git push origin v1.0.0
  2. GitHub Actionsが自動でリリースを作成

手動リリース

  1. create-release.bat を実行してリリース用zipファイルを作成
  2. GitHubでタグとリリースを手動作成
  3. 生成されたzipファイルをリリースページにアップロード

GitHub Actions設定

.github/workflows/release.yml により、v* タグプッシュ時に自動でリリースが作成されます:

  • リリース用zipファイルの自動生成
  • 不要ファイル(.git、ログ、バックアップ等)の除外
  • GitHubリリースページの自動作成
  • リリースノートテンプレートの適用

Created by vemic

About

Git AutoCRLF 無効化+キャッシュクリア ツール

Resources

Stars

Watchers

Forks

Contributors 2

  •  
  •