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
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 update
、git submodule foreach
、およびgit submodule sync
をさらに呼び出すと、スキップ再度初期化されるまで、未登録のサブモジュールがあります。作業ツリー内のサブモジュールのローカルチェックアウトはもうありません。本当にリポジトリからサブモジュールを削除してコミットする場合、代わりに
git rm
を使用します。
--force
が指定されている場合、サブモジュールの作業ツリーは、ローカルの変更が含まれていても削除されます。
( https://stackoverflow.com/a/1260982/342794 に追加)
.gitmodules
ファイル内のサブモジュールセクションをリストして見つけます。ターミナルvi .gitmodules
で発声します。例:
[submodule "submodules/afnetworking"]
path = submodules/afnetworking
url = https://github.com/CompanyName/afnetworking.git
サブモジュールはローカルフォークで使用できます。長期実行プロジェクトの場合、コードは元のレポと異なる場合があり、いくつかの修正が必要になる場合があります。サブモジュールのコードがプロジェクトの過程で変更を経たかどうかを確認することをお勧めします。例:master
ブランチまたはローカルブランチを指している場合は、ログを確認します。 gitログを調べて、ターミナルを介して行われた変更を見つけます。通常、これらは、私の例では、submodules
ディレクトリの下のディレクトリに保存されます。
User$ cd submodules/afnetworking
User$ git log
.gitmodulesからサブモジュールセクションを削除し、ファイルを保存します。例:git status
は、変更されたものとして以下のみを表示する必要があります
modified: .gitmodules
git add .gitmodules
で変更をステージングします。
.git/config
ファイル内のサブモジュールセクションをリストして見つけます。ターミナルvi .git/config
で発声します。例:
[submodule "submodules/afnetworking"]
url = https://github.com/CompanyName/afnetworking.git
Git cache sobmoduleファイルを削除します。 git rm --cached submodules/afnetworking
(末尾のスラッシュなし)を実行すると、正常に削除されます。例:
User$ git rm --cached submodules/afnetworking
rm 'submodules/afnetworking' <-- terminal output
.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/
変更をコミットします。その後、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)
追跡されていないサブモジュールファイルを削除します。
User$ rm -rf submodules/afnetworking
Xcodeプロジェクトから参照を削除します。ビルド、コンパイルおよびランタイムの問題を修正します。
私は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
。