2010-11-20 10 views
13

いくつかのファイルの空のバージョンをコミットできますか?場合によっては、というファイルを新規に追加してコミットする必要があり、その内容を新しいファイルと見なすようにする必要があります(はありません。を追加する必要があります) git diffは、そのファイルをコミットされた空のバージョンと比較することによって新しく追加されたコンテンツを表示する必要があります)。新しいファイルの "空のバージョン"をコミットできますか?

git add -N file…は、インデックス内の空のコンテンツでfileを置きますが、これが唯一のfileを追加されると述べている、とgit commitは、ファイルが追加されていないと文句を言いた、があります。問題は、現在の空でないバージョンが追加されるべきものではなく、新しいファイルの空のバージョンだけであることです。

これを行う方法はありますか?

PS:この質問は、gitリポジトリにファイルを自動的に追加するプログラムのコンテキストで尋ねられます(私のプログラムは学生が書くコードに従います)。コミットされていないコードは、私がまだ承認していないコードです。したがって、私のプログラムが自分のホームディレクトリに新しい空でないプログラムを見つけたにもかかわらず、生徒が作成したプログラムが起動する状態は、空のになります。これはgitリポジトリ内の新しい学生プログラムファイルの新しい空のバージョンを自動的にコミットすることによって処理されます。したがって、最後にコミットされたgitリビジョンと比較して、新しいコード行が新しく追加されたコンテンツとして表示されます。

+1

によってインデックス内の空のファイルを作成することができます。 '空のファイルに触れて&& git空ファイルを追加&& git commit'が私のために働きます。 – joschi

+0

'git diff'は、新しく作成されたファイルに対して完璧に機能します。ファイルに内容があるときにdiffを指定してファイルが存在しなかった場合は、追加されたすべての行が表示されます。空のファイルとのdiffとまったく同じ差分が表示されます。 (モデルラインだけが異なっています) – Cascabel

+1

@joschi:問題は、新しい*空でない*ファイルがたくさんあることです。 Svenのアプローチ#1を使用することは、きちんとしたgit-plumbingアプローチを使用することよりも面倒です。 – EOL

答えて

29

正直言って、私はこれが何の役に立つのか本当に分かりません。私は歴史を台無しにするのではなく、レビュープロセスを修正しようとします。あなたが本当にこれをしたい場合はしかし、ここでいくつかの方法がありますか:

  1. 実用的なアプローチ:

    mv file out-of-way 
    touch file 
    git add file 
    mv out-of-way file 
    
  2. 磁器のアプローチ:

    git add -N file 
    git add -p file 
    

    ...とだけシングルハンクを追加する必要があるかどうかを尋ねられたら "no"と答えます。

  3. 配管アプローチ:

    git hash-object -w --stdin < /dev/null 
    

    これは(e69de29bb2d1d6434b8b29ae775ad8c2e48c5391ある)空のブロブのSHA1を返します。

    まず、空のオブジェクトがオブジェクトデータベースに存在することを確認してください。このオブジェクトは1回だけ作成する必要があります。今、あなたは、私は正直にあなたの問題を理解していない

    git update-index --add --cacheinfo 0644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file 
    
+0

@Sven:ありがとう!配管のアプローチは私にとって完璧です:それは簡単に自動化され、ポイント(私はこれが必要である理由の2番目の推測はそれほど関係ありません:))。これは、自分のプログラムのローカルコピーに 'git diff'を使って、学生がホームディレクトリに追加する新しいコードに従うのに便利です。私がまだ承認していないコードはコミットしてはいけませんが、コミットされていない(つまり承認されている)限り、新しく追加された行(空のファイルと比較して)として表示され続けます。 – EOL

+0

@ EOL:タッチ、追加、*、*コピーを簡単に自動化することもできます。 – Cascabel

+0

@ EOL:不愉快な音で申し訳ありません。私がこの答えで説明したことを実際に行うことはお勧めしません。私はJefromiがあなたの質問へのコメントに示唆しているアプローチがより柔軟性のある(そしてより信頼性の高い)ワークフローを提供すると考えています。 –

関連する問題