0
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?

[🔰] [備忘録] .gitが多重で存在して孫ディレクトリがcommitできなくなった話

Last updated at Posted at 2025-04-19

⚠️ 超初心者の備忘録です。

間違いなどあれば指摘していただけると助かりますが、きつめの言葉で指摘されると泣いちゃうので勘弁してください😢

問題が発生したきっかけ

iOSアプリを開発していました。先にGoでバックエンド処理部分を実装していて、その時点でリモートリポジトリとローカルリポジトリを紐づけていました。そのあとXcode上で、フロントのプロジェクトを/親/frontend/ につくったときに多分Xcodeくんが.git作っちゃったのかな?
といういきさつでタイトルの問題にぶつかりました。

自分の解決方法(綺麗じゃない)

結論からいいます。以下、順序。

  1. frontendディレクトリの中身を別の場所に避難
  2. frontendディレクトリを.gitごと削除
  3. もう一回frontendディレクトリを自分で作って、避難させていた中身を戻す

これだと履歴とかが飛んじゃう可能性があるらしいです。泣けますね😥
色々調べる前にやっちゃったけど、個人開発以外でこれやったら多分怒られます。初心者のうちに知れてよかったね自分🫠

せっかくなので綺麗な解決方法を調べてみた

自分「綺麗な方法教えろ」
ChatGPT 「git subtree
なのでgit subtreeについて調べる。
Gitのドキュメント内でsubtreeについて言及してるページが見つからなかったのでGitHubのドキュメントを見ます。(https://docs.github.com/ja/get-started/using-git/about-git-subtree-merges)
とりあえず概要(上記ページより引用)

複数のプロジェクトを単一のリポジトリで管理する必要がある場合、サブツリー マージ を使ってすべての参照を扱うことができます。

なるほど確かに自分がやりたいことだな。

順序

  1. 孫ディレクトリのプロジェクトのリモートURLを追加
    $ git remote add -f ディレクトリ名 https://github.com/ユーザー名/リポジトリ名.git

  2. ローカルのGitプロジェクトにマージ
    $ git merge -s ours --no-commit --allow-unrelated-histories リポジトリ名/ブランチ名

  3. 新しいディレクトリを作って履歴をそこにコピー
    $ git read-tree --prefix=ディレクトリ名/ -u リポジトリ名/ブランチ名

  4. 変更をコミット
    $ git commit -m "コミットメッセージ"

これでいけるみたいです。

おわり

大学生になってプログラミングできる時間も増えたから色々作ってみて遊んでるけど知識が足りてないなと思いました。大学附属図書館にGitの本あったから今読んでる本読了したらそれにも手を出してみようかな...🤔

0
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
0
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?