Не могу избавиться от подмодуля git - PullRequest
14 голосов
/ 25 июля 2010

Я добавил несколько шаблонов Haml в свой проект Rails 3 с

git clone git://github.com/psynix/rails3_haml_scaffold_generator.git lib/generators/haml

обнаружил, что когда я пытался редактировать некоторые из этих файлов, это был субмодуль, поэтому я не смог зафиксировать изменения, которые я сделал в каталоге lib/generators/haml. Теперь каждый раз, когда я git status, я получаю

# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   lib/generators/haml
#
no changes added to commit (use "git add" and/or "git commit -a")

но git add lib/generators/haml не имеет никакого эффекта. Я действительно просто хочу иметь файлы, а не подмодуль, но я не могу избавиться от подмодуля:

> git rm --cached lib/generators/haml
rm 'lib/generators/haml'
> git status

# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    lib/generators/haml
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   lib/generators/

> git commit -m "Removed submodule"

[master 02ae4c7] Removed submodule
 1 files changed, 0 insertions(+), 1 deletions(-)
 delete mode 160000 lib/generators/haml

> git status

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   lib/generators/
nothing added to commit but untracked files present (use "git add" to track)

> git add lib/generators/haml
> git status

# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   lib/generators/haml
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   lib/generators/haml

> git commit -m "Re-added lib/generators/haml"

[master c966912] Re-added lib/generators/haml
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 160000 lib/generators/haml

> git status

# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   lib/generators/haml

Дополнительные git add бесполезны. Если я попытаюсь git rm -rf lib/generators/haml, я получу

fatal: git rm: 'lib/generators/haml': Operation not permitted

Он просто не умрет! Я посмотрел , как удалить подмодули , но в этом случае нет файла .submodules и нет упоминания о подмодуле в .git/config. Тем не менее, если я бегу git submodule update, я получаю

No submodule mapping found in .gitmodules for path 'lib/generators/haml'

Я удалил каталог, но получаю те же результаты! В чем дело? Нужно ли создавать .gitmodules файл только для удаления подмодуля?

Ответы [ 3 ]

6 голосов
/ 25 июля 2010

Если подмодуля нет, возможно ли, что он (т. Е. 'haml') действительно , а не подмодуль?

git clone git://github.com/psynix/rails3_haml_scaffold_generator.git lib/generators/haml

означает: создайте каталог lib/generators/haml и извлеките в нем основную ветвь git://github.com/psynix/rails3_haml_scaffold_generator.git.

Тот факт, что вы можете сделать git status не из корня вашего нового репо (lib/generators/haml), а на три уровня выше (где lib) означает, что вы клонировали репо в репо.

Оба репо могут работать независимо, но вы должны добавить lib/generators/haml к .gitignore родительского репо (как в хитах SO вопрос ).

6 голосов
/ 25 июля 2010

Подмодуль отображается в состоянии git как измененный, если в нем есть неотслеживаемые файлы. Если вы вызовете git diff lib/generators/haml, вы, скорее всего, увидите что-то вроде этого:

diff --git a/lib/generators/haml b/lib/generators/haml
index 3019fec..653c59a 160000
--- a/lib/generators/haml
+++ b/lib/generators/haml
@@ -1 +1 @@
-Subproject commit 653c59ad72925c9ccbde67e8e484e15d4b6dd25d
+Subproject commit 653c59ad72925c9ccbde67e8e484e15d4b6dd25d-dirty

Это означает, что внутри этого подмодуля осталось несколько неотслеживаемых файлов. Их нельзя добавить с помощью команд в родительском проекте; вместо этого вы должны перейти к сумбодулю и добавить их (или добавить записи в .gitignore) ... Или вы можете просто игнорировать сообщение о состоянии.

Последняя версия git (я думаю, 1.7.1) отображает эту информацию в статусе:

# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   lib/generators/haml (untracked content)
0 голосов
/ 11 апреля 2011

Вы могли бы использовать:

git add lib/generators/haml/

, чтобы добавить файлы в подмодуле в HEAD и удалить подмодуль.Но опять же, это может не сработать, потому что у вас нет субмодуля.

Обратите внимание, что после пути есть косая черта.Если вы установите этот git, вы удалите подмодуль и поместите его в HEAD, в отличие от:

git add lib/generators/haml

, который просто изменит коммит, который будет извлечен из подмодуля в подмодулях git.

...