git clean не удаляет подмодуль, добавленный в ветку при переключении ветвей

Как избавиться от подмодулей при переключении ветвей. Я не понимаю, почему 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)
28
задан Adrian Cornish 16 February 2012 в 21:15
поделиться

1 ответ

Это не ошибка, это задокументированное поведение. Из 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)
43
ответ дан 28 November 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: