2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【git filter-repo】リポジトリーのファイルとコミット履歴をディレクトリ階層を変えつつ別のリポジトリーに移動する

Posted at

前置き

表題の件のようなことをやりたくて調べるとgit filter-branchを使用する例が良く出てきますが、今はサードパーティのgit filter-repoの使用が推奨されています。
git filter-repoを使って「リポジトリーのファイルとコミット履歴をディレクトリ階層を変えつつ別のリポジトリーに移動」した際の手順をまとめました。

1. git filter-repo コマンドを使えるようにする

1-1. scoop のインストール

pythongit filter-repoScoopでインストールするため、まずScoopをインストールします。

PowerShell を実行するだけです。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex

1-2. python のインストール

コマンドプロンプトで以下コマンドを実行します。

scoop install python

1-3. git-filter-repo のインストール

コマンドプロンプトで以下コマンドを実行します。

scoop install git-filter-repo

1-4. PCを再起動する

python のパスが通っておらずgit filter-repoが見つからない可能性が大なので、一旦PCを再起動します。

2. コミット履歴を移動したいリポジトリーの --no-local リポジトリーを作成する

普通に clone したリポジトリーでgit filter-repoでコマンドを実行すると以下のように警告が表示されます。

Aborting: Refusing to destructively overwrite repo history since
this does not look like a fresh clone.
  (expected freshly packed repo)
Note: when cloning local repositories, you need to pass
      --no-local to git clone to avoid this issue.
Please operate on a fresh clone instead.  If you want to proceed
anyway, use --force.

一旦、以下のようにローカル間で clone したリポジトリーで作業します。

cd temp
git clone https://github.com/old-repo.git
git clone old-repo old-repo-work --no-local

3. git filter-repo の実行

引越し先ではhogeのファイルはすべてsrcディレクトリ配下に移動することにします。
以下のコマンドを実行します。

cd old-repo-work
git filter-repo --to-subdirectory-filter src

4. 引越し先のリポジトリーでファイルとコミット履歴を取り込む

4-1. 引越し先のリポジトリーで old-repo-work リポジトリーをリモートリポジトリとして追加する

cd ..\new-repo
git remote add old-repo-work ..\old-repo-work

4-2. 引越し先のリポジトリーで old-repo-work をマージする

--allow-unrelated-historiesを付与することで履歴を共有していないコミット履歴を取り込む事ができるようになります。

git fetch old-repo-work
git merge old-repo-work/main --allow-unrelated-histories
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?