2017-02-16 9 views
0

私は自動コミットスクリプトbased in the Carlos Buenos Vinos tutorialをビルドしていますが、大きな問題は次のとおりです。私はdevコンピュータでWindowsを使用している会社で働いていますこの悲しいことについては何もしないでください)。誰もがライン怒鳴ると同等のコマンドにアイデアを持っているん...WindowsのEGREPとAWK相当のコマンド

private function extractCommitedFiles() 
{ 
    $output = array(); 
    $rc = 0; 

    exec('git rev-parse --verify HEAD 2> /dev/null', $output, $rc); 

    $against = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'; 
    if ($rc == 0) { 
     $against = 'HEAD'; 
    } 

    // unix/linux 
    // exec("git diff-index --cached --name-status $against | egrep '^(A|M)' | awk '{print $2;}'", $output); 
    // windows 
    exec("git diff-index --cached --name-status $against | egrep '^(A|M)' | awk '{print $2;}'", $output); 

    return $output; 
} 

ので:

スクリプトには、次の方法がありますか?

exec("git diff-index --cached --name-status $against | egrep '^(A|M)' | awk '{print $2;}'", $output); 

私はUNIX /バッシュでこのコマンドを実行する場合、私は次の結果を持っている必要があります。

core/web/favicon.ico       
core/web/htaccess.txt      
core/web/index.html       
core/web/slim.php       
core/web/swagger/css/print.css    
core/web/swagger/css/reset.css    
core/web/swagger/css/screen.css    
core/web/swagger/css/style.css    
core/web/swagger/css/typography.css   
core/web/swagger/fonts/DroidSans-Bold.ttf   

しかし、幹部を使用して(」...のegrepとawkのコマンドなしで、私は次のことを抱えています結果:

A  core/web/htaccess.txt      
A  core/web/index.html       
A  core/web/slim.php       
A  core/web/swagger/css/print.css    
A  core/web/swagger/css/reset.css    
A  core/web/swagger/css/screen.css    
A  core/web/swagger/css/style.css    
A  core/web/swagger/css/typography.css   
A  core/web/swagger/fonts/DroidSans-Bold.ttf 

はuのみんなありがとう

+0

として組み合わせることができる--name-only--diff-filterを含む様々な出力オプションを有しているのでので、コマンドは第二

awk '/^(A|M)/ {print $2}' 

に短縮しなければならない、でもそれは、悪い例です。しかし、私たちは他の開発者を持っているので、タスクを自動化しようとしています。そのアイデアは、追加の手動タスクなしでジョブを実行するバージョンのスクリプトです。 ** git ls-files -m **コマンドで近づいていますが、追加ファイルのオプション-aはありません:( –

+0

egrepコマンドは、それらの行をAまたはMで始めるだけです。awkコマンドは、ファイル名を指定して "2番目の列"を指定すると、ファイルが追加または変更されます。 –

+0

その部分を実行する独自のプログラムを変更するのは難しくありません - 'A'または' M'で始まらない行;最初のフィールドとそれに続く空白をスキップし、残りの行からファイル名を取得する(Awkスクリプトは名前に空白があるファイル名では正しく動作しない) – tripleee

答えて

0

あなたはツールのWindowsバージョンをダウンロードして、ビン折り目を追加することができます! PATH変数に渡します。あなたは "グレップの-E" を使用することができます "egrepの" については

http://gnuwin32.sourceforge.net/packages/gawk.htm http://gnuwin32.sourceforge.net/packages/grep.htm

。 "gawk"は、あなたのケースで "awk"とまったく同じように仕事をします。

+0

私は可能ですが、他の開発者がいるのでタスクを自動化しようとしています。追加の手動タスクなしでジョブを実行するスクリプトをバージョン管理しています。 –

2

まず、このコマンドは悪い例です。同じパイプラインでgrepawkを使用する必要はほとんどありません。awkがはるかに強力です。 git diff-indexは私ができる

git diff-index --cached --name-only --diff-filter=AM $against 
関連する問題