Sposta i file usando Git mv O usa invece il file system

4

Mi chiedo quale sarebbe la differenza in Git se avessi usato il comando mv rispetto a spostarlo in Windows Explorer. Da Perforce so che è importante perché il sistema di versione tiene traccia dell'origine del file. Mi chiedo se questo è altrettanto importante in Git o è lo stesso di spostare i file nel file system?

Il motivo per cui ti sto chiedendo è che stiamo spostando molti file, e l'utilizzo della riga di comando è piuttosto noioso.

    
posta Serguei Fedorov 18.04.2015 - 01:28
fonte

2 risposte

6

Se sposti il file in Windows Explorer, devi ancora git add il nuovo percorso del file e git rm (o git add --all ) il vecchio percorso del file. Una volta completate queste due cose, git funzionerà da solo che il nuovo file è per lo più identico al vecchio file e lo visualizzerà automaticamente come una mossa in comandi come git status .

Il vantaggio di git mv è che combina "Spostamento Explorer", git add e git rm in un'unica operazione. Quando sposti un singolo file, non vedo alcun motivo per non utilizzare mv .

Quando ho bisogno di spostare o rinominare intere cartelle, io uso Windows Explorer perché questo genere di cose è molto più facile in una GUI. Quando ho finito di mescolare le cose, posso dire a git di elaborare tutte le modifiche che ho apportato con un singolo comando git add --all . dalla directory principale.

    
risposta data 18.04.2015 - 01:38
fonte
1

Che sia finestra o unix, git mv fondamentalmente combina tre azioni:

  • uno spostamento del file system
  • a git delete del file originale
  • un git aggiunto del nuovo file.

Quindi, senza git rm, si potrebbe fare (questo è Unix / OSX ma i passaggi sono simili in Windows a meno che non si usi l'emulatore di terminale cygwin e quindi si possa probabilmente):

$ mv newfile movedfile
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    newfile

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        movedfile

no changes added to commit (use "git add" and/or "git commit -a")
$ git rm newfile
rm 'newfile'
$ git add movedfile
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    newfile -> movedfile

$ git commit -m"renamed"
[master 46332e4] renamed
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename newfile => movedfile (100%)
$ git status
On branch master
nothing to commit, working directory clean

mentre con git rm basta fare:

$ git mv newfile2 renamed_newfile2
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    newfile2 -> renamed_newfile2

$ git commit -m"renamed"
[master 8d1e296] renamed
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename newfile2 => renamed_newfile2 (100%)
$ git status
On branch master
nothing to commit, working directory clean
    
risposta data 18.04.2015 - 04:22
fonte

Leggi altre domande sui tag