2012-01-23 32 views
47

Ho diversi progetti Git che si trovano sul mio computer locale. Ho un server che vorrei usare come Git Repository remoto. Come posso spostare i miei repository Git locali (progetti) sul mio server mantenendo intatta la cronologia?Come spostare il repository Git locale in un repository Git remoto

Grazie!

MODIFICA: Grazie per tutte le grandi risposte. La risposta che scelgo ha senso per la mia conoscenza GIT limitata.

EDIT # 2: Ho notato che la mia scelta di risposta originale non copiava i miei tag. git push --mirror <path> copia i tag.

risposta

52

Sul server creare i repository git come repository nudo

git init --bare repo.git 

quindi, spingere i commit della vostra repository locale

git push --mirror ssh://yourserver/~/repo.git 
+0

Se lo faccio, qualcuno sarà in grado di clonare il mio repository?(se conoscono l'indirizzo) –

+0

@sliders_alpha: se hanno accesso SSH al server e il repository ha le autorizzazioni appropriate, allora sì. – knittl

+1

C'è così tanta roba a riguardo. Grazie per il modo migliore e facile! – Tobias

3

Se si desidera un repository normale (ad esempio: non semplice), è sufficiente copiarlo. Non c'è niente di speciale che deve essere fatto.

Se si desidera utilizzare un repository nudo sul server, è sufficiente inizializzarlo sul server, aggiungerlo come remoto sulla copia "locale", quindi premere su di esso. (git push --mirror otterrà tutto attraverso.)

+0

Questo non funziona per me. al remoto, 'mkdir somefolder; cd somefolder; git init'. In locale 'git push --mirror ssh: // remote/somefolder'. Risultato 'remoto: errore: rifiuto di aggiornare il ramo estratto: refs/heads/master' – gman

7

C'è un buon tutorial su Ralf Wernders blog. Supponendo che si sa come creare un repository sul server, o che è già stato fatto:

git remote add <remote> <url> 

Per aggiungere un remoto al repository locale. <remote> è il nome del telecomando (spesso "origine"). <url> è l'URL al repository con accesso in scrittura (come git @ ...)

git push <remote> <branch> 

per spostare il commit verso l'origine. <branch> è il ramo che stai spingendo (spesso "master").

+0

questa domanda non riguarda github. Si tratta di git – gman

+0

@gman hai ragione, ho rimosso il riferimento. – iwein

3

creare un repository git sul server (è possibile utilizzare gitolite/gitosis o solo un normale account utente + pubkey ssh autenticazione), aggiungere il server al vostro repository git locale utilizzando

git remote add name url 

e utilizzare git push -u name master (-u contrassegna il ramo corrente come tracciamento in modo da poter solo git pull invece git pull name master).

Sul lato server (sistema basato su Debian):

adduser --system --home /home/git --bash /bin/bash git 
su - git 
mkdir .ssh 
cat yourkey.pub > .ssh/authorized_keys 

Ora, creare un nuovo repository indispensabile per ogni repository locale utilizzando

mkdir projectName 
cd projectName 
git init --bare 

Dopo di che, l'url sarebbe [email protected]:projectName.

+0

chiede la password, quindi quale password devo usare? – Fawwad

46

In primo luogo, creare un repo git sul server

git init --bare /path/to/repo 

quindi aggiungere il repository remoto al quello locale (ssh: // o https: //)

git remote add origin ssh://server/path/to/repo 

E, spinta file/impegna

git push origin master 

E, infine, spingere i tag

git push origin --tags 
+2

Preferisco questa opzione --mirror (da git help :) "I ref locali appena creati verranno inviati al terminale remoto, i ref aggiornati localmente verranno forzati all'aggiunta sul terminale remoto e gli errori eliminati verranno rimossi dal remoto fine." – caligari

+0

Questo non funziona per me. Il repository remoto ottiene tutti i tipi di "fatali": questa operazione deve essere eseguita negli errori di un albero di lavoro se provo a fare qualcosa con esso – gman

+0

Questo funziona bene per me, ho aggiunto la linea per spingere i tag. Nota: il protocollo ssh: // può anche essere https: //. –

1

Se si dispone di un repository albero di lavoro locale stand-alone (una cartella con una cartella ".git" dentro) che si desidera aggiungere un telecomando per:

  1. Creare un nuovo repository vuoto nel a distanza.
  2. Nel repository locale, impostare il nuovo telecomando come origine:

    cd localrepo

    git remote add origin REMOTEURL #(verify with git remote -v)

  3. push tutte le sezioni locali al telecomando, e impostare ogni ramo locale per tenere traccia del ramo remoto corrispondente:

    git push --all --set-upstream origin #(verify with git branch -vv)

  4. Spingere tutti i tag locali alla distanza:

    git push --tags origin

A questo punto il repository locale si comporterà proprio come è stato clonato dal telecomando.


Se si dispone di un repository nudo locale (una cartella con un nome che termina con .git) che si desidera solo per copiare un telecomando:

  1. Creare un nuovo repository vuota nel telecomando.
  2. Nel repository locale, spingere tutti i suoi rami per il telecomando

    cd localrepo.git

    git push --all REMOTEURL

  3. Spingere tutti i tag locali alla distanza:

    git push --tags REMOTEURL

0

forse questo è "indietro", ma ho sempre fatto

git clone --bare localrepo localrepo.git 
scp -r localrepo.git remoteserver:/pathTo 
mv localrepo localrepo-prev 
git clone remoteserver:/pathTo/localrepo 

provare il nuovo repo va bene, con git status/log ecc per farmi sentire meglio

spostare qualsiasi file non sotto il controllo di versione da -Prev alla nuova localrepo

rm -rf localrepo.git localrepo-prev 
Problemi correlati