2011-03-16 4 views
1

gitステータス出力を変更して、各パスを他のコマンドを実行するために使用できる変数として扱うにはどうすればよいですか?gitステータス出力に変数を追加する

例:ファイルや長いファイルパスの多くを扱うとき

$ git status 
# On branch master 
# 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  {1} modified: path/to/some/file.txt 
#  {2} modified: path/to/some/other/file.txt 
#  {3} modified: some/really/long/path/to/some/file.txt 

$ git add {2} 

$ git status 
# On branch master 
# 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: path/to/some/other/file.txt 
# 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  {1} modified: path/to/some/file.txt 
#  {2} modified: some/really/long/path/to/some/file.txt 

これは便利かもしれません。私はそれが非常にトリッキーな(または不可能)と思う? git add man pageから更新モードとgit add --interactive

のように見えます

+0

私はこの作業を見る方法を実行する、すべての変数をキャッシュすることですファイルの変更が検出された場合は、キャッシュをクリアします。ユーザーが古くなった(キャッシュされていない)変数を使用しようとすると、変数を 'リフレッシュ'するために再びステータスをgitするように促します。これにより、古い変数の操作を停止します。 – Luke

答えて

1

更新

これは、ステータス情報を表示し、プロンプト "Update>>" を発行。
プロンプトがdoubleの末尾にある場合は、空白またはコンマで連結された複数の選択を行うことができます。
また、範囲と言うこともできます。例えば。 "2-5 7,9"をクリックして2,3,4,5,7,9をリストから選択します。ある範囲内の2番目の数字が省略された場合は、残りのパッチがすべて取得されます。例えば。 "7-"はリストから7,8,9を選択します。あなたはすべてを選択すると言うことができます。そして、それらをgrepを使用すると、通常、いくつかのファイルの種類、または特定のパスを変更した場合

  staged  unstaged path 
    1:  binary  nothing foo.png 
* 2:  +403/-35  +1/-1 git-add--interactive.perl 
+0

これは知っておいてよかったですが、ちょうど全ファイルパスを入力するのと同じように長いことです。しかし、ありがとう:) – Luke

0

、LS-ファイルを使用します:あなたが選択した後、このように、*で強調表示され

git ls-files -o | grep some-part-of-the-path-or-extension | xargs git add 

これに関する詳細:http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html

これは、必要に応じてコマンドとして別名を付けることができます。これは、add --interactiveがあなたに与えるものを読んでから、それに対応するものをパンチすることを確認するよりもずっと速くなります。

また、恐ろしい量がある場合は、git guiもあります。

これが役に立ちます。

+0

きちんとしているが、理想的には、パスは毎回設定する必要はありませんか、またはすべて入力してください:)知っておくと便利です、ありがとう:) – Luke

0

どうぞご明示ください。

{1}か{2}を入力する必要がありますが、これは不器用でエラーが発生しやすいです。

ファジィ/インクリメンタルルックアップを独自の言語で実装したい場合があります。または、あなたが明らかに更新に興味がないと思われるすべての 'cruft'がリストの最初の場所にないことを確認してください。(.gitignore)

ここでは 'scommit'という名前のクイックbash関数で、 (スマートコミット?):

#!/bin/bash 

function scommit() 
{ 
    set -e 
    local PS3='add (or Ctrl-D)? ' 
    local arguments 
    if [[ $# -lt 1 ]]; 
     then arguments='.*' 
     else arguments=("[email protected]") 
    fi 

    function grepmodified() { git ls-files -m | egrep "${arguments[@]}"; } 
    function pickone()  
    { 
     if [[ $# -ge 1 ]]; then 
      select path in "[email protected]"; 
      do git add -- "$path"; break; 
      done; 
     else 
      return 1; 
     fi 
    } 

    while pickone $(grepmodified); do continue; done 
} 
-iフラグは、それ大文字と小文字を区別しない)作りのegrepに渡されるかに注意してください(次のようにあなたはそれを使用することができます

私はしばらく前にあなたと同じかゆみを持っていた
$ scommit -i bi 
1) main/src/core/MonoDevelop.Ide/gtk-gui/MonoDevelop.Ide.Gui.OptionPanels.KeyBindingsPanel.cs 
2) main/src/core/MonoDevelop.Ide/gtk-gui/MonoDevelop.Ide.Projects.OptionPanels.CombineBuildOptionsWidget.cs 
add (or Ctrl-D)? 1 
1) main/src/core/MonoDevelop.Ide/gtk-gui/MonoDevelop.Ide.Projects.OptionPanels.CombineBuildOptionsWidget.cs 
add (or Ctrl-D)? 1 
0

私はgit-numberと書いてそれを傷つけました。それはまさにあなたが望むものです。 READMEの "警告"のセクションを読んでください。

クイックチュートリアル:あなたはあまりにもファイル上で任意のコマンドを実行することができます

$ alias gn='git number' 
$ alias ga='git number add' 

$ gn 
# On branch master 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#1  .README.swp 
#2  README 

$ ga 2 
git add README # <- It does this in the background 

$ gn -c ls -l 1 2 

ls -l .README.swp README

関連する問題