5

リポジトリの 1 つの履歴を (git-filter-branch を使用して) 書き換えるという初めての経験をしました。問題は、レポにいくつかのタグがあり、書き換えた後、結果の履歴から完全に切り離されているように見えることです。これは、タグに関連付けられた履歴が書き換えられていないため、古いコミットを指す必要があるためだと思います。では、新しい履歴にタグを「適用」するにはどうすればよいでしょうか。ちょっとした ASCII アート、私の質問を理解しやすいかもしれません:

元のレポ:

+  HEAD
|
|
+  TAG 0.2.0
|
|
+  TAG 0.1.0
|
|
+  Initial commit

gitk --all履歴の書き換え後に報告されるレポ構造:

    +  HEAD
    |
    |
    |
    |
    |
    |
    |
    |
    +  Initial commit
+  HEAD
|
|
+  TAG 0.2.0
|
|
+  TAG 0.1.0
|
|
+  Initial commit
4

3 に答える 3

5

ここで説明されているこの手順の最後のステップのように見えます

$ git log --pretty=oneline origin/releases |
  sed -n -e '/^\([0-9a-f]\{40\}\) Tag\( release\)\? \(.*\)/s--\3|\1|Tag release \3-p'
  > ~/paludis-git-tags

$ while read name msg head ; do
  git tag -m "${msg}" ${name} ${head} ;
  done < paludis-git-tags

アイデアは、リポジトリの古いバージョンからタグを読み取り、それらを新しい履歴に再適用することです。


注: git-filter-branch の最初の使用では、次のものを使用しましたか?

-- --all

?

--filter-branch オプションをリビジョン オプションから分離し、すべて--allのブランチとタグを書き換えます。

新しい履歴にタグが保持されている可能性があります(まだテストしていません)

于 2009-07-16T17:47:09.883 に答える
2

まず、タグも書き換える必要があります。たとえば、( VonC が言っ--allたように)オプションを使用してすべての参照を書き換えます。

注釈付きタグ(重いタグ) がある場合は、 as などのオプションも使用する必要があり--tag-name-filterます--tag-name-filter cat。署名されたタグを書き換えることはできないことに注意してください!

于 2009-07-16T20:17:33.353 に答える