Как избавиться от подмодулей при переключении ветвей. Я не понимаю, почему git clean говорит, что удалил подмодуль, но не делает этого. Это ошибка? Ниже приведены шаги вырезания и вставки для воспроизведения.
git --version
git version 1.7.8.4
git init submod
cd submod
echo "This is a submodule" > README.txt
git add .
git commit -m "Initial commit"
cd ..
git init prog
cd prog
echo "This is a program" > README.txt
git add .
git commit -a -m "Initial commit"
git checkout -b topic1
git submodule add ../submod
git commit -m "Added submodule"
git checkout master
#warning: unable to rmdir submod: Directory not empty
#Switched to branch 'master'
git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# submod/
#nothing added to commit but untracked files present (use "git add" to track)
git clean -fd
#Removing submod/
git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# submod/
#nothing added to commit but untracked files present (use "git add" to track)
Это не ошибка, это задокументированное поведение. Из man git-clean
:
Если неотслеживаемый каталог управляется другим хранилищем git, по умолчанию он не удаляется.
Каталог submod
- это другое хранилище git
; если вы хотите удалить его, Use -f option twice if you really want to remove such a directory
.
git clean -f -f -d submod
действительно удаляют submod
. Смотрите мои шаги ниже (почти идентичные; разные git version
и жестко закодированные submodule
пути, потому что в противном случае git
плюет на пустышку).
$ git --version
git version 1.7.5.4 # Note, different git-version.
git init submod
cd submod
echo "This is a submodule" > README.txt
git add .
git commit -m "Initial commit"
cd ..
git init prog
cd prog
echo "This is a program" > README.txt
git add .
git commit -a -m "Initial commit"
submod
как git submodule
в ветку topic1
.
git checkout -b topic1
git submodule add /Users/simont/sandbox/SOTESTING/Subdir-testing/submod
git commit -m "Added submodule"
$ git checkout master
warning: unable to rmdir submod: Directory not empty
Switched to branch 'master'
git status
# On branch master
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# submod/
#nothing added to commit but untracked files present (use "git add" to track)
git-clean
, затем на самом деле git-clean
.
git clean -fd
#Removing submod/
git status
# On branch master
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# submod/
#nothing added to commit but untracked files present (use "git add" to track)
$ # As we can see, we haven't actually removed anything yet.
$ ls
README.txt submod
$ git clean -f -f -d submod
Removing submod/
$ ls
README.txt
$ git status
# On branch master
nothing to commit (working directory clean)