Aggiunta di un progetto "versione manuale" al repository git


1

Prima di aver sentito parlare delle meraviglie del controllo delle versioni, ho tenuto i progetti in cartelle come "progetto x 1.0", "progetto x 1.1", "progetto x 1.2", ecc. C'è un sacco di ridondanza in questo approccio, quindi avrei piace usare git per consolidare e controllare la versione del sistema per il futuro.

Qual è il modo migliore per farlo? Presumo che dovrei iniziare eseguendo git init su "progetto x 1.0", ma come posso consolidare le altre cartelle nel progetto come nuovi commit? (Sono ancora molto nuovo con Git)

Risposte:


4

Comincerei creando una nuova directory vuota, creando un repository con essa git inite facendo un primo commit con solo un .gitignorefile o qualcosa del genere.

Quindi copia tutti i file dalla tua prima revisione in questa nuova directory git adde git commit. Questo ti darà il tuo primo vero impegno.

Quindi copia / sovrascrivi tutti i file con i contenuti della tua seconda revisione. git add, git commit.

Puoi ripeterlo quanto vuoi. Il primo passo non è davvero necessario, potresti farlo nella directory della tua prima revisione. Ma farlo in una nuova directory ti consente di non modificare nulla nei tuoi backup, quindi puoi ricominciare da capo se vuoi migliorare / modificare il processo, senza rischiare di perdere nulla nelle tue vecchie directory.


3

C'è un buon libro per git chiamato Pro Git. C'è una sezione su come migrare anche da una struttura personalizzata. (Vedi Importatore personalizzato). È un po 'più difficile, ma se hai molta storia, sarebbe il modo migliore.

L'altro modo è fare:

# initialize a new repository
git init .
touch .gitignore
git add .
git commit -m "initial commit"

# copy all the files to working directory
cp -R backup_v01/* .
# stage all the files
git add .
# make the first commit
git commit -m "v0.1 from backup"

# remove all files
git rm -r *
# copy all the files to working directory
cp -R backup_v02/* .
git add .
git commit -m "v0.2 from backup"

Questo può essere ottimizzato ma questo script può essere facilmente compreso. Devi rimuovere tutti i vecchi file dal repository prima di aggiornare i contenuti perché altrimenti avresti alcuni vecchi file eliminati in giro.

Ovviamente il tutto può essere trasformato in uno script (repo.sh):

#!/bin/bash
REPODIR=$1

# initialize a new repository
git init $REPODIR

cd $REPODIR
touch .gitignore
git add .
git commit -m "initial commit"

while read DIR
do
  # remove all files
  git rm -r *
  # copy all the files to working directory
  cd ..
  cp -R $DIR/* $REPODIR/.
  # go back to repo dir
  cd $REPODIR
  # stage all the files
  git add .
  # make the first commit
  git commit -m "$DIR from backup"
done

Il cambio di cartella è necessario per farlo funzionare con percorsi relativi.

Lo usi inviando tutti i percorsi delle cartelle allo script e specificando la directory del repository (non deve esistere):

# let's say all the backups are in this folder
# and there are no other folders

# test whether everything is in correct order
ls -d */ | sort

# verify that there is no repository directory
rm -rf REPO_DIR

# pipe the folder listing to the script
ls -d */ | sort | repo.sh REPO_DIR

2

Un altro modo sarebbe, dopo aver eseguito e eseguito initil commit nella prima versione del progetto, spostare la .gitdirectory del repository dalla copia 1.0 alla copia 1.1, aggiungere tali modifiche (utilizzare git add --allper notare le eliminazioni) e eseguire il commit, quindi spostarlo su 1.2 e così via .

Questo funziona perché Git non conserva alcuna informazione sullo stato del repository al di fuori della .gitdirectory, quindi non importa che si stia spostando .gitpiuttosto che sostituire i file. Tuttavia, se si dispone, ad esempio, di file che si desidera ignorare .gitignore, ciò richiederebbe di aggiungere il file ignore a ciascuna versione del progetto singolarmente.

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.