6

最近、次のコマンドを使用して、すべてのローカル コミットの作成者、コミッター、および電子メールを置き換えました。

git filter-branch -f --env-filter '
if [ "$GIT_COMMITTER_NAME" = "oldname" ];
then
    GIT_COMMITTER_NAME="newname";
    GIT_COMMITTER_EMAIL="newaddr";
    GIT_AUTHOR_NAME="newname";
    GIT_AUTHOR_EMAIL="newaddr";
fi

if [ "$GIT_AUTHOR_NAME" = "oldname" ];
then
    GIT_COMMITTER_NAME="newname";
    GIT_COMMITTER_EMAIL="newaddr";
    GIT_AUTHOR_NAME="newname";
    GIT_AUTHOR_EMAIL="newaddr";
fi
' -- --all

更新はローカルですぐにわかります (たとえば、私の SourceTree 環境で)。ただし、変更されたリポジトリを GitHub に強制的にプッシュした後は…</p>

git push -f origin master

… 2 つの個別の項目は、コミッターと作成者の更新を頑固に拒否しています: Gemfile.lock ファイルと Views ディレクトリです。

次の点にも注意してください。

  1. このリポジトリでこの種の操作を実行するのはこれが 2 回目です。初めてそのような問題に直面したことはないと思います。

  2. リポジトリで古い名前を検索しています…</p>

    $ find . "<oldname">
    

…多くの結果得られます。つまり、GitHub とローカルの両方で更新されているように見えるファイルを含め、多くのリポジトリ ファイルに古い名前がまだ潜んでいることを意味します。

私の質問: GitHub の 2 つの「頑固な」ファイルのコミッター/作成者を変更するにはどうすればよいですか?

4

2 に答える 2

5

git filter-branch を使用した後でも、git は refs/original にリポジトリの履歴のバックアップ コピーを保持します。これは、filter-branch で何かを台無しにした場合に、必要に応じて元に戻すことができるようにするためです。すべてが順調に進んだことを確認したら、バックアップされた参照を次のように削除できます。

git update-ref -d refs/original/refs/heads/master

何らかの理由で、github が変更を反映するには追加のコミットが必要です。readmeにスペースか何かを追加し、コミットしてプッシュします...その後、githubはプロジェクトページに正しい作成者を反映します。

于 2013-06-03T15:26:50.413 に答える
0

行の作成者を特定するために使用している GitHub の正確なビューは何ですか? キャッシュされているか、古いコミット SHA1 に固有のものを表示している可能性があります。

リポジトリの新しいクローンを作成し、それらの 2 つのファイルをチェックすることで、それが機能したことをテストできgit blame filenameます。それが正しい著者を示している場合、それはうまくいきました。

于 2013-03-24T18:58:17.780 に答える