gitサブモジュールを削除する現在の方法は何ですか?


91

Macのgitバージョン1.9.3(Apple Git-50)の時点で、gitサブモジュールを削除するにはどうすればよいですか?私は多くの古い情報を読んでいて、多くの開発者が彼らは働かないと言っています。現在の方法は何ですか?うgit deinit pathToSubModule トリックを行いますか?

私がうまくいくと思った手順はここにありますが、コメントは彼らがうまくいかないと言っています。

私の現在の状況と私が達成する必要があることを説明させてください。クイックリポジトリをインストールし、プロジェクトのサブモジュールとして追加しました。このコードはすでにチェックインされており、他の人が使用しています。私が今やらなければならないことは、同じクイックリポジトリをフォークして、私の会社が持っているより安全なgithubでホストすることです(つまり、完全に他のプライベートgithubです)。フォークした後、そのフォークをgitSubmoduleとして追加し、以前にインストールした現在のQuickサブモジュールを置き換えたいと思います。

更新:最新のgitバージョンでは以下が正しい方法であることを読みました。確認してください。

To remove a submodule added using:

git submodule add blah@blah.com:repos/blah.git lib/blah
Run:

git rm lib/blah
That's it.

For old versions of git (circa ~1.8.5) use:

git submodule deinit lib/blah
git rm lib/blah
git config -f .gitmodules --remove-section submodule.lib/blah

私は2日間サブモジュールの問題に取り組んできました。私がこれを見つけたとき、ブレークスルーが来ました:forums.developer.apple.com/thread/13102。基本的に、Xcodeやおそらく他のアプリは、「〜」を含むURLを展開するのに苦労しています。ssh://username@server.remoteHost.com/~/git/MyRepo.gitをssh://username@server.remoteHost.com/home/username/git/MyRepo.gitに変更したら(実際のパスを調べてください)サーバー上で)、すべての奇妙さは10分で消えました。
Elise van Looij 2018

回答:


193

あなたは git submodule deinit

git submodule deinit <asubmodule>    
git rm <asubmodule>
# Note: asubmodule (no trailing slash)
# or, if you want to leave it in your working tree
git rm --cached <asubmodule>
rm -rf .git/modules/<asubmodule>

deinit

指定されたサブモジュールの登録を解除しsubmodule.$nameます。つまり、作業ツリーとともに
セクション全体を削除し.git/configます。

さらにへの呼び出しgit submodule updategit submodule foreachおよびgit submodule syncますスキップあなたはもうあなたの仕事のツリー内のサブモジュールのローカルチェックアウトをしたくない場合、彼らが再び初期化されるまでは、未登録のサブモジュールは、ので、このコマンドを使用します。

本当にリポジトリからサブモジュールを削除して、git rm代わりにその使用をコミットしたい場合。

場合は--force、指定され、サブモジュールの作業ツリーは、それがローカルの変更が含まれている場合でも削除されます。


8
私と他のユーザーのためにサブモジュールを完全に一掃したいと思います。したがって、必要なのはgit submodule deinitasubmoduleだけです。およびgitrm asubmodule ?? また、他のユーザーがキャッシュしたサブモジュールについてはどうですか?プルダウンした後に削除する必要がありますか?
j2emanue 2015

1
サブモジュールのローカルコピーを削除したかったのですが、これは完全に機能し、サブディレクトリ内のすべてのファイルが失われました。
malhal 2016

1
rm -rf <asubmodule>サブモジュールの登録を解除したバージョンのベースリポジトリをすでにチェックアウトしている場合にも必要になることがあります。
サラメッサー2016年

6

私はGitバージョン2.16.2を使用git rmしており、ほとんどうまく機能しています。

git rm path-to-submodule

で確認しgit statusgit diff --cachedこれによりサブモジュールが非初期化され、.gitmodules自動的に変更されることを確認できます。いつものように、変更をコミットする必要があります。

ただし、サブモジュールがソース管理から削除されても、サブ.git/modules/path-to-submoduleモジュールリポジトリと.git/configそのURLが含まれているため、手動で削除する必要があります。

git config --remove-section submodule.path-to-submodule
rm -rf .git/modules/path-to-submodule

サブモジュールのリポジトリと構成を保持することは意図的なものであるため、たとえば、で削除を元に戻すことができますgit reset --hard


1
最新の回答と最短の解決策
TurboGuma

3

サブモジュールを安全に削除する方法。

https://stackoverflow.com/a/1260982/342794に追加)

  1. .gitmodulesファイル内のサブモジュールセクションを一覧表示して見つけます。ターミナル経由で言いvi .gitmodulesます。例:

    [submodule "submodules/afnetworking"]
        path = submodules/afnetworking
        url = https://github.com/CompanyName/afnetworking.git
    
  2. サブモジュールはローカルフォークで使用できます。長時間実行されるプロジェクトの場合、コードは元のリポジトリとは異なる場合があり、いくつかの修正がある場合があります。プロジェクトの過程でサブモジュールコードが変更されたかどうかを確認することをお勧めします。例:masterブランチまたはローカルブランチを指している場合は、ログを確認します。ターミナルを介して行われた変更を見つけるためにgitログを調べます。通常、これらはディレクトリの下に保存されsubmodulesます。私の例では、ディレクトリの下にあります。

    User$ cd submodules/afnetworking
    User$ git log
    
  3. .gitmodulesからサブモジュールセクションを削除し、ファイルを保存します。例:git status変更されたものとして以下のみを表示する必要があります

    modified:   .gitmodules
    
  4. で変更をステージングしgit add .gitmodulesます。

  5. .git/configファイル内のサブモジュールセクションを一覧表示して見つけます。ターミナル経由で言いvi .git/configます。例:

    [submodule "submodules/afnetworking"]
        url = https://github.com/CompanyName/afnetworking.git
    
  6. git cachesobmoduleファイルを削除します。実行するとgit rm --cached submodules/afnetworking(末尾のスラッシュなし)、正常に削除されます。例:

    User$ git rm --cached submodules/afnetworking
    rm 'submodules/afnetworking'    <-- terminal output
    
  7. .gitディレクトリの下にあるサブモジュールファイルをrm -rf .git/modules/...。で削除します。git status後で確認してください。

    User$ rm -rf .git/modules/submodules/afnetworking/
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
        modified:   .gitmodules
        deleted:    submodules/afnetworking
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    
  8. 変更をコミットします。git status後で確認してください。

    User$ git commit -m "Remove submodule afnetworking"
    [feature/replace-afnetworking-submodule-with-pod 70e239222] Remove submodule afnetworking
    2 files changed, 4 deletions(-)
      delete mode 160000 submodules/afnetworking
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    nothing added to commit but untracked files present (use "git add" to track)
    
  9. 追跡されていないサブモジュールファイルを削除します。

    User$ rm -rf submodules/afnetworking
    
  10. Xcodeプロジェクトから参照を削除します。ビルド、コンパイル、およびランタイムの問題を修正します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.