Dans un référentiel Git, comment renommer correctement un répertoire?

655

Je pense que cela devrait fonctionner pour copier le répertoire à renommer dans un nouveau répertoire avec le nom souhaité, et supprimer l'ancien répertoire , et git add, git commitet pushtout. Mais est-ce la meilleure façon?

qazwsx
la source
5
En ce qui concerne Git, une copie et une suppression est la même chose qu'un déplacement. Git enregistrera à la fois (copier + supprimer) et (déplacer) de la même manière.
Dietrich Epp

Réponses:

1183

Renommer (ou déplacer) de base:

git mv <old name> <new name>

Renommer sensible à la casse, par exemple. de casesensitiveà - CaseSensitivevous devez suivre deux étapes:

git mv casesensitive tmp
git mv tmp CaseSensitive

(En savoir plus sur la sensibilité à la casse dans Git… )

… Suivi de commit et push serait le moyen le plus simple de renommer un répertoire dans un dépôt git.

CB Bailey
la source
231
Mais si vous voulez renommer de casesensitiveà CaseSensitive, vous pouvez le faire de cette façon: git mv casesensitive Temppuis git mv Temp CaseSensitive
ViliusK
3
Enregistre-t-il tous les journaux et statistiques?
orezvani
23
@ViliusK si vous traitez des répertoires sensibles à la casse de la manière la plus simple que j'ai trouvée, git rm -rf --cached path/to/your/directoriesajoutez-le et
validez
1
Mais pourquoi GIT n'a pas un support approprié pour le changement de nom pour un package / répertoire? Pourquoi dois-je même créer un dossier séparé. Lorsque je change un nom de package, ne devrait-il pas le prendre comme une différence et s'en occuper au moment de la validation et de la transmission?
Ahmed
1
Merci beaucoup pour cela. Pour moi, je devais d'abord exécuter git config core.ignorecase falsepuis exécuter les commandes successivement, sinon, pour la deuxième partie, j'obtiendrais une source is emptyerreur.
Rika
107

Si vous recevez cette erreur: fatal: échec du changement de nom de "nom de dossier": argument non valide

Essaye ça:

git mv foldername tempname && git mv tempname folderName

Jacques Betancourt
la source
8
C'est exactement ce dont j'avais besoin pour faire un changement de casse dans un répertoire.
cjserio
Le jeton '&&' n'est pas un séparateur d'instructions valide dans cette version. git version 2.11.0.windows.
Tim Hardy
@Tim Hardy, il peut également être exécuté en tant que deux commandes distinctes, git mv foldername tempnameet git mv tempname folderName, qui devrait fonctionner sous Windows.
Larkeith
cela ne fonctionne pas ! le résultat final mettra un nouveau dossier 'nom_dossier' dans le dossier 'tempname'
pariez
61

1. Changez le nom d'un dossier de oldfolder en newfolder

git mv oldfolder newfolder

2. Si newfolder est déjà dans votre référentiel et que vous souhaitez le remplacer et utiliser: - force

git mv -f oldfolder newfolder

N'oubliez pas d'ajouter les modifications à l'index et de les valider après avoir renommé avec git mv.

3. Renommer le nom de dossier en nom de dossier sur les systèmes de fichiers insensibles à la casse

Un simple changement de nom avec une commande mv normale (pas git mv) ne sera pas reconnu comme un changement de fichier de git. Si vous l'essayez avec la commande 'git mv' comme dans la ligne suivante

git mv foldername folderName

Si vous utilisez un système de fichiers insensible à la casse, par exemple, vous êtes sur un Mac et vous ne l'avez pas configuré pour être sensible à la casse, vous verrez un message d'erreur comme celui-ci:

fatal: échec du changement de nom de "nom de dossier": argument non valide

Et voici ce que vous pouvez faire pour le faire fonctionner: -

git mv foldername tempname && git mv tempname folderName

Cela divise le processus de changement de nom en renommant d'abord le dossier en un nom de dossier complètement différent. Après l'avoir renommé en un autre nom de dossier, le dossier peut enfin être renommé en nouveau nom de dossier. Après ces git mv, encore une fois, n'oubliez pas d'ajouter et de valider les modifications. Bien que ce ne soit probablement pas une belle technique, cela fonctionne parfaitement bien. Le système de fichiers ne reconnaîtra toujours pas un changement des majuscules, mais git le fait en le renommant en un nouveau nom de dossier, et c'est tout ce que nous voulions :)

akshay_rahar
la source
9

Vous pouvez renommer le répertoire à l'aide du système de fichiers. Ensuite, vous pouvez faire git rm <old directory>et git add <new directory>( page d'aide ). Ensuite, vous pouvez vous engager et pousser.

Git détectera que le contenu est le même et qu'il ne s'agit que d'une opération de renommage, et il apparaîtra comme une entrée de renommage dans l'historique. Vous pouvez vérifier que c'est le cas avant la validation en utilisantgit status

Oleksi
la source
12
Hé, mais de cette façon, je perdrai tout l'historique des commit.
ViliusK
1
Vous pouvez le conserver si vous utilisez l'indicateur -follow.
Oleksi
Deux commandes au lieu d'une, et devoir ajouter un drapeau? Est-ce mieux que git mv de quelque façon?
antgel
4
@topper Non, git mv n'est qu'un alias pour rm + add. Utiliser git mv est une meilleure solution.
Oleksi
5
@topper Notez que vous devrez toujours utiliser --follow pour afficher l'historique, quelle que soit la méthode utilisée pour déplacer le fichier.
Oleksi
3

Depuis l'application Web, je pense que vous ne pouvez pas, mais vous pouvez renommer tous les dossiers dans Git Client, il déplacera vos fichiers dans les nouveaux dossiers renommés, puis valider et pousser vers le référentiel distant.

J'ai eu un problème très similaire: j'ai dû renommer différents dossiers de majuscules en minuscules (comme Abc -> abc), j'ai renommé tous les dossiers avec un nom fictif (comme 'abc___') et je me suis engagé dans un référentiel distant, après que j'ai renommé tous les dossiers au nom d'origine avec les minuscules (comme abc) et il les a pris!

Syncro
la source
0

Je l'ai résolu en deux étapes. Pour renommer un dossier à l'aide de la commande mv, vous devez disposer de droits pour le faire, si vous n'en avez pas le droit, vous pouvez suivre ces étapes. Supposons que vous souhaitiez renommer la sensibilité à la casse en sensible à la casse.

Étape 1: renommer le dossier (sensible à la casse) en quelque chose d'autre depuis l'explorateur. Par exemple, Renommer la casse en dossier1 valide cette modification.

Étape 2: Renommez ce dossier nouvellement nommé (dossier1) au nom sensible à la casse attendu (sensible à la casse), par exemple. Renommez le dossier1 en sensible à la casse. Validez ce changement.

Nilesh
la source
0

Pour le changement de nom sensible à la casse, cela git mv somefolder someFoldera fonctionné pour moi avant mais pas aujourd'hui pour une raison quelconque. Donc, comme solution de contournement, j'ai créé un nouveau dossier temp, déplacé tout le contenu de somefolderdans temp, supprimé somefolder, validé le temp, puis créé someFolder, déplacé tout le contenu de tempdans someFolder, supprimé temp, validé et poussé someFolderet cela a fonctionné! Apparaît comme someFolderdans git.

Ryan Walker
la source
-16

Renommez simplement le dossier. git est un "content-tracker", donc les hachages SHA1 sont les mêmes et git sait que vous le renommez. La seule chose qui change est l'arbre-objet.

rm <directory>
git add .
git commit
bitwave
la source
1
Cela ne fonctionne pas toujours. Cela n'a sûrement pas fonctionné pour moi pour qc. comme 20% des fichiers ...
Tomáš Fejfar