2012-03-26 14 views
11

Ich habe ein Git-Repository mit Submodulen im Verzeichnis projects/myRepo und ich möchte das Verzeichnis in projects/my-repo umbenennen.Wie kann ich ein Git-Repository mit Submodulen umbenennen?

Nach this Frage kann es einfach mit mv getan werden. Aber in einem Repo mit Submodule git immer wieder sagt mir

fatal: Kein git-Repository: Projekte/myrepo/.git/path/to/submodule```

auch für git status.

Submodul config:

[submodule "path/to/submodule"] 
    path = path/to/submodule 
    url = https://github.com/user/projectName.git 

Irgendwie ist der interne Pfad "für das Submodul nicht aktualisiert ?! Gibt es eine Möglichkeit, Git zu sagen, diese Submodulpfade zu aktualisieren?

+0

Das sollte einfach funktionieren. Was befindet sich in der Datei .gitmodule? – Weston

+0

@Weston, siehe meine aktualisierte Frage. Aber selbst wenn ich diesen Abschnitt aus der Datei .gitmodules entferne, wird derselbe Fehler angezeigt. Wenn ich das Eltern-Verzeichnis wieder in den ursprünglichen Namen umbenenne, kotzt git nicht mehr. – schmunk

+0

Hmm .. Ich habe gerade versucht, einen Test Repo mit einem Submodul zu machen. Dann habe ich es geklont, init'ed und das Submodul im Klon aktualisiert und dann den Klon mit mv umbenannt. Alles scheint wie erwartet zu funktionieren ...? – Weston

Antwort

0

Seit Weston ‚s Test (Klon, init und Aktualisierung eines Submodul in einem geklonten Repo) arbeitete wie erwartet, wenn Sie das Verzeichnis mit dem Submodul umbenennen, vermute ich etwas im Submodul .git sich in Ihrem ursprünglichen Git falsch gewesen sein musste Repo Submodul.

Sie könnten in diesem ersten Submodul nach einer beliebigen Datei suchen, die auf 'myRepo' verweist.
Sie können auch den Inhalt der beiden Submodule vergleichen (die erste Sie umbenennen wollte, und die zweite in den Repo enthalten, die Sie geklont)

+0

Bitte beachten Sie die Namen hier .. Ich, nicht das OP, machte besagten Test. :-) Aber vielleicht sollte OP den gleichen Test machen, um seine Installation zu verifizieren. – Weston

+0

@Weston Entschuldigung, ich war nicht komplett wach, als ich das schrieb;) – VonC

+0

Ich konnte das Problem nicht reproduzieren, also glaube ich, dass ich beim Refactoring des Projekts etwas vermasselt habe. Wenn ich die Zeit habe, werde ich das kaputte Repo untersuchen, bis dahin habe ich einen neuen Klon erstellt, der gut funktioniert. Danke für Ihre Hilfe. – schmunk

2

ich den gleichen Fehler auch nach dem Wechsel mein Projektverzeichnis hatte. Ich habe ein iOS 6 XCode 4-Projekt, aber das sollte keine Rolle spielen.

Für jedes Submodul müssen Sie den absoluten Pfad ändern, in dem es sich befindet. Der Pfad wird in der GIT-Datei für dieses Submodul festgelegt. .git in einem Submodul ist eine Datei im Gegensatz zu einem Verzeichnis in einem Standard-Git-Verzeichnis.

Ändern Sie für jedes Submodul die GITDIR-Zeile in der GIT-Datei. Hier ist ein Beispiel aus meinem Projekt:

Datei: /path/to/project/submodules/RestKit/.git

Vor gitdir: /path/to/project//.git/modules/ Submodule/RestKit

Nach gitdir: /path/to/project//.git/modules/submodules/RestKit

+2

Ich musste auch meinen ** worktree ** -Pfad in .git/modules/path/to/project/submodules/RestKit/config ändern – tuxinaut

3

ich Erfahrung genau das gleiche Verhalten haben. Ich konnte es beheben, indem ich Verzeichnisse mit Submodulen löschte, sie als leere Verzeichnisse mit dem richtigen Namen neu erstellte und dann git submodule update --init ausführte, um sie neu zu initialisieren. Alles jetzt behoben. Wahrscheinlich einige Berechtigungsprobleme (ich habe diese Verzeichnisse früher aus dem Backup geholt und die Berechtigungen dafür sind manchmal merkwürdig).

0

Heute hatte ich das gleiche Problem das Submodul zu benennen und schließlich fixiert ich es mit den folgenden Schritten:

Angenommen, das alte Modulnamen old/module und der neue ist new/module/path

  1. bei der Wurzel des repo (repo_root) mv old/module new/module/path
  2. zum .git/modules
    1. mv old/module new/module/path (bei Bedarf zuerst den Ordner erstellen)
    2. ändern new/module/name/config: Aktualisieren Sie den Eintrag worktree. Es sollte .git/config der Master-Repo repo_root/.git/modules/new/module/path
    3. Änderung aus dieser Datei zu repo_root/new/module/path
  3. gehen zu repo_root und bearbeiten new/module/path/.git, ändern Sie die gitdir auf den relativen Pfad der relative Pfad aus dieser Konfigurationsdatei sein: Finden Sie die Zeile enthält [submodule "old/module"] und Update auf [submodule "new/module/path"]
Verwandte Themen