tutorial hacer deploy con como git ssh deployment remote-server

hacer - gitlab deploy to server



git clone de local a remoto (6)

Estamos en el proceso de migrar de Mercurial a Git para nuestro flujo de trabajo y tengo dos problemas menores.

Primero, ¿es posible "clonar" un repositorio local directamente en un directorio remoto vacío (ssh)?

Actualmente, cuando creamos un nuevo sitio web, básicamente clonamos nuestro CMS localmente, lo configuramos y luego lo clonamos en el repositorio central y en el servidor web ( hg clone . ssh://account@server/www ). De esta forma, tenemos acceso instantáneo a la bondad push / pull.

Esto me lleva al segundo problema, la implementación remota.

Actualmente, con Mercurial, tengo un gancho simple en los repos remotos que ejecutan hg up cuando se recibe un conjunto de cambios.

Para hacer lo mismo con Git, he seguido las instrucciones aquí: http://caiustheory.com/automatically-deploying-website-from-remote-git-repository pero me gustaría mantener el directorio .git en la raíz del sitio web. como es el caso de Mercurial (está protegido por la configuración de Apache y no puedo exportar GIT_DIR para todas las cuentas, ya que algunos tienen más de un sitio web / repos).

¿Es posible tener básicamente la misma configuración sin separar el directorio de trabajo de los repositorios?


Esta respuesta es buena, pero no pude hacer que funcione para mí. El siguiente código de este enlace lo hizo http://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-push/ . En la ejecución remota

mkdir my_project.git cd my_project.git git init --bare git-update-server-info # If planning to serve via HTTP

Localmente en un repositorio existente que ya tiene al menos una ejecución de confirmación

git remote add origin [email protected]:my_project.git git push -u origin master

Espero que esto ayude a cualquiera que haya tenido problemas con la otra respuesta.


Estoy de acuerdo con, y mejorar en presto8 mediante la eliminación de archivos no coincidentes.

rsync -avz . ssh://account@server/www/reponame --delete


Git más fácil equivalente al hg clone . ssh://account@server/www hg clone . ssh://account@server/www es:

rsync -avz . ssh://account@server/www/reponame

De hecho, he agregado esta línea a ~ / .bash_aliases para reflejar cualquier directorio en cualquier lugar:

alias mirror="rsync -avz . ssh://account@server`pwd` --delete"

Podría ser peligroso si se encuentra en un directorio especial como / dev o / bin. Ten cuidado.


Para responder a su primera pregunta, sí, puede. Supongamos que el directorio remoto es ssh://user@host/home/user/repo . Este debe ser un repositorio git, crea eso con git init --bare o scp tu repo.git local repo.git (se puede crear con git clone ) en remoto. Entonces hazlo:

git remote add origin ssh://user@host/home/user/repo git push --all origin

Esto enviará todas las sucursales localmente existentes al repositorio remoto.

Para llegar a su próxima pregunta, debería poder hacer lo mismo utilizando un conjunto diferente de comandos. Prueba estos:

$ cd /var/www # or wherever $ mkdir somesite $ cd somesite/ $ git init $ git --bare update-server-info $ git config receive.denycurrentbranch ignore $ cat > hooks/post-receive #!/bin/sh git checkout -f ^D $ chmod +x hooks/post-receive

Por supuesto, ejecutará los comandos de control remoto / push arriba después de este paso. Puede que tenga que verificar una rama específica después de hacerlo, para que el clon "somesite" en el servidor realmente sepa qué rama seguir. A partir de ese momento, presionar hacia ese repositorio debería desencadenar una nueva salida de esa rama.


Solo para darle una alternativa, puede usar:

git remote set-url origin git://other.url.here

Estos también funcionan si su repositorio git local apunta a otro repositorio remoto


También me encontré con este problema recientemente y lo resolvió de la siguiente manera:

En el servidor remoto:

1: crea un directorio llamado / tmp / bare
2: cambiar a ese directorio
3: Ejecutar git init --bare

En la máquina local:

1: Cambie a su directorio de proyectos git
2: git remote add bare ssh: // usuario @ server / tmp / bare
3: git push --todo descubierto
4: git remote remove bare

En el servidor remoto:

1: git clone / tmp / bare / path / to / your / clone

En la máquina local:

1: git remote add origen ssh: // usuario @ servidor / ruta / a / su / clon

Esto es un poco complicado, pero funciona y no requiere establecer banderas extrañas o instruir a git para que anule sus comportamientos predeterminados. Por lo tanto, es bastante seguro.