In un repository Git, come rinominare correttamente una directory?


655

Penso che dovrebbe funzionare per copiare la directory da rinominare in una nuova directory con il nome desiderato ed eliminare la vecchia directory , e git add, git commite pushtutto. Ma è questo il modo migliore?



5
Per quanto riguarda Git, una copia ed eliminazione è la stessa cosa di una mossa. Git registrerà allo stesso modo sia (copia + cancella) sia (sposta).
Dietrich Epp,

Risposte:


1183

Rinomina (o sposta) di base:

git mv <old name> <new name>

Rinomina tra maiuscole e minuscole, ad es. da casesensitivea: CaseSensitivedevi usare due passaggi:

git mv casesensitive tmp
git mv tmp CaseSensitive

( Altre informazioni sulla distinzione tra maiuscole e minuscole in Git ... )

... seguito da commit e push sarebbe il modo più semplice per rinominare una directory in un repository git.


231
Ma se vuoi rinominare da casesensitivea CaseSensitive, puoi farlo in questo modo: git mv casesensitive Tempe poi git mv Temp CaseSensitive
ViliusK,

3
Salva tutto il registro e le statistiche?
orezvani,

23
@ViliusK se hai a che fare con directory sensibili al maiuscolo o minuscolo in qualsiasi modo che ho trovato è git rm -rf --cached path/to/your/directoriesquindi aggiungere nuovamente e impegnare
dtothefp

1
Ma perché GIT non ha un supporto adeguato per il cambio di nome per un pacchetto / directory? Perché devo persino creare una cartella separata? Quando cambio un nome del pacchetto non dovrebbe prenderlo come differenza e prendertene cura al momento del commit e del push?
Ahmed,

1
Grazie mille per questo Per me, dovevo prima eseguire git config core.ignorecase falsee poi eseguire i comandi in successione, altrimenti per la seconda parte avrei ricevuto un source is emptyerrore.
Rika,

107

Se viene visualizzato questo errore: irreversibile: ridenominazione di "nome utente" non riuscita: argomento non valido

Prova questo:

git mv foldername tempname && git mv tempname folderName


8
Questo è esattamente ciò di cui avevo bisogno per fare un cambio di caso in una directory.
cjserio,

Il token '&&' non è un separatore di istruzioni valido in questa versione. git versione 2.11.0.windows.
Tim Hardy,

@Tim Hardy può anche essere eseguito come due comandi separati git mv foldername tempnamee git mv tempname folderName, che dovrebbe funzionare su Windows.
Larkeith,

questo non funziona ! il risultato finale inserirà la nuova cartella 'folderName' nella cartella 'tempname'
scommetti il

61

1. Cambia il nome di una cartella da vecchia cartella a nuova cartella

git mv oldfolder newfolder

2. Se newfolder è già nel tuo repository e desideri sovrascriverlo e utilizzare: - force

git mv -f oldfolder newfolder

Non dimenticare di aggiungere le modifiche all'indice e di commetterle dopo aver rinominato con git mv.

3. Rinominare foldername in folderName su file system senza distinzione tra maiuscole e minuscole

La semplice ridenominazione con un normale comando mv (non git mv) non verrà riconosciuta come scambio di file da git. Se lo provi con il comando 'git mv' come nella riga seguente

git mv foldername folderName

Se stai usando un filesystem senza distinzione tra maiuscole e minuscole, ad esempio se sei su un Mac e non lo hai configurato per la distinzione tra maiuscole e minuscole, visualizzerai un messaggio di errore come questo:

fatale: ridenominazione di "nome utente" non riuscita: argomento non valido

Ed ecco cosa puoi fare per farlo funzionare: -

git mv foldername tempname && git mv tempname folderName

Ciò divide il processo di ridenominazione rinominando la cartella inizialmente con un nome utente completamente diverso. Dopo averlo rinominato con il diverso nomecartella, la cartella può finalmente essere rinominata nel nuovo nomeCartella. Dopo questi 'git mv's, di nuovo, non dimenticare di aggiungere e confermare le modifiche. Anche se questa probabilmente non è una bella tecnica, funziona perfettamente. Il filesystem non riconoscerà ancora un cambiamento nei casi di lettere, ma git lo fa a causa di rinominarlo con un nuovo nome utente, ed è tutto ciò che volevamo :)


9

È possibile rinominare la directory utilizzando il file system. Quindi puoi fare git rm <old directory>e git add <new directory>( pagina di aiuto ). Quindi puoi impegnarti e spingere.

Git rileverà che i contenuti sono gli stessi e che è solo un'operazione di ridenominazione e apparirà come una voce di ridenominazione nella cronologia. È possibile verificare che questo sia il caso prima dell'utilizzo del commitgit status


12
ehi, ma in questo modo, perderò tutta la cronologia degli impegni.
ViliusK,

1
Puoi mantenerlo se usi il flag -follow.
Oleksi,

Due comandi invece di uno e dover aggiungere un flag? È meglio di git mv in qualche modo?
antgel

4
@topper No, git mv è solo un alias per rm + add. Usare git mv è una soluzione migliore.
Oleksi,

5
@topper Nota che dovrai comunque usare --follow per visualizzare la cronologia indipendentemente dal metodo che usi per spostare il file.
Oleksi,

3

Dall'applicazione Web penso che tu non possa, ma puoi rinominare tutte le cartelle in Git Client, sposterà i tuoi file nelle nuove cartelle rinominate, che eseguirà il commit e passerà al repository remoto.

Ho avuto un problema molto simile: ho dovuto rinominare cartelle diverse da maiuscole a minuscole (come Abc -> abc), ho rinominato tutte le cartelle con un nome fittizio (come 'abc___') e che mi sono impegnata nel repository remoto, dopo che ho rinominato tutte le cartelle con il nome originale con le lettere minuscole (come abc) e le ho prese!


0

L'ho risolto in due passaggi. Per rinominare la cartella usando il comando mv sono necessari i diritti per farlo, se non hai ragione puoi seguire questi passaggi. Supponiamo di voler rinominare caseensensens in Casesensitive.

Passaggio 1: Rinomina la cartella (sensibile al maiuscolo / minuscolo) in qualcos'altro da Explorer. ad es. Rinomina maiuscole / minuscole in cartella1 esegue il commit di questa modifica.

Passaggio 2: rinominare questa cartella (cartella1) appena nominata con il nome sensibile al maiuscolo / minuscolo previsto (Casesensitive) ad es. Rinomina cartella1 in Casesensitive. Commetti questo cambiamento.


0

Per la ridenominazione con distinzione tra maiuscole e minuscole, git mv somefolder someFolderha funzionato per me prima, ma oggi non per qualche motivo. Quindi, come soluzione alternativa, ho creato una nuova cartella temp, spostato tutto il contenuto somefolderin temp, cancellato somefolder, eseguito il commit temp, quindi creato someFolder, spostato tutto il contenuto tempin someFolder, eliminato temp, impegnato e spinto someFoldere ha funzionato! Si presenta come someFolderin git.


-16

Rinomina semplicemente la cartella. git è un "content-tracker", quindi gli hash SHA1 sono gli stessi e git sa che lo hai rinominato. L'unica cosa che cambia è l'oggetto albero.

rm <directory>
git add .
git commit

1
Questo non funziona sempre. Sicuramente non ha funzionato per me per sth. come il 20% dei file ...
Tomáš Fejfar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.