2012-01-23 39 views
47

Tengo varios proyectos de Git que están en mi máquina local. Tengo un servidor que me gustaría usar como mi Repositorio de Git remoto. ¿Cómo muevo mis repositorios Git locales (proyectos) a mi servidor mientras mantengo el historial intacto?Cómo muevo mi repositorio de Git local a un repositorio de Git remoto

Gracias!

EDIT: Gracias por todas las buenas respuestas. La respuesta que elijo tiene sentido para mi conocimiento limitado de GIT.

EDIT # 2: Noté que mi selección de respuesta original no copió mis etiquetas. git push --mirror <path> hace copiar etiquetas.

Respuesta

52

En el servidor crear los repositorios Git como repositorio desnudo

git init --bare repo.git 

a continuación, empuje las confirmaciones de su repositorio local

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

Si hago eso, ¿alguien podrá clonar mi repositorio?(si conocen la dirección) –

+0

@sliders_alpha: si tienen acceso SSH a su servidor y el repositorio tiene los permisos adecuados, entonces sí. – knittl

+1

Hay tanta mierda sobre esto. Gracias por la mejor y más fácil manera! – Tobias

3

Si desea un repositorio normal (por ejemplo, no desnudo), simplemente cópielo. No hay nada especial que deba hacerse.

Si desea utilizar un repositorio vacío en el servidor, solo inícielo en el servidor, agréguelo como un control remoto en la copia "local", luego empújelo. (git push --mirror obtendrá todo a través.)

+0

Esto no funciona para yo. en remoto, 'mkdir somefolder; cd alguna carpeta; git init'. En local 'git push --mirror ssh: // remote/somefolder'. Resultado 'remote: error: se niega a actualizar check out branch: refs/heads/master' – gman

7

No es un buen tutorial en Ralf Wernders blog. Suponiendo que usted sabe cómo crear un repositorio en el servidor, o que ya se ha hecho:

git remote add <remote> <url> 

Para agregar un control remoto para su repositorio local. <remote> es el nombre del control remoto (a menudo "origen"). <url> es la dirección URL de su repositorio con acceso de escritura (como git @ ...)

git push <remote> <branch> 

para mover las confirmaciones sobre el origen. <branch> es la rama que está presionando (a menudo, "maestro").

+0

esta pregunta no es sobre github. Se trata de git – gman

+0

@gman, tienes razón, eliminé la referencia. – iwein

3

Crear un repositorio git en el servidor (se puede utilizar gitolite/gitosis o simplemente una normal de cuenta de usuario + pubkey autenticación SSH), agregar el servidor a su repositorio Git local utilizando

git remote add name url 

y utilizar git push -u name master (-u marca la rama actual como seguimiento, por lo que puede simplemente git pull en su lugar git pull name master).

En el lado del servidor (sistema basado en Debian):

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

Ahora, cree un nuevo repositorio al descubierto para cada repositorio local utilizando

mkdir projectName 
cd projectName 
git init --bare 

Después de eso, la URL sería [email protected]ver:projectName.

+0

está pidiendo una contraseña, ¿qué contraseña debo usar? – Fawwad

46

En primer lugar, crear un repositorio git en su servidor

git init --bare /path/to/repo 

A continuación, añadir el repositorio remoto a su uno local (ssh: // o https: //)

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

Y, empujar archivos/compromete

git push origin master 

Y, por último, las etiquetas empujar

git push origin --tags 
+2

Prefiero este porque --opción de mirror (de git help :) "Los refs locales recién creados serán empujados al extremo remoto, los refs localmente actualizados serán forzados a actualizarse en el extremo remoto, y los refs eliminados serán eliminados del control remoto fin." – caligari

+0

Esto no funciona para mí. El repositorio remoto obtiene todo tipo de errores "fatales: Esta operación debe ejecutarse en un árbol de trabajo" si trato de hacer algo con ella – gman

+0

Esto funciona bien para mí, agregué la línea para empujar etiquetas también. Nota: el protocolo ssh: // también puede ser https: //. –

1

Si usted tiene un repositorio árbol de trabajo local independiente (una carpeta con una carpeta ".git" dentro) que desea agregar un control remoto para:

  1. Crear un nuevo repositorio vacío en el remoto.
  2. En el repositorio local, defina el nuevo mando a distancia como el origen:

    cd localrepo

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

  3. push todas las ramas locales a la distancia, y ajuste cada sucursal local para realizar un seguimiento de la rama remoto correspondiente:

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

  4. push todas las etiquetas locales a la distancia:

    git push --tags origin

En este punto, el repositorio local actuará como si hubiera sido clonado desde el control remoto.


Si usted tiene un repositorio desnudo local (una carpeta con un nombre que termina en .git) que lo que desea copiar en un mando a distancia:

  1. Crear un nuevo repositorio vacío en el mando a distancia.
  2. En el repositorio local, empuje todas sus ramas para el control remoto

    cd localrepo.git

    git push --all REMOTEURL

  3. push todas las etiquetas locales para el control remoto:

    git push --tags REMOTEURL

0

Tal vez esto es "hacia atrás", pero siempre he hecho

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

probar la nueva operación está muy bien, con git status/log, etc para que me sienta mejor

movimiento no los archivos bajo control de versiones de -prev a la nueva localrepo

rm -rf localrepo.git localrepo-prev 
Cuestiones relacionadas