1. ホーム
  2. ギット

[解決済み】Gitでダーティなインデックスや未追跡のファイルをチェックする

2022-04-20 08:25:20

質問

git リポジトリに未コミットの変更があるかどうかを確認するにはどうすればよいですか。

  1. インデックスに追加されたが、コミットされていない変更
  2. 未追跡のファイル

スクリプトから?

git-status は、git バージョン 1.6.4.2 では常にゼロを返すようです。

解決方法は?

グレートタイミング! 数日前、プロンプトにgitのステータス情報を追加する方法を見つけたとき、まさにこのことについてブログ記事を書いたのです。

私がやっていることはこうです。

  1. ダーティな状態の場合。

    # Returns "*" if the current git branch is dirty.
    function evil_git_dirty {
      [[ $(git diff --shortstat 2> /dev/null | tail -n1) != "" ]] && echo "*"
    }
    
    
  2. 未追跡のファイルについて (注意 --porcelain フラグを git status を使えば、パース可能な出力が得られます)。

    # Returns the number of untracked files
    
    function evil_git_num_untracked_files {
      expr `git status --porcelain 2>/dev/null| grep "^??" | wc -l` 
    }
    
    

とはいえ git diff --shortstat の方が便利ですが git status --porcelain ダーティファイルの取得に使用します。

# Get number of files added to the index (but uncommitted)
expr $(git status --porcelain 2>/dev/null| grep "^M" | wc -l)

# Get number of files that are uncommitted and not added
expr $(git status --porcelain 2>/dev/null| grep "^ M" | wc -l)

# Get number of total uncommited files
expr $(git status --porcelain 2>/dev/null| egrep "^(M| M)" | wc -l)

2>/dev/null はエラーメッセージをフィルタリングするので、これらのコマンドを非gitディレクトリで使用することができます。(これらのコマンドは単に 0 はファイル数を表しています)。

編集 :

以下はその書き込みです。

Git のステータス情報をターミナルのプロンプトに追加する

Git 対応のシェルプロンプトの改善