web-dev-qa-db-ja.com

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

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

私がうまくいくと思った手順は here ですが、コメントはそうではないと言っています。

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

更新:最新のgitバージョンで次の方法が正しいことを確認しましたか?

To remove a submodule added using:

git submodule add [email protected]: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
82
j2emanue

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が指定されている場合、サブモジュールの作業ツリーは、ローカルの変更が含まれていても削除されます。

167
CodeWizard

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

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 cache sobmoduleファイルを削除します。 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プロジェクトから参照を削除します。ビルド、コンパイルおよびランタイムの問題を修正します。

3
lal

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

git rm path-to-submodule

git statusおよびgit 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
mrts