14

我在我的 Rails 3 项目中添加了一些 Haml 模板

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的 s 是没用的。如果我尝试git rm -rf lib/generators/haml,我会得到

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

它只是不会死!我查找了如何删除 submodules,但在这种情况下,没有.submodules文件,也没有提及.git/config. 然而,如果我跑步git submodule update,我会得到

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

我删除了目录,但我得到了相同的结果!这是怎么回事?我是否需要创建一个.gitmodules文件来删除子模块?

4

3 回答 3

6

如果子模块有未跟踪的文件,它会在 git status 中显示为已修改。如果您调用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

这意味着在这个子模块内部还有一些未跟踪的文件。不能通过父项目中的命令添加;相反,您应该遍历 sumbodule 并添加它们(或将条目添加到.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)
于 2010-07-24T21:14:14.473 回答
6

如果没有子模块,它(即' 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是)执行操作,这意味着您已经在存储库中克隆了一个存储库。

两个 repo 都可以独立工作,但您应该添加 lib/generators/haml.gitignore父 repo 中(就像在 hits SO question中一样)。

于 2010-07-24T21:20:13.363 回答
0

你可以使用:

git add lib/generators/haml/

将子模块中的文件添加到 HEAD 并删除子模块。但是话又说回来,它可能不起作用,因为您实际上并没有子模块。

请注意,路径后面有一个斜杠。如果你把这个 git 删除子模块并把它放到 HEAD 中,不像:

git add lib/generators/haml

这只会更改要从 git 子模块中的子模块签出的提交。

于 2011-04-11T14:59:04.227 回答