2017-11-09 12 views
0

私はテキストファイル(ツリーを表す)からコード(文字列定数)を生成するスクリプトを実行しています。Git:ファイルの行だけを追加

スクリプトを実行すると、コードベースの別の場所で使用される定数が削除されます。

私は削除された行をコミットしたくないです(他のチームのコードを破るため)。代わりにそれらの定数を非推奨とマークします。

生成されたファイルに「追加」された行のみをステージングする方法はありますか?

私はgit add -pでそれを行うことができますが、私はいくつかのファイルを持っているので、ちょっと面倒です。

入力差分:差分をコミット期待

const string Namespace1::kProperty1 = "/namespace_1/property_1"; 
+ const string Namespace1::kProperty2 = "/namespace_1/property_2"; 

const string Namespace2::kProperty3 = "/namespace_2/property_3"; 
- const string Namespace2::kProperty2 = "/namespace_2/property_2"; 

const string Namespace1::kProperty1 = "/namespace_1/property_1"; 
+ const string Namespace1::kProperty2 = "/namespace_1/property_2"; 

const string Namespace2::kProperty3 = "/namespace_2/property_3"; 
const string Namespace2::kProperty2 = "/namespace_2/property_2"; 
+0

グラフィカルクライアントを入手する必要があります。 'git add -p'以外には、削除された行を手作業で編集する以外に、組み込みのオプションはありません。 Beyond Compareのような良いdiffプログラムがある場合は、編集をサポートし、新しく変更されていないコピーを設定すると、diffプログラムを使用して新しいコピーを作業フォルダと比較し、削除されたすべての行を戻すことができます。 –

+0

さらに、私の考えではこれははるかに良い選択肢です。あなたがそれらのファイルから何かを削除するはずがないなら、あなたの生成スクリプトを修正してください。 –

答えて

2

誰ツールはこれを行いませんが、いくつかは、一緒に作業することができます。

  • difflibは、標準のPythonライブラリに含まれており、diffコマンドよりも消費しやすい出力を生成します。
  • git cat-file blob ...は、作業ツリーを変更せずにGitデータベースからコンテンツを取得します。
  • <()プロセスの置き換えを可能にするBashのようなシェルを使用していない場合は、subprocessでPythonに移動するか、一時ファイルを使用します。
  • git hash-object -t blob -wオブジェクトをGitデータベースに書き戻します。
  • git update-index --cacheinfo 100644,...は、作業ツリーに触れることなく、インデックス/ステージを更新します。

これは、git add -pの操作と同様の結果を示します。

git update-index --cacheinfo 100644,$(python -c ' 
    import difflib, sys; 
    sys.stdout.writelines(
     line[2:] for line in difflib.Differ().compare(
      open(sys.argv[1]).readlines(), open(sys.argv[2]).readlines()) 
     if line.startswith(" ") or line.startswith("+ "))' \ 
    <(git cat-file blob HEAD:filename) filename \ 
| git hash-object -t blob -w --stdin --path filename),filename 
+0

ありがとうございます、あなたは正しい方向に私を設定します。しかし、あなたはまた、削除された行が欲しいので、diffのすべての行を出力する必要があります。また、「非推奨」のコメントを同時に生成したい場合は、Pythonを使用すると便利です。 – gwenzek

関連する問題