2012-04-19 11 views
7

解決方法:git rm -r --cached submodule/nameから--cachedを削除してください。参照のためScriptedgit rm -r --cachedサブモジュールのフォルダと内容を削除しない


私はthis SO answerに基づいてGitのサブモジュールを削除しようとしているが、サブモジュールは削除されていません。

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

rm -rf submodules/lift_sbt_24を使用してフォルダとコンテンツを削除することはできますが、なぜgit rm -r --cachedはそうしないのですか?

(.gitmodulesから関連するセクションを削除すると正常に動作します、したがって、ここでは言及していない、問題ありません)

これはUbuntuの11.10、FWIWのGit 1.7.5.4です。完全な例:

$> git submodule add [email protected]:lift-stack/lift_24_sbt.git submodules/lift_24_sbt 
Adding submodule from repo [email protected]: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 

答えて

12

あなたが見ていることは正しいです。 git rm --cached -rではなく、であり、実際にはからファイルを削除するのはindexです。 gitindexworking treeの両方からファイルを削除したい場合は、--cachedを使用しないでください。詳細については、git-rm man pageを参照してください。


以下は、あなたが行ったことの説明です。私はあなたが端末からコピーするのではなく、あなたが取った手順をタイプしたと仮定しています。私が知っている限り、git add -anot a known git-add flagです。また、あなたもgit commit -m <message>を意味すると確信しています。あなたが撮影した

カットダウンのステップ:この時点で


# First, add the submodule. 
$> git submodule add [email protected]: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 indexからのみindexからのファイルを削除しますかを--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で表示できます。それは削除する必要があります

git submodule deinit 

::)

+0

ありがとうございました。私は 'git add -A'と' git commit -m'を意味しました。削除された - git rm -r $ 1'と[scripted it](https://github.com/byrongibson/scripts/blob/master/git-rm-submodule.sh)からキャッシュされました。スクリプトでこれを行うのは賢明ではないかもしれませんが、ステップバイステップの参考資料としては少なくとも役に立ちます。 – Kurtosis

1

あなたは "How do I remove a Git submodule?" への新たな答えで詳細な、新しいコマンド(git1.8.3、4月22D、2013)を使用して、スクリプトを試してみて、simpliyfyことができますサブモジュールの作業ツリーは、.git/configから登録解除するだけでなく、

関連する問題