Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

git で過去のコミットログを残してリポジトリを統合する方法

git で管理していると、一つのスクリプトだけリポジトリとかができてしまったりします。
そういうのを一旦を統合して、過去の履歴を残した状態にしたいことは結構あります。
というか、業務でありました。
調べて見たら情報はあるようでなかったので、まとめます。

想定するまとめ方

大きいリポジトリ a に小さいリポジトリ b を統合する。

テスト環境の構築

mkdir a
cd a/
git init 
touch a.txt
git add -A
git commit -m "1"
mkdir -p script/test1/
touch script/test1/index.sh
git add -A
git commit -m "2"
mkdir -p script/test2/
touch script/test2/index.sh
git add -A
git commit -m "3"
cd ..
mkdir b
cd b/
git init 
touch b.txt
git add -A
git commit -m "101"
touch index.sh
git add -A
git commit -m "102"
echo "hogehoge" > index.sh
git add -A
git commit -m "103"
cd ..

以上を適当な場所で実行すると以下のようになるはずです。

$ tree
.
├── a
│   ├── a.txt
│   └── script
│       ├── test1
│       │   └── index.sh
│       └── test2
│           └── index.sh
└── b
    ├── b.txt
    └── index.sh

5 directories, 5 files
$ cd a/
$ git log --oneline --graph --decorate=full
* 57ede31 (HEAD -> refs/heads/master) 3
* 0581249 2
* b95c42d 1
$ cd ../b
$ git log --oneline --graph --decorate=full
* 0671e8d (HEAD -> refs/heads/master) 103
* 2f3dff9 102
* 492a0b7 101

ここから統合していきます。

実際の作業

cd a/
mkdir script/b
git remote add b ../b
git fetch b
mkdir script/b
touch script/b/.gitkeep
git add -A
git commit -m "hoge"
git merge -X subtree=script/b/ b/master --allow-unrelated-histories
git rm script/b/.gitkeep
git commit -m "hoge"

とりあえず mastar にマージしていますが、実際はブランチ切って、プルリクエスト投げるのが正しいと思います。

どういう状態になるか

$ tree
.
├── a.txt
└── script
    ├── b
    │   ├── b.txt
    │   └── index.sh
    ├── test1
    │   └── index.sh
    └── test2
        └── index.sh

4 directories, 5 files
$ git log --oneline --graph --decorate=full
* a928c18 (HEAD -> refs/heads/master) hoge
*   ecf9fd8 Merge remote-tracking branch 'b/master'
|\  
| * 0671e8d (refs/remotes/b/master) 103
| * 2f3dff9 102
| * 492a0b7 101
* 17e5dfc hoge
* 57ede31 3
* 0581249 2
* b95c42d 1

確認すると分かる通り、2つが統合された形になります。

参考文献

https://chaika.hatenablog.com/entry/2015/06/04/173401
https://qiita.com/takanatsu/items/fc89de9bd11148da1438

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?