⚠️ 超初心者の備忘録です。
間違いなどあれば指摘していただけると助かりますが、きつめの言葉で指摘されると泣いちゃうので勘弁してください😢
問題が発生したきっかけ
iOSアプリを開発していました。先にGoでバックエンド処理部分を実装していて、その時点でリモートリポジトリとローカルリポジトリを紐づけていました。そのあとXcode上で、フロントのプロジェクトを/親/frontend/ につくったときに多分Xcodeくんが.git作っちゃったのかな?
といういきさつでタイトルの問題にぶつかりました。
自分の解決方法(綺麗じゃない)
結論からいいます。以下、順序。
- frontendディレクトリの中身を別の場所に避難
- frontendディレクトリを.gitごと削除
- もう一回frontendディレクトリを自分で作って、避難させていた中身を戻す
これだと履歴とかが飛んじゃう可能性があるらしいです。泣けますね😥
色々調べる前にやっちゃったけど、個人開発以外でこれやったら多分怒られます。初心者のうちに知れてよかったね自分🫠
せっかくなので綺麗な解決方法を調べてみた
自分「綺麗な方法教えろ」
ChatGPT 「git subtree」
なのでgit subtreeについて調べる。
Gitのドキュメント内でsubtreeについて言及してるページが見つからなかったのでGitHubのドキュメントを見ます。(https://docs.github.com/ja/get-started/using-git/about-git-subtree-merges)
とりあえず概要(上記ページより引用)
複数のプロジェクトを単一のリポジトリで管理する必要がある場合、サブツリー マージ を使ってすべての参照を扱うことができます。
なるほど確かに自分がやりたいことだな。
順序
-
孫ディレクトリのプロジェクトのリモートURLを追加
$ git remote add -f ディレクトリ名 https://github.com/ユーザー名/リポジトリ名.git
-
ローカルのGitプロジェクトにマージ
$ git merge -s ours --no-commit --allow-unrelated-histories リポジトリ名/ブランチ名
-
新しいディレクトリを作って履歴をそこにコピー
$ git read-tree --prefix=ディレクトリ名/ -u リポジトリ名/ブランチ名
-
変更をコミット
$ git commit -m "コミットメッセージ"
これでいけるみたいです。
おわり
大学生になってプログラミングできる時間も増えたから色々作ってみて遊んでるけど知識が足りてないなと思いました。大学附属図書館にGitの本あったから今読んでる本読了したらそれにも手を出してみようかな...🤔