0

リポジトリの履歴にあるタイムスタンプのみの変更を削除する適切な解決策を探しています。

私がここで何をしているのか疑問に思っている場合: 私は、毎日すべてのファイルに日付のタイムスタンプが付けられているソフトウェアのダウンロードされた夜間の zip アーカイブに基づいて、git リポジトリを構築しようとしています..しかし、実際には変更されていません。実際の変更を維持するために、これらの変更を取り除きたいです。

サブディレクトリを削除するために、既に filter-branch で遊んでいます。誰かがこれを達成する方法を知っていますか?

私が持っているいくつかの追加ポイント:

  1. 変更は常に特定の行にあることを知っています (上から下に移動すると、この行だけが変更されていれば、1 つのファイルの変更を削除できますか?)
  2. 古いタイムスタンプと新しいタイムスタンプは、1 つのコミットに対して、すべてのファイルで同じです。
  3. このラインは世界的にもユニークで、時代を超越したユニークとも言えます。

追記中

質問 1: 実際に変更されたファイルを確認するにはどうすればよいですか?

さて、私は2つの例を挙げます。最初のものは実際に変更が含まれており、2 つ目は刻印のみが含まれています。

私の例では、タイムスタンプは常に 5 行目にあります。私の目標は、コミット Aで変更された 1 行を削除し、コミット Bを排除することです。

例 コミット A (前)

a file with a header
a file with a header
a file with a header
/*
Build date: 2013-24-05 11:01:01 (02129bb861061d1a052c592e2dc6b383)
*/
other stuff
other stuff
something before the change
other stuff

例 コミット A (後)

a file with a header
a file with a header
a file with a header
/*
Build date: 2013-25-05 11:01:01 (57cec4137b614c87cb4e24a3d003a3e0)
*/
other stuff
other stuff
something after the change
other stuff

例 コミット B (変更前)

a file with a header
a file with a header
a file with a header
/*
Build date: 2013-24-05 11:01:01 (02129bb861061d1a052c592e2dc6b383) 
*/
other stuff
other stuff
something which is not altered
other stuff

例 コミット B (後)

a file with a header
a file with a header
a file with a header
/*
Build date: 2013-25-05 11:01:01 (57cec4137b614c87cb4e24a3d003a3e0)
*/
other stuff
other stuff
something which is not altered
other stuff
4

1 に答える 1

1

短いバージョン:git filter-branch --tree-filterすべてのファイルのコミット スタンプを削除するフィルターと共に使用します。何かのようなもの:

find . -name "*" -print | xargs sed -i 's/**commit-stamp-pattern**//g'

Git が残りを処理します。

perl を使用してこれらのコメントを削除する方法は次のとおりです。

find . -name "*" -print | xargs perl -i -pe 'undef $/; s!^/\*\nBuild date: \d{4}-.*\n\*/\n!!m'

(これは、ファイル名にスペースが含まれていない場合にのみ機能します)。

于 2013-05-24T22:36:40.970 に答える