2

Gitの作成者の名前を「FirstLast<myemail@email.com>」から「FirstLast<otheremail@email.com>」に変更しました。

2つのメールアドレスは異なるGithubアカウントに関連付けられており、すべての個人プロジェクトを2番目のプロジェクトに移行しています。

私の問題は、いくつかのプライベートリポジトリ(私が唯一の寄稿者です)での過去の作業はすべて、最初のアカウントを使用して行われたことです。移行されたコードは、他のユーザーによってコミットされたようです。新しいGit作成者名を使用するようにすべてのコミットを強制的に変更するにはどうすればよいですか?

それができれば、変更をGithubに強制的にプッシュすることができ、作業はすべてユーザーFirst Lastによって行われたように見えます。これは、私が望んでいることです。

ありがとう!

4

2 に答える 2

3

最も簡単な方法は次のとおりです。

やみくもにコミットを変更しないこのソリューションをお勧めします(他の開発者からのパッチを組み込んだ場合)

#!/bin/bash

git filter-branch --env-filter '
if [ "$GIT_AUTHOR_NAME" = "<old author>" ];
then
    GIT_AUTHOR_NAME="<new author>";
    GIT_AUTHOR_EMAIL="<youmail@somehost.ext>";
fi
if [ "$GIT_COMMITTER_NAME" = "<old committer>" ];
then
    GIT_COMMITTER_NAME="<new commiter>";
    GIT_COMMITTER_EMAIL="<youmail@somehost.ext>";
fi
' -- --all
于 2012-09-03T05:47:28.170 に答える
1

git filter-branchあなたの目的に使用できます。具体的には、そのenv-filter.

--env-filter <command>
  This filter may be used if you only need to modify the environment in which
  the commit will be performed. Specifically, you might want to rewrite
  the author/committer name/email/time environment variables (see
  git-commit-tree(1) for details). Do not forget to re-export the variables.

何かのようなもの:

git filter-branch \
  --env-filter 'export GIT_AUTHOR_NAME="First Last";
                export GIT_AUTHOR_EMAIL="otheremail@email.com";
                export GIT_COMMITTER_NAME="${GIT_AUTHOR_NAME}";
                export GIT_COMMITTER_EMAIL="${GIT_AUTHOR_EMAIL}";' \
  -- --all

作成者名を変更する必要がない場合は、 と 割り当てを削除しGIT_AUTHOR_NAMEGIT_COMMITTER_NAMEください。

于 2012-09-03T05:45:27.540 に答える