2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Githubのディレクトリをリポジトリ間で移動する

Posted at

はじめに

Githubのリポジトリ間でディレクトリを移動することがありました。
基本的に Appendix の記事の踏襲になりますが、コマンドの一部が異なっていたため記録として残しておきます。

手順

移動元を REPO.A 、移動先を REPO.B とします。

REPO.A
 SOURCE1/FILEA
 SOURCE2/FILEB
 SOURCE3/FILEC

REPO.B
 FOLDER/SOURCE2/FILEB

REPO.A にある SOURCE2 ディレクトリと、その配下の FILEB を REPO.B の FOLDER 配下に移動したい場合の手順を記載します。
SOURCE2 ディレクトリ配下のコミット履歴はそのまま移動させます。

手順

移動元のリポジトリでの移動準備

  • REPO.A を clone
cd tmp
git clone https://github.com/REPO.A.git REPO.A.tmp.1
cd REPO.A.tmp.1
  • filter-branch を使用して対象のディレクトリ絞り込み、コミット履歴を書き換える
git filter-branch -f --subdirectory-filter SOURCE2/ -- --all
git filter-branch -f --tree-filter "mkdir SOURCE2 && git mv -k * SOURCE2/"
git filter-branch -f --tree-filter "mkdir FOLDER && git mv -k * FOLDER/"

移動先のリポジトリでの取り込み作業

  • REPO.B を clone
git clone git clone https://github.com/REPO.B.git
cd REPO.B
git checkout -b moverepo
  • filter-branch した REPO.A を remote add する
git remote add work /tmp/REPO.A.tmp.1/.git
git remote -v # 確認
  • filter-branch した REPO.A を merge する
git fetch work

# --allow-unrelated-histories を付与しないと refusing to merge unrelated histories となる場合がある
git merge --allow-unrelated-histories work/filter
  • 必要に応じて push
git push --set-upstream origin moverepo

移動元のリポジトリで移動したディレクトリを削除する

  • 必要に応じて git rm など
    履歴は残したほうがいいと思い、素直に git rm
git checkout -b delete/hoge
git rm -r <TARGET_DIRECTORY>

Appendix

gitレポジトリ内のディレクトリを別のgitレポジトリ以下に移動する
Gitリポジトリ内にあるディレクトリを別リポジトリに移行する
[Git] fatal: refusing to merge unrelated historiesを解決する話

2
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?