git clone de local a remoto

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

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

Actualmente, cuando creamos un nuevo website, básicamente clonamos nuestro CMS localmente, lo configuramos y luego lo clonamos en el repository central y en el server 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 set 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 directory .git en la raíz del website. como es el caso de Mercurial (está protegido por la configuration de Apache y no puedo exportar GIT_DIR para todas las counts, ya que algunos tienen más de un website / repos).

¿Es posible tener básicamente la misma configuration sin separar el directory de trabajo de los repositorys?

Para responder a su primera pregunta, sí, puede. Supongamos que el directory remoto es ssh://user@host/home/user/repo . Este debe ser un repository 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 repository remoto.

Para llegar a su próxima pregunta, debería poder hacer lo mismo utilizando un set diferente de commands. 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 commands de control remoto / push arriba después de este paso. Puede que tenga que verificar una twig específica después de hacerlo, para que el clon "somesite" en el server realmente sepa qué twig seguir. A partir de ese momento, presionar hacia ese repository debería desencadenar una nueva salida de esa twig.

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

En el server remoto:

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

En la máquina local:

1: Cambie a su directory 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 server remoto:

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

En la máquina local:

1: git remote add origen ssh: // usuario @ server / 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 pnetworkingeterminados. Por lo tanto, es bastante seguro.

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 repository existente que ya tiene al less una ejecución de confirmación

 git remote add origin git@example.com:my_project.git git push -u origin master 

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

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 directory en cualquier lugar:

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

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

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

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

Solo para darle una alternativa, puede usar:

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

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