2011-07-28 5 views
20

J'ai uncopier/mv répertoire à un autre répertoire git

dir1/contient un fichier de lot et subdirecties, je veux changer le nom du répertoire à dir2 /. J'ai essayé

git mv dir1/dir2/

Je suis arrivé ce message:

fatal: renaming 'dir1' failed: Permission denied 

mise à jour:

Je courais de git pour Windows ligne de commande http://code.google.com/p/msysgit/
Qu'est-ce que est la commande correcte?

+0

Quel système d'exploitation utilisez-vous pour exécuter ces commandes? – dwmcc

+0

J'ai couru à partir de la ligne de commande de git for windows http://code.google.com/p/msysgit/ – icn

Répondre

9

Vous pouvez simplement utiliser des outils Unix standard, ou quel que soit votre système d'exploitation. Donc:

mv dir1 dir2 

devrait fonctionner. Assurez-vous simplement d'ajouter dir1 et dir2 à la zone de transit après avoir fait cela, afin que vous validiez les changements.

Un exemple de la façon de commettre le changement (une fois fait) pourrait être:

git add dir1 dir2 && git commit dir1 dir2 

Il y a probablement d'autres façons de le faire aussi.

+4

Je suis sûr que vous perdrez l'historique des modifications des fichiers que vous déplacez indépendamment de Git. – Vince

+3

@Ghodmode: non, git est basé sur le contenu et renomme la détection en fonction du contenu du fichier. – user518450

0

Je cours git dans cygwin. J'ai eu le même problème jusqu'à ce que je supprime les fichiers non traités du répertoire à renommer. Cela a permis au git mv de se terminer correctement.

Si vous voyez des fichiers non suivis dans votre répertoire à renommer lorsque vous exécutez git status, vous devrez déplacer temporairement ces fichiers ailleurs et les rétablir après le git mv.

20

Il se peut également que le répertoire (ou un fichier à l'intérieur) soit utilisé par un autre programme, ce qui vous empêche de faire quoi que ce soit avec ce dossier. Seulement sur Windows, évidemment.

Utilisez le Process Explorer si vous ne savez pas quel programme a capturé ce répertoire/fichier.

+0

C'était exactement la cause du problème pour moi. Je pense que c'est une meilleure réponse que la réponse acceptée, car déplacer le répertoire indépendamment de Git vous fera perdre l'historique des modifications de l'un des fichiers dans le répertoire que vous déplacez. En plus de cela, ne va-t-il pas échouer de toute façon si le système d'exploitation a des fichiers dans le répertoire verrouillé? – Vince

+0

Il a résolu mon problème aussi. TGitCache.exe était le processus pour contenir le dossier.Je suspecte que TGitCache maintiendra chaque dossier sous le contrôle de git faisant la commande de renommer ne fonctionnant pas presque 100% du temps. –

+0

Cela a résolu mon problème aussi bien! BTW, j'utilise habituellement [unlocker] (http://emptyloop.com/unlocker/) pour déverrouiller les fichiers verrouillés par un processus. –

2

Les répertoires source et cible doivent tous deux être vérifiés dans le référentiel git. Si vous déplacez dir1 vers dir2 et que dir2 n'a pas encore été validé, vous obtiendrez ce message d'erreur.

0

J'ai eu le même problème. TGitCache.exe était le processus qui empêchait le dossier d'être renommé. En utilisant TaksExplorer j'ai tué le processus et exécutez la commande à partir de l'invite de commande Git Bash.

Questions connexes