7

解決策:から削除--cachedgit rm -r --cached submodule/nameます。 参照用にスクリプト化されています。


このSOの回答に基づいてgitサブモジュールを削除しようとしていますが、サブモジュールが削除されていません。

サブモジュールを追加し、変更をコミットしてgit rm -r --cached $path/to/submoduleから、(末尾の/を除いた)を使用して削除し、変更をコミットしますが、サブモジュールはまだ存在しています。

フォルダとコンテンツを削除するために使用できますrm -rf submodules/lift_sbt_24が、なぜそれを行わないのgit rm -r --cachedですか?

(.gitmodulesから関連するセクションを削除しても問題なく動作するため、ここでは説明しません)

これは、Ubuntu 11.10、fwiwのgit1.7.5.4です。完全な例:

$> git submodule add git@github.com:lift-stack/lift_24_sbt.git submodules/lift_24_sbt
Adding submodule from repo git@github.com:lift-stack/lift_24_sbt.git as submodules/lift_24_sbt
Cloning into submodules/lift_24_sbt...
remote: Counting objects: 619, done.
remote: Compressing objects: 100% (375/375), done.
remote: Total 619 (delta 172), reused 593 (delta 147)
Receiving objects: 100% (619/619), 1.74 MiB | 112 KiB/s, done.
Resolving deltas: 100% (172/172), done.
$> git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commits.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitmodules
#   new file:   submodules/lift_24_sbt
#
$> git add -a
$> git commit 'added submodules/lift_24_sbt'
[master 9894113] update
 2 files changed, 4 insertions(+), 0 deletions(-)
 create mode 160000 submodules/lift_24_sbt
$> git rm -r --cached submodules/lift_24_sbt
rm 'submodules/lift_24_sbt'
$> git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commits.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    submodules/lift_24_sbt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   submodules/lift_24_sbt/
$> git add -a
$> git commit -m 'deleted submodules/lift_24_sbt'
# On branch master
# Your branch is ahead of 'origin/master' by 1 commits.
#
nothing to commit (working directory clean)
$> ls -al submodules/lift_24_sbt/
total 1060
drwxr-xr-x 5 kurtosis kurtosis    4096 2012-04-18 17:26 ./
drwxrwxr-x 6 kurtosis kurtosis    4096 2012-04-18 17:26 ../
drwxrwxr-x 8 kurtosis kurtosis    4096 2012-04-18 17:32 .git/
drwxrwxr-x 2 kurtosis kurtosis    4096 2012-04-18 17:26 project/
drwxrwxr-x 3 kurtosis kurtosis    4096 2012-04-18 17:26 src/
-rw-rw-r-- 1 kurtosis kurtosis     931 2012-04-18 17:26 build.sbt
-rw-rw-r-- 1 kurtosis kurtosis     463 2012-04-18 17:26 .gitignore
-rw-rw-r-- 1 kurtosis kurtosis      91 2012-04-18 17:26 README.md
-rwxrwxr-x 1 kurtosis kurtosis     110 2012-04-18 17:26 sbt*
-rw-rw-r-- 1 kurtosis kurtosis     131 2012-04-18 17:26 sbt.bat
-rw-rw-r-- 1 kurtosis kurtosis 1041753 2012-04-18 17:26 sbt-launch.jar
$> git --version
git version 1.7.5.4
4

2 に答える 2

12

あなたが見ているものは正しいです。実際には、からファイルを削除するのでgit rm --cached -rなくworking tree、からのみファイルを削除しますindexgit両方からファイルを削除する場合は、を使用しないでください。詳細については、manページを参照してください。 index working tree--cachedgit-rm


以下はあなたがしたことの説明です。端末からコピーするのではなく、実行した手順を入力したと想定しています。私の知る限り、既知のgit-addフラグgit add -aではありません; 私はあなたも意味しているとかなり確信しています。git commit -m <message>

あなたが取った削減ステップ:


# First, add the submodule. 
$> git submodule add git@github.com:lift-stack/lift_24_sbt.git submodules/lift_24_sbt
# Check that the submodule exists. (It does). 
$> git status
# Add everything to the staging area from the working tree. 
$> git add -a
# Commit all changes. 
$> git commit 'added submodules/lift_24_sbt'

この時点で、モジュールは正常に追加され、すべてが期待どおりに機能しています。
次にやろうとしていることは、モジュールを削除することです。

$> git rm -r --cached submodules/lift_24_sbt

:ここでは、 :のために、からのみファイルを削除しますworking indexindex--cached

--cached
       Use this option to unstage and remove paths only from the index. Working tree
       files, whether modified or not, will be left alone.

次に、サブモジュールを削除したことを確認します。

$> git status
... <snip> 
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    submodules/lift_24_sbt

ご覧のとおり、サブモジュールは削除されており、すべて正常です。ただし、ファイルは作業ツリーにまだ存在していることに注意してください。ファイルは。で表示できますls。:)

于 2012-05-06T02:25:36.233 に答える
1

「 Gitサブモジュールを削除するにはどうすればよいですか?」に対する新しい回答で詳しく説明されている新しいコマンド(git1.8.3、2013年4月22日)を使用して、スクリプトを簡単に試すことができます。

git submodule deinit

It should remove the submodule working tree as well as unregister it from .git/config.

于 2013-04-23T06:09:29.830 に答える