tag new descargar commits git git-clone

new - git clone a través de ssh



git show tags (6)

Tengo un proyecto en el que creé un repositorio de git:

$ cd myproject $ git init $ git add . $ git commit

Yo quería crear un clon desnudo en otra máquina:

$ cd .. $ git clone --bare myproject ssh://user@server:/GitRepos/myproject.git

Ejecuté el clon pero no imprimí ninguna respuesta. Me conecté a la máquina del servidor e intenté ver cómo se almacenan los archivos. La ruta / GitRepos estaba vacía, así que decidí volver a hacer el clon:

$ git clone --bare myproject ssh://user@server:/GitRepos/myproject.git

Esta vez la respuesta fue:

fatal: la ruta de destino ''ssh: // usuario @ servidor: /GitRepos/myproject.git'' ya existe y no es un directorio vacío.

Pero vi que el camino estaba vacío.
Que está pasando aqui ?


Git 101:

git es un sistema de control de versiones descentralizado. No es necesario que necesites un servidor para comenzar a trabajar con git. Aún así, es posible que desee hacer eso, ya que se ve bien, ¿verdad? (También es útil si quieres trabajar en un solo proyecto desde varias computadoras).

Entonces para ejecutar un "servidor" necesita ejecutar git init --bare <your_project>.git ya que esto creará un repositorio vacío, que luego puede importar en sus máquinas sin tener que perder el tiempo en los archivos de configuración en su .git dir.

Después de esto, podría clonar el repositorio de sus clientes, ya que se supone que debería funcionar, pero descubrí que algunos clientes (a saber, git-gui ) no podrán clonar un repositorio completamente vacío. Para cd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git push origin master este problema, debe ejecutar cd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git push origin master . (Tenga en cuenta que puede que necesite configurar su nombre de usuario y correo electrónico para el git de esa máquina si no lo hubiera hecho anteriormente. Los comandos reales para ejecutar estarán en el mensaje de error que reciba, así que simplemente los omitiré).

Entonces, en este punto puede clonar el repositorio en cualquier máquina simplemente ejecutando git clone <user>@<server>:<relative_path><your_project>.git . (Como otros han señalado, es posible que deba agregar un prefijo ssh:// si usa la ruta absoluta.) Esto supone que ya puede iniciar sesión desde su cliente al servidor. (También obtendrá puntos de bonificación por configurar un archivo de configuración y claves para ssh , si tiene la intención de enviar muchas cosas al servidor remoto).

Algunos enlaces relevantes:
Esto más o menos te dice lo que necesitas saber.
Y esto es para aquellos que conocen el funcionamiento básico de git pero a veces olvidan la sintaxis exacta.


Necesita ejecutar el comando de clonación en lo que está llamando al servidor. Pero apuesto a que no está ejecutando un servidor ssh en su cliente local, por lo que no funcionará de todos modos. Le sugiero que siga este enfoque (consulte el manual porque lo estoy haciendo desde la memoria)

  1. Inicie sesión en la máquina del servidor.
  2. Crea un repositorio git init --bare usando git init --bare
  3. En la máquina cliente, puede enviar su repositorio al servidor. git remote add origin ssh://user@server:/GitRepos/myproject.git seguido de git push origin master


Posiblemente, esto no esté relacionado directamente con la pregunta; pero un error que acabo de hacer, y veo en el OP, es la especificación de URL ssh://user@server:/GitRepos/myproject.git , es decir, tiene dos puntos : y una barra inclinada / después significando un camino absoluto.

Luego encontré el clon de Git, ssh: No se pudo resolver el nombre de host - git, desarrollo - Nicolas Kuttler (ya que ese era el error que estaba obteniendo, en la versión de Git 1.7.9.5), señalando:

El problema con el comando que usé inicialmente fue que intenté usar una sintaxis similar a scp.

... ¡que también fue mi problema! Así que básicamente en git con ssh , o bien usas

  • ssh://[email protected]/absolute/path/to/repo.git/ - solo una barra inclinada para la ruta absoluta en el servidor
  • [email protected]:relative/path/to/repo.git/ - solo dos puntos (no debe tener el ssh:// para la ruta relativa en el servidor (relativo al directorio principal del username de username en la máquina del servidor)

Espero que esto ayude a alguien,
¡Aclamaciones!


Quiero intentar una respuesta que incluya git-flow, y tres ''puntos'' o casos de uso, el repositorio central de git, el desarrollo local y la máquina de producción. Esto no está bien probado .

Estoy dando comandos increíblemente específicos. En lugar de decir <your folder> , diré /root/git . El único lugar donde estoy cambiando el comando original es reemplazar mi nombre de servidor específico con example.com . Explicaré el propósito de las carpetas para que pueda ajustarlo en consecuencia. Por favor, avíseme sobre cualquier confusión y actualizaré la respuesta.

La versión de Git en el servidor es 1.7.1. El servidor es CentOS 6.3 (final).

La versión de git en la máquina de desarrollo es 1.8.1.1. Esto es Mac OS X 10.8.4.

El repositorio central y la máquina de producción están en la misma máquina.

el repositorio central, que los usuarios svn pueden relacionar como ''servidor'' está configurado de la siguiente manera. Tengo una carpeta /root/git donde guardo todos mis repositorios git. Quiero crear un repositorio git para un proyecto que llamo ''flores''.

cd /root/git git clone --bare flowers flowers.git

El comando git dio dos mensajes:

Initialized empty Git repository in /root/git/flowers.git/ warning: You appear to have cloned an empty repository.

Nada de que preocuparse.

En la máquina de desarrollo está configurado de la siguiente manera. Tengo una carpeta /home/kinjal/Sites donde pongo todos mis proyectos. Ahora quiero obtener el repositorio git central.

cd /home/kinjal/Sites git clone [email protected]:/root/git/flowers.git

Esto me lleva a un punto donde puedo comenzar a agregar cosas. Primero configuré el flujo de git

git flow init -d

Por defecto, esto es en la rama de develop . Agregué mi código aquí, ahora. Entonces necesito comprometerme con el repositorio central de git.

git add . git commit -am ''initial'' git push

En este punto empujó a la rama de desarrollo. También quiero agregar esto a la rama principal.

git flow release start v0.0.0 develop git flow release finish v0.0.0 git push

Tenga en cuenta que no hice nada entre el inicio de lanzamiento y el final de lanzamiento. Y cuando terminé, me pidieron que editara dos archivos. Esto empujó la rama de desarrollo a dominar.

En el sitio de producción, que está en la misma máquina que mi repositorio central de git, quiero poner el repositorio en /var/www/vhosts/example.net . Ya tengo /var/www/vhosts .

cd /var/www/vhosts git clone file:///root/git/flowers.git example.net

Si la máquina de producción también estaría en una máquina diferente, el comando git clone se parecería al utilizado en la máquina de desarrollo.


Por adelantado, estoy un poco ausente en mis habilidades de GIT.

Eso va a clonar un repositorio desnudo en su máquina, que solo contiene las carpetas dentro de .git que es un directorio oculto. ejecuta ls -al y deberías ver .git o cd .git dentro de tu repositorio.

¿Puede agregar una descripción de su intención para que alguien con más habilidades GIT pueda ayudar? ¿Qué es lo que realmente quieres hacer, no cómo planeas hacerlo?