0

cvs diff -D "1 days ago"gitのCVS機能をマッピングしようとする質問がいくつかあります。

Git-2回の間にマスターブランチで変更されたすべてのファイルを一覧表示するにはどうすればよいですか?

Gitで2つの日付の間に発生したすべてのコミット間の差分を取得するにはどうすればよいですか?

しかし、この質問のコメントからの私の理解から:

Gitベアリポジトリをコピーするとログが変更されますか?

実行git diff --name-only master@{"5 day ago"} masterはマシンに対してローカルであり、マスターへのマージに関する問題を解決できません。

私はgit whatchanged別の質問(git whatchangedからファイル名を抽出するためのBashスクリプト)を使用する必要があると考えています。

git show --pretty="format:" --name-only HEAD^

しかし、せいぜい、特定の日付内にある特定の参照のさまざまなgit出力を解析し、それらの参照を他のgitコマンドにリダイレクトして、それらの参照で変更されたファイルを分離し、最後に連結するために、やや壊れやすいスクリプトを作成する必要があると考えているようです。結果。

これはやや基本的な機能だと感じているので、これがgitによってまだ提供されていないことにショックを受けました。特に、上記の質問から、gitはcvs diff -D "1 days ago"CVSの素晴らしい利点を完全に再現していないためです。 gitの何か、そしてまあ、私は人類へのすべての信頼を失いました。

誰かが私が間違っていることを証明できますか?一定期間以降、マージまたはコミットを介してマスター内のファイルが更新されているかどうかを確実に照会する方法はありますか?

問題

これが私がここに私を導いたことです:

  1. リポジトリにいくつかのコミットを行い、それらを元の場所にプッシュします
  2. 次に、ベアリポジトリを取得して、cp -r --preserve
  3. このコピーされたベアリポジトリから、実行しますgit clone copy_of_everything
  4. copy_of_everything実行中git diff --name-only master@{"5 day ago"} master、またはステップ1でこれらのコミットを行ってからどれだけ長い時間が経過したか。

少なくとも私がgit diff --name-only master@{"5 day ago"} master行ったように、クローンを実行してから実行されていないコミットを見つけることができません。

これはとても受け入れがたいように思われるものです。ログには、私が知っておくべきことを長い形式で教えてくれますが、私が知っている1つか2つのコマンドでは、特定の日付以降に変更されたファイルを教えてくれません。

アップデート1

sleskeのコメントは頭に釘を打ったようです。git diff --name-only master@{"5 day ago"} master、reflogに基づいているのは、リポジトリの状態に対するローカルの変更に基づいているため、お勧めできません。

それで、良い代替案はありますか?

また、そもそもこの質問で私をこの方向に向けてくれたUser:qqxに敬意を表します。

アップデート2

そこには。そして、slekeの(現在受け入れられている)答えがその理由を説明しています。

要するに、私は実行する必要がありました:

git diff --name-only $(git log --until="1 days ago" -n1 --format=%H master ) master

人類への信仰が回復しました。

4

2 に答える 2

1

残念ながら、私はあまり詳しくありませんcvs diff -D。指定された時間以降にファイルに加えられたすべての変更が表示されると思います。gitでそれが必要な場合は、次のことができます。

git log --until="1 days ago" -n1 --format=%H

これにより、1日より古いマスターの最後のコミットが出力されます。

次に、そのコミットのIDを使用して、1日前のコミットと現在のHEAD(つまり、ブランチの現在の状態)との差分を取得します。

git diff <ID from step before> HEAD

これにより、完全な差分が印刷されます。ファイルのリストを取得するには、最後にオプションを追加します--stat。これにより、次のような要約が表示されます。

 a/data.c      |  14 ++++++++
 b/stuff.c     |   2 +-
 b/code2.c     |  54 +++++++++++++++++------

1つのコマンドでそれを行う方法がわかりません。もちろん、両方を1行にまとめることもできます(使用する場合bash)。

git diff $(git log --until="1 days ago" -n1 --format=%H) HEAD 

注:これにより、マージによって発生したファイルへの変更も取得されます。与えられた2つのコミット(古いコミットとHEAD)でのリポジトリの状態を比較するだけです。

于 2013-02-16T03:31:09.387 に答える
0

git diff "master@{a month ago}".."master@{last week}"reflogからのこれらの日付の違いを示し、aを実行するwhatchangedと、少しのポストマッサージで変更されたファイルが得られます。

于 2013-02-16T03:34:50.717 に答える