Cambiare il nome di una directory in un repository Github in remoto, direttamente da Linux Git locale?


10

Questo è il mio repository Git:

https://github.com/benqzq/ulcwe

Ha una directory chiamata locale voglio cambiarne il nome con un altro (diciamo, da locala xyz).

La modifica manuale tramite la GUI di GitHub è un incubo poiché devo cambiare il nome della directory per ciascun file separatamente (GitHub deve ancora includere una funzionalità di "Rinomina directory", che ci crediate o no).

Dopo aver installato Git, ho provato questo comando:

git remote https://github.com/benqzq/ulcwe && git mv local xyz && exit

Anche se non ho ricevuto alcuna richiesta per la mia password GitHub, ho riscontrato questo errore:

fatal: Not a git repository (or any parent up to mount point /mnt/c)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

So che il punto in Git è scaricare un progetto, cambiare, testare e quindi spingere al provider di hosting (GitHub in questo caso), ma per cambiare una directory, desidero un'operazione diretta. È anche possibile con Git?

Dovrei usare un altro programma forse?


2
No, le operazioni remote dirette non sono possibili in Git. Devi clonare (scaricare) il progetto, modificarlo, quindi tornare al provider di hosting. Ma come stai usando Github senza avere il progetto sul tuo computer? Stai apportando tutte le modifiche tramite l'interfaccia utente Web di Github - che non suona molto conveniente o efficiente.
user253751

In questo caso particolare l'utilizzo dell'interfaccia utente è di solito abbastanza conveniente ed efficiente per me, la cosa principale che mi manca è la modifica diretta del nome della
directory

Risposte:


28

Il messaggio di errore fatale indica che stai lavorando da qualche parte che non è un clone del tuo repository git. Quindi iniziamo clonando prima il repository git:

git clone https://github.com/benqzq/ulcwe.git

Quindi inseriscilo:

cd ulcwe

e rinominare la directory:

git mv local xyz

Perché la modifica sia condivisibile, devi impegnarla:

git commit -m "Rename local to xyz"

Ora puoi inviarlo al tuo repository git remoto:

git push

e vedrai il cambiamento nell'interfaccia di GitHub.


14
In altre parole, è proprio come qualsiasi altra operazione sui file nel tuo repository Git.
Razze di leggerezza in orbita

2
@LightnessRacesinOrbit sembra che finora il richiedente abbia utilizzato l'interfaccia utente Web per tutte le modifiche.
user253751

5

No, non c'è modo di farlo come un'operazione diretta a causa del modo in cui git è strutturato.

Il modo in cui git funziona è che archivia una copia dell'intero repository, inclusa tutta la cronologia, in ogni singola posizione.

Github, o Bitbucket, o qualsiasi altro provider di hosting è essenzialmente solo un'altra copia del tuo repository git, con una bella interfaccia web in cima, che viene trattata come una fonte centrale di verità nella maggior parte dei flussi di lavoro, tuttavia l'utilità git non lo sa.

Le modifiche vengono registrate come commit. Immagino che direct operation, intendi un modo per cambiare il nome della cartella senza creare un commit. Sebbene ciò sia possibile riscrivendo la cronologia, non la consiglierei, soprattutto se ci sono più persone / macchine con copie del repository git, poiché ciò può portare a incongruenze.

Il modo più semplice per rinominare una cartella in un repository git sarebbe clonarlo localmente

git clone [url]
cd [git-folder]

Se si dispone già di una copia locale del repository, estrarlo per assicurarsi di essere aggiornati al repository remoto

git pull

Apporta le modifiche necessarie a livello locale

git mv local xyz

Che dovrebbe essere aggiunto automaticamente all'area di gestione temporanea da Github. Quindi dovresti impegnarti e spingere queste modifiche.

git commit -m 'Renamed local to xyz'
git push

Questo impegna la modifica nel tuo repository locale, quindi invia queste modifiche alla copia remota del repository, in questo caso, Github.


8
No, la cronologia non viene memorizzata come modifiche tra commit, ogni commit è autoportante. Le modifiche tra i commit vengono ricalcolate su richiesta ogni volta che sono necessarie.
Stephen Kitt,

3
"tutta la cronologia viene scaricata in ogni singola posizione" - non congit clone --depth
user11153,

2
Per questo non sarebbe necessario riscrivere la cronologia: GitHub potrebbe semplicemente generare un commit. (Proprio come fa già quando si modificano i file direttamente sul sito Web.)
user1686

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.