J'ai créé un dossier common
avec un tas de fichiers et de dossiers source.
Maintenant, je veux déplacer le common
dossier dans le include
dossier pour qu'il ressemble àinclude/common
J'ai essayé ceux-ci:
git add include
git mv common/ include/
mais cela échoue avec cette erreur
fatal: mauvaise source, source = myrepo / common, destination = myrepo / include
J'ai essayé
git mv common/ include/common
mais j'obtiens la même erreur
Une idée comment y parvenir?
git mv
est équivalent.devrait marcher.
Depuis la
git mv
page de manuel :Aucun "
git add
" ne doit être fait avant le déménagement.Remarque: "
git mv A B/
", lorsqu'ilB
n'existe pas en tant que répertoire, devrait afficher une erreur, mais ce n'est pas le cas.Voir commit c57f628 par Matthieu Moy (
moy
) pour Git 1.9 / 2.0 (Q1 2014):la source
git mv
semble être une bien meilleure approche!Commander:
Cela fonctionne généralement bien.
L'erreur "mauvaise source ..." indique généralement qu'après la dernière validation, il y a eu des renoms dans le répertoire source et donc
git mv
ne peut pas trouver le fichier attendu.La solution est simple: il vous suffit de vous engager avant de postuler
git mv
.la source
Assurez-vous d'avoir ajouté toutes vos modifications à la zone de préparation avant d'exécuter
git échoue avec une erreur
s'il y a des fichiers non ajoutés, je viens de le découvrir.
la source
Une autre façon de déplacer tous les fichiers d'un répertoire vers un sous-répertoire (conserve l'historique de git):
$ for file in $(ls | grep -v 'subDir'); do git mv $file subDir; done;
la source
J'ai eu un problème similaire avec l'
git mv
endroit où je voulais déplacer le contenu d'un dossier dans un dossier existant, et je me suis retrouvé avec ce script "simple":Explication
git ls-files
: Trouver tous les fichiers (dans lecommon
dossier) archivés dans gitnewdir="../include/$(dirname $f)"; mkdir -p $newdir;
: Créez un nouveau dossier dans leinclude
dossier, avec la même structure de répertoires quecommon
git mv $f $newdir/$(basename "$f")
: Déplacez le fichier dans le dossier nouvellement crééLa raison en est que git semble avoir des problèmes pour déplacer des fichiers dans des dossiers existants, et qu'il échouera également si vous essayez de déplacer un fichier dans un dossier inexistant (par conséquent
mkdir -p
).L'avantage de cette approche est qu'elle ne touche que les fichiers qui sont déjà enregistrés dans git. En utilisant simplement
git mv
pour déplacer un dossier entier, et le dossier contient des modifications non organisées, git ne saura pas quoi faire.Après avoir déplacé les fichiers, vous voudrez peut-être nettoyer le référentiel pour supprimer toutes les modifications non mises en scène restantes - n'oubliez pas de commencer par exécuter à sec!
la source
Je suis désolé de ne pas avoir assez de réputation pour commenter la "réponse" de "Andres Jaan Tack".
Je pense que mon message sera supprimé ((mais je veux juste avertir "lurscher" et les autres qui ont eu la même erreur: faites attention
Cela peut entraîner que vous ne verrez pas l'historique git de votre projet dans un nouveau dossier.
j'ai essayé
eu
J'ai fait
et
et je ne vois pas la vieille histoire de git dans mon projet. Au moins mon projet n'est pas perdu. Maintenant, j'ai mon projet dans newFolderName, mais sans l'historique (
Je veux juste avertir, soyez prudent en utilisant les conseils de "Andres Jaan Tack", si vous ne voulez pas perdre votre git hsitory.
la source
J'ai eu un problème similaire, mais dans le dossier que je voulais déplacer, j'avais des fichiers que je ne suivais pas.
disons que j'avais des fichiers
Et je voulais déplacer uniquement les fichiers suivis vers le sous
subdir
- dossier , donc l'objectif était:ce que j'avais fait était:
mkdir tmpdir && mv a b tmpdir
git checkout a b
mkdir subdir && mv a b subdir
git add --update
avec une astuce de changement de répertoire ):git add subdir
(normalement cela ajouterait même des fichiers non suivis - cela nécessiterait de créer un.gitignore
fichier)git status
affiche maintenant uniquement les fichiers déplacésmv tmpdir/* subdir
git status
on dirait que nous avons exécutégit mv
:)la source
J'ai résolu cela sur Windows en faisant ceci:
(.*)
pargit mv ".\\\1" ".\\<New_Folder_Here>\"
la source