2010-07-24 18 views
13

ich mitKann nicht von git Submodul loswerden

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

nur einige Haml Vorlagen meiner Rails 3 Projekt hinzugefügt zu finden, als ich versuchte, einige dieser Dateien zu bearbeiten, dass dies ein Submodul war, so Ich konnte keine Änderungen vornehmen, die ich im Verzeichnis lib/generators/haml vorgenommen habe. Nun jedes Mal, wenn ich git status, bekomme ich

# 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") 

aber git add lib/generators/haml hat keine Wirkung. Ich möchte wirklich nur die Dateien haben, kein Submodul, aber ich finde das Submodul unmöglich, sie wieder loszuwerden:

> 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 

Zusätzliche git add s nutzlos sind. Wenn ich git rm -rf lib/generators/haml versuchen, erhalte ich

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

Es will einfach nicht sterben! Ich habe how to delete submodules nachgeschlagen, aber in diesem Fall gibt es keine .submodules Datei, noch gibt es eine Erwähnung des Submoduls in .git/config. Doch wenn ich git submodule update laufen, bekomme ich

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

ich das Verzeichnis gelöscht, aber ich bekomme die gleichen Ergebnisse! Was ist los? Muss ich eine .gitmodules Datei erstellen, nur um das Submodul zu löschen?

Antwort

6

Wenn kein Submodul ist, ist es möglich, es (das heißt 'haml') nicht wirklich ist ein Submodul?

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

bedeutet: lib/generators/haml Verzeichnis erstellen, und Check-out in den Hauptzweig git://github.com/psynix/rails3_haml_scaffold_generator.git.

Die Tatsache, dass Sie eine git status nicht von der Wurzel Ihres neuen Repo tun können (lib/generators/haml), aber über drei Ebenen (wo lib ist) bedeutet, dass Sie ein Repo-Klon in einem Repo haben.

Beide Repos können unabhängig voneinander arbeiten, aber Sie sollten lib/generators/haml zu dem .gitignore des übergeordneten Repos hinzufügen (wie in den Treffern SO question).

+0

Danke, es zu '.gitignore' hinzuzufügen, war eine gute Idee. –

+1

aber dies wird nicht die neuen Dateien in den Repo, FYI – andho

+0

mein Problem erwies sich als nicht verwandt, aber dies half. –

6

Das Submodul wird im git-Status als geändert angezeigt, wenn es nicht geordnete Dateien enthält. Wenn Sie git diff lib/generators/haml aufrufen, werden Sie am meisten likeyl etwas sehen:

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 

Das bedeutet, dass in diesem Modul sind einige untracked links-Dateien. Sie können nicht über Befehle im übergeordneten Projekt hinzugefügt werden. Stattdessen sollten Sie in das Submodul einsteigen und diese hinzufügen (oder Einträge zu .gitignore hinzufügen) ... oder Sie können einfach die Statusmeldung ignorieren.

Die neueste git Version (1.7.1, glaube ich) zeigt diese Informationen in 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 (untracked content) 
+0

OK, ich denke, ich verstehe: Ich sollte in 'lib/generators/haml' gehen und dann Sachen von da aus machen, wenn ich etwas darin ändere. Wie Sie vorgeschlagen haben, aktualisierte ich meine Git von 1.7.0.5 zu 1.7.2, und das gibt mir die nützlichere Nachricht. Es bläst mich immer noch, dass Git dachte, dass es ein Submodul gab, selbst nachdem ich "lib/generators/haml" mit seinem '.git'-Verzeichnis weggeblasen hatte. –

0

Sie könnten verwendet haben:

git add lib/generators/haml/ 

die Dateien im Modul in die HEAD hinzuzufügen und das Submodul zu entfernen.Aber dann funktioniert es vielleicht nicht, weil Sie kein Submodul haben.

Beachten Sie, dass hinter dem Pfad ein Schrägstrich steht. Wenn Sie setzen diese git das Submodul entfernt und legt sie in den Kopf, im Gegensatz zu:

git add lib/generators/haml 

das wird nur die vom Submodul in git ausgecheckt werden Submodule ändern begehen.

Verwandte Themen