En un repositorio de Git, ¿cómo cambiar el nombre de un directorio correctamente?

655

Creo que debería funcionar para copiar el directorio para cambiar el nombre a un nuevo directorio con el nombre deseado y eliminar el directorio de edad , y git add, git commity pushtodo. ¿Pero es esta la mejor manera?

qazwsx
fuente
55
En lo que respecta a Git, copiar y eliminar es lo mismo que un movimiento. Git grabará tanto (copiar + eliminar) como (mover) de la misma manera.
Dietrich Epp

Respuestas:

1183

Cambiar el nombre básico (o mover):

git mv <old name> <new name>

Renombrar mayúsculas y minúsculas, por ejemplo. de casesensitivea: CaseSensitivedebe usar dos pasos:

git mv casesensitive tmp
git mv tmp CaseSensitive

( Más sobre mayúsculas y minúsculas en Git ... )

... seguido de commit y push sería la forma más sencilla de cambiar el nombre de un directorio en un repositorio git.

CB Bailey
fuente
231
Pero si desea cambiar el nombre de casesensitivea CaseSensitive, puede hacerlo de esta manera: git mv casesensitive Tempy luego git mv Temp CaseSensitive
ViliusK
3
¿Guarda todo el registro y las estadísticas?
Orezvani
23
@ViliusK si se trata de directorios entre mayúsculas y minúsculas ninguna manera fácil que he encontrado es git rm -rf --cached path/to/your/directoriesa continuación, volver a agregar y comprometerse
dtothefp
1
Pero, ¿por qué GIT no tiene un soporte adecuado para el cambio de nombre para un paquete / directorio? ¿Por qué incluso necesito crear una carpeta separada? Cuando cambio el nombre del paquete, ¿no debería tomarlo como una diferencia y cuidarlo al momento de confirmar y enviar?
Ahmed
1
Muchas gracias por esto. Para mí, primero tenía que ejecutar git config core.ignorecase falsey luego ejecutar los comandos en sucesión o de lo contrario, para la segunda parte obtendría un source is emptyerror.
Rika
107

Si recibe este error: fatal: el cambio de nombre de 'nombre de carpeta' falló: argumento no válido

Prueba esto:

git mv foldername tempname && git mv tempname folderName

Jacques Betancourt
fuente
8
Esto es exactamente lo que necesitaba para hacer un cambio de mayúsculas y minúsculas en un directorio.
cjserio
El token '&&' no es un separador de declaraciones válido en esta versión. git versión 2.11.0.windows.
Tim Hardy
@Tim Hardy también se puede ejecutar como dos comandos separados git mv foldername tempnamey git mv tempname folderName, que deberían funcionar en Windows.
Larkeith
esto no funciona ! el resultado final colocará la nueva carpeta 'folderName' dentro de la carpeta 'tempname'
apuesta el
61

1. Cambie el nombre de una carpeta de carpeta antigua a carpeta nueva

git mv oldfolder newfolder

2. Si la nueva carpeta ya está en su repositorio y desea anularla y usar: - force

git mv -f oldfolder newfolder

No olvide agregar los cambios al índice y confirmarlos después de cambiar el nombre con git mv.

3. Cambiar el nombre de foldername a folderName en sistemas de archivos que no distinguen entre mayúsculas y minúsculas

El cambio de nombre simple con un comando mv normal (no git mv) no se reconocerá como un cambio de archivo desde git. Si lo prueba con el comando 'git mv' como en la siguiente línea

git mv foldername folderName

Si está utilizando un sistema de archivos que no distingue entre mayúsculas y minúsculas, por ejemplo, está en una Mac y no lo configuró para que distinga entre mayúsculas y minúsculas, recibirá un mensaje de error como este:

fatal: error al renombrar 'nombre de carpeta': argumento no válido

Y esto es lo que puede hacer para que funcione:

git mv foldername tempname && git mv tempname folderName

Esto divide el proceso de cambio de nombre cambiando el nombre de la carpeta al principio a un nombre de carpeta completamente diferente. Después de renombrarlo a un nombre de carpeta diferente, la carpeta finalmente puede renombrarse al nuevo nombre de carpeta. Después de esos 'git mv's, nuevamente, no olvides agregar y confirmar los cambios. Aunque probablemente esta no sea una técnica hermosa, funciona perfectamente bien. El sistema de archivos aún no reconocerá un cambio en los casos de letras, pero git lo hace debido a cambiarle el nombre a un nuevo nombre de carpeta, y eso es todo lo que queríamos :)

akshay_rahar
fuente
9

Puede cambiar el nombre del directorio utilizando el sistema de archivos. Entonces puedes hacer git rm <old directory>y git add <new directory>( página de ayuda ). Entonces puedes comprometerte y empujar.

Git detectará que el contenido es el mismo y que es solo una operación de cambio de nombre, y aparecerá como una entrada de cambio de nombre en el historial. Puede verificar que este sea el caso antes de la confirmación utilizandogit status

Oleksi
fuente
12
oye, pero de esta manera, perderé toda la historia de confirmaciones.
ViliusK
1
Puede retenerlo si usa la bandera -follow.
Oleksi
¿Dos comandos en lugar de uno y tener que agregar una bandera? ¿Es esto mejor que git mv de alguna manera?
antgel
44
@topper No, git mv es solo un alias para rm + add. Usar git mv es una mejor solución.
Oleksi
55
@topper Tenga en cuenta que todavía tendrá que usar --siguiente para ver el historial, independientemente del método que use para mover el archivo.
Oleksi
3

Desde la aplicación web, creo que no puede, pero puede cambiar el nombre de todas las carpetas en Git Client, moverá sus archivos en las nuevas carpetas renombradas, luego se comprometerá y se enviará al repositorio remoto.

Tuve un problema muy similar: tuve que cambiar el nombre de diferentes carpetas de mayúsculas a minúsculas (como Abc -> abc), cambié el nombre de todas las carpetas con un nombre ficticio (como 'abc___') y luego me comprometí con el repositorio remoto, después de ¡Cambié el nombre de todas las carpetas al nombre original con minúsculas (como abc) y las tomó!

Syncro
fuente
0

Lo resolví en dos pasos. Para cambiar el nombre de la carpeta usando el comando mv, necesita derechos para hacerlo, si no tiene el derecho, puede seguir estos pasos. Supongamos que desea cambiar el nombre de casos sensibles a Casesensitive.

Paso 1: Cambie el nombre de la carpeta (mayúsculas y minúsculas) a algo más del explorador. Por ejemplo, Rename casesensitive to folder1 confirma este cambio.

Paso 2: Cambie el nombre de esta carpeta recién nombrada (carpeta1) al nombre sensible a mayúsculas y minúsculas esperado (Casesensitive), por ejemplo. Cambie el nombre de la carpeta1 a Casesensitive. Comete este cambio.

Nilesh
fuente
0

Para cambiar el nombre de mayúsculas y minúsculas, git mv somefolder someFolderfuncionó para mí antes, pero no lo hizo hoy por alguna razón. Así como una solución que he creado una nueva carpeta temp, se trasladó todo el contenido de somefolderdentro temp, borrado somefolder, el cometido temp, entonces creada someFolder, se trasladó todo el contenido de tempdentro someFolder, suprimido temp, comprometido y empujó someFoldery funcionó! Aparece como someFolderen git.

Ryan Walker
fuente
-16

Simplemente cambie el nombre de la carpeta. git es un "rastreador de contenido", por lo que los hash SHA1 son los mismos y git sabe que debe cambiarle el nombre. Lo único que cambia es el árbol-objeto.

rm <directory>
git add .
git commit
onda de bits
fuente
1
Esto no funciona siempre. Seguramente no funcionó para mí por algo. como 20% de archivos ...
Tomáš Fejfar