2011-07-11 29 views

Respuesta

185

creo que comete un repositorio desnudo en el lado remoto, git init --bare, agrega el lado remoto como el push/pull de seguimiento para su repositorio local (git remote add origin URL), y luego a nivel local que acaba de decir git push origin master. Ahora cualquier otro repositorio puede pull del repositorio remoto.

+0

@Nips: sí, claro, lo siento. ¡Empujas ramas individuales, de hecho! –

+0

¿Qué sucede si estoy usando la GUI? ¿Cómo puedo configurar un servidor para todos los repositorios y cada PC en la misma red se conecta a eso? – SearchForKnowledge

+3

si 'git push origin master' falla con el error" repository not found ", intente' git update-server-info' en el lado remoto, donde hizo 'git init --bare' – HongKilDong

6

Una nota para las personas que crearon la copia local en Windows y desean crear un repositorio remoto correspondiente en un sistema Unix-line, donde los archivos de texto obtienen terminaciones LF en clones adicionales por desarrolladores en sistemas tipo Unix, pero terminaciones CRLF en Windows.

Si creó su repositorio de Windows antes del setting up line-ending translation, entonces tiene un problema. La configuración predeterminada de Git no es la traducción, por lo que su conjunto de trabajo utiliza CRLF, pero su repositorio (es decir, los datos almacenados en .git) también ha guardado los archivos como CRLF.

Cuando presiona hacia el control remoto, los archivos guardados se copian tal cual, no se produce ninguna traducción de final de línea. (La traducción de terminación de línea se produce cuando los archivos se envían a un repositorio, no cuando se envían repositorios). Terminas con CRLF en tu repositorio tipo Unix, que no es lo que quieres.

Para obtener LF en el repositorio remoto, primero debe asegurarse de que LF esté en el repositorio local, por re-normalizing your Windows repository. Esto no tendrá ningún efecto visible en su conjunto de trabajo de Windows, que todavía tiene terminaciones CRLF; sin embargo, cuando presione hacia el control remoto, el control remoto obtendrá LF correctamente.

No estoy seguro de si hay una forma fácil de saber qué terminaciones de línea tiene en su repositorio de Windows. Supongo que podría probar estableciendo core.autocrlf = false y clonando (si el repositorio tiene terminaciones en LF, el clon también tendrá LF).

53

Para configurar inicialmente cualquier servidor Git, debe exportar un repositorio existente a un nuevo repositorio vacío, un repositorio que no contiene un directorio de trabajo. Esto es generalmente sencillo de hacer. Para clonar su repositorio y crear un nuevo repositorio vacío, ejecute el comando clonar con la opción --bare. Por convención, desnuda extremo directorios del repositorio en .git, así:

$ git clone --bare my_project my_project.git 
Initialized empty Git repository in /opt/projects/my_project.git/ 

Este comando toma el repositorio Git por sí mismo, sin un directorio de trabajo, y crea un directorio específicamente para él solo.

Ahora que tiene una copia vacía de su repositorio, todo lo que necesita hacer es ponerlo en un servidor y configurar sus protocolos. Supongamos que ha configurado un servidor llamado git.example.com al que tiene acceso SSH y desea almacenar todos sus repositorios Git en el directorio /opt/git. Usted puede configurar su nuevo repositorio copiando su repositorio desnudo sobre: ​​

$ scp -r my_project.git [email protected]:/opt/git 

En este punto, otros usuarios que tienen acceso SSH al mismo servidor que ha acceso de lectura al directorio /opt/git pueden clonar su repositorio ejecutando

$ git clone [email protected]:/opt/git/my_project.git 

Si un usuario SSHS en un servidor y tiene acceso de escritura al directorio /opt/git/my_project.git, también tendrá acceso automático de empuje. Git agregará automáticamente permisos de escritura grupales a un repositorio correctamente si ejecuta el comando git init con la opción --shared.

$ ssh [email protected] 
$ cd /opt/git/my_project.git 
$ git init --bare --shared 

Es muy fácil tomar un repositorio Git, crear una versión desnuda, y colocarlo en un servidor al que usted y sus colaboradores tiene acceso SSH. Ahora estás listo para colaborar en el mismo proyecto.

+4

La solución 'scp' funciona mejor en la práctica que el' init --bare'. Todavía se siente como un feo truco al primero clonar localmente, luego copiar al servidor ... Ojalá git tuviera un comando para hacerlo de una vez. – leftaroundabout

+0

ha hecho +1 en esto porque '--shared' funcionó para mí. Me pregunto qué pasará si usas 'git init --shared' sin hacer un' --bare' uno ... – icedwater

+1

Crea un repositorio vacío localmente y 'scp' que a un control remoto funciona mejor si el control remoto no admite' git init --bare' (como fue el caso para mí con git 1.5.5, 2008). Creo que esto debería funcionar incluso si el control remoto no tiene nada de git. –

-3

Normalmente se puede configurar un repositorio git simplemente usando el comando init

git init 

En su caso, ya existe un acuerdo de recompra en un remoto disponible. Depende de la forma de acceder a tu repositorio remoto (con nombre de usuario dentro de la URL o una llave ssh que se ocupa de la verificación) utilizar simplemente el comando clone:

git clone [email protected][my.url.com]:[git-repo-name].git 

También hay otras maneras de clonar el repositorio. De esta forma lo llamará si tiene una configuración de clave ssh en su máquina que verificará la extracción de su repositorio. Existen otras combinaciones de la url si desea incluir su contraseña y nombre de usuario en el interior para iniciar sesión en su repositorio remoto.

+1

qué irónico es esto .... alguien acaba de desvirtuar esta respuesta hoy, y ahora estoy luchando con empujar mis archivos. ¡Parece que necesito un poco de entrenamiento git para meterme de nuevo! –

+3

Creo que el problema es que el OP quería una solución para crear un repositorio remoto en un servidor ssh, pero describió cómo crear un repositorio local desde un servidor ssh remoto. No respondiste la pregunta. (No, yo estaba deprimido) – peterh

0

Necesita crear un directorio en un servidor remoto. Luego use el comando "git init" para configurarlo como un repositorio. Esto debe hacerse para cada nuevo proyecto que tenga (cada nueva carpeta)

Suponiendo que ya ha configurado y utilizado git usando las claves ssh, escribí un pequeño script Python, que cuando se ejecuta desde un directorio de trabajo configurará un control remoto e inicializa el directorio como un git repo. Por supuesto, tendrá que editar el script (solo una vez) para indicarle el servidor y la ruta raíz para todos los repositorios.

Marcar aquí - https://github.com/skbobade/ocgi

Cuestiones relacionadas