Help us understand the problem. What is going on with this article?

Githubさん,ごめんなさい!複数リポジトリを一つにまとめる方法

More than 5 years have passed since last update.

複数のリポジトリがあった時に、それをまとめた親レポジトリを作り、各レポジトリをサブディレクトリとしてまとめてしまう方法。

ファイルとして保存するだけじゃなく、ちゃんとコミットHistoryも保存される。一つにまとめたものを後で切り出すこともできる。

これでリポジトリ数の削減が可能になるので、GithubのPrivateリポジトリ数の上限などにお悩みの人は是非お試しを。現在、頻繁に使っているものをまとめてしまうのはおすすめしないが、古い使われてないものを歴史ごとアーカイブするのには持ってこいだと思う。

以下では、

  • $ACCOUNT = githubのアカウント名
  • $REPO = サブディレクトリに移したいレポジトリ名
  • $ARCHIVE = 複数リポジトリをまとめておくアーカイブ用親リポジトリの名前

とする。

複数リポジトリをまとめたアーカイブ用gitリポジトリをローカルに作成

mkdir $ARCHIVE
cd $ARCHIVE
git init
touch .gitignore README.md  # 適当に編集
git add .
git commit -m "Add .gitignore and README.md"

ここで、とりあえず一つ何かCommitしておくのは、失敗してもgit reset --hard HEAD~で戻れたりと何かと都合がいいから。

既存リポジトリをARCHIVEのサブディレクトリとして保存

git remote add $REPO git@github.com:$ACCOUNT/$REPO.git
git fetch $REPO
git checkout -b $REPO $REPO/master
git filter-branch -f --tree-filter "mkdir $REPO && git mv -k {,.[\!.],..[\!.]}* $REPO/"
git checkout master
git merge $REPO

うまくいってそうだったら、github上のREPOリポジトリを消す。

これをまとめたい各リポジトリに対して行う。

参考

http://stackoverflow.com/questions/13337877/what-is-the-opposite-of-git-filter-branch-subdirectory-filter

複数リポジトリをまとめたアーカイブをGithubにPush

Github上にARCHIVEという名前のリポジトリを作成する。

git remote add origin git@github.com:$ACCOUNT/$ARCHIVE.git
git push -u origin master

この順番でやれば、Githubのprivateリポジトリ数の上限に達していても、ちゃんと複数リポジトリをサブディレクトリとしてまとめたアーカイブを作ることができる。

おまけ:もう一度切り出したい時

逆にまとめてしまったものをもう一度切り出したいときは以下のようにする。

git clone git@github.com:$ACCOUNT/$ARCHIVE.git $REPO
cd $REPO
git filter-branch --subdirectory-filter $REPO
git remote add origin git@github.com:$ACCOUNT/$REPO.git
git push -u origin master
awakia
検索とか推薦とかやってきたエンジニア。早稲田の山名研出身。大学院の頃、論文を書こうとしない僕を見かねた教授に、北京のMSRAに追放されるが3ヶ月後無事帰還。 大学を卒業後、エンジニアのブラックホールとの別名を持つGoogleに吸収されそうになるが1年2ヶ月後無事生還。 現在は、Wantedly(https://www.wantedly.com/ )の4番目のエージェントとして救出活動に専念。
http://awakia-n.hatenablog.com/
wantedly
「シゴトでココロオドル」ためのビジネスSNS「Wantedly」の開発・運営をしています。
https://wantedlyinc.com/ja/presentations
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした