2009-12-21 17 views
8

que he hecho algo como lo siguiente:de cómo recuperar un repositorio Git remoto accidentalmente borrado de repositorio local

(1) clonar un repositorio Git remoto para host local

local # git clone http://www.foo.com foo

(2) añadir otro proyecto en un servidor ssh (bar) como el segundo repositorio remoto

local # git remote add bar ssh://bar/home/project

local # git fetch bar

(3) hecho algo estúpido en el host ssh (bar):

barra # rm -rf /home/project

Podría por favor dígame cómo puedo recuperar el proyecto en el host ssh (bar) desde mi copia local, para que otro desarrollador en el host ssh pueda continuar su trabajo, y puedo ejecutar 'git fetch bar' para obtener su confirmación, al igual que no hice nada incorrecto con su host ssh, es decir, deshacer todo lo que hice para alojar la barra. muchas gracias.

ACTUALIZACIÓN:

barra # mkdir -p /home/project && cd /home/project && git init --bare

local # git branch remote show bar

local # git push bar bar/master:refs/heads/master

local # git push bar bar/branch1:refs/heads/branch1

local # git push bar bar/branch2:refs/heads/branch2

+0

Si ha resuelto el problema, ponga los comandos en una nueva respuesta. –

Respuesta

7

Puede configurar el host remoto como un nuevo repositorio de git y luego presionarlo.

Este blog va sobre cómo hacerlo:

Toolman Tim - Setting up a new remote git repository

suponiendo que todavía tiene la configuración de barras como un repositorio remoto, esencialmente:

ssh bar "mkdir -p /home/project && cd /home/project && git --init bare" 
git push bar refspec 

refspec es con frecuencia sólo la simple nombre de la sucursal en el repositorio local así que:

git push bar master 

Consulte el git push manpage para obtener un tratamiento detallado de lo que califica para un refspec.La sección EJEMPLOS es particularmente útil en la comprensión respecs más avanzados

+0

gracias pero no puedo hacer que funcione: local # barra de ssh "mkdir -p/home/proyecto && cd/home/proyecto && git init --bare" # git local de barra de empuje No hay referencias en común y no especificado; haciendo nada. Quizás debas especificar una rama como 'master'. fatal: El extremo remoto colgó inesperadamente error: no se pudieron enviar algunos refs a 'ssh: // bar/home/project' – yoda

+0

es por eso que hice referencia al blog que fue mucho más profundo y usé la palabra "esencialmente". Haré que mi muestra de código sea más explícita para completar la respuesta. –

1
respuesta

Seguir Mark Carey, he recuperado particaly el repositorio borrado de la siguiente manera:

barra # mkdir -p /home/project && cd /home/project && git init --bare

local # git branch remote show bar

locales # git push bar bar/master:refs/heads/master

local # git push bar bar/branch1:refs/heads/branch1

local # git push bar bar/branch2:refs/heads/branch2

ACTUALIZACIÓN:

How to back up private branches in git

+0

"Sigue la respuesta de Mark Carey" ... si mi respuesta fuera la respuesta "correcta", entonces no sería apropiado otorgarle el estado de "Respuesta". –

3

lugar de uno de estos:

$ git push bar bar/branchX:refs/heads/branchX 

para cada rama en ref'd local. Pruebe esta

$ git push bar refs/remotes/bar/*:refs/heads/* 

El comando anterior debe empujar todas las referencias remotas que había en caché local de nuevo a la distancia y los pusieron en el lugar correcto.

Tenga en cuenta que también hay que empujar cualquier etiqueta que podría haber tenido:

$ git push --tags bar 

Además, es muy útil saber lo que va a pasar antes de que realmente lo hace el empuje:

$ git push --dry-run ...(rest of push cmd) 

NOTA : Utilicé 'bar' donde la mayoría de las personas tendrían 'origen' - reemplace con el nombre de su control remoto.

Cuestiones relacionadas