¿Servidor Git como GitHub? [cerrado]

412

Soy un usuario de Subversion desde hace mucho tiempo que probará Git. He leído algo al respecto y entiendo la naturaleza distribuida: puedo ver muchos de los beneficios.

Sin embargo, me gusta la idea de un servidor central que pueda asumir el rol de copias de seguridad, sistema de registro, etc., mientras sigo usando Git para mi bifurcación y uso compartido local. No estoy haciendo un proyecto de código abierto, por lo que no puedo usar Github (sin pagar), por lo que mi pregunta realmente es: ¿cuál es la mejor forma de ejecutar un servidor git local?

Me doy cuenta de que esto puede estar en contra del patrón de uso estándar de Git, pero será útil para mi proyecto. Sin embargo, cualquier preocupación que haya pasado por alto siempre es bienvenida.

¡Gracias!

skaz
fuente
50
Usar un servidor centralizado como lo describe es en realidad un patrón de uso estándar para los sistemas de control de versiones distribuidos, así que no se preocupe por eso. :-)
Aasmund Eldhuset
8
Ahh, pensé que era más la excepción. Quería defenderse "si tienes centralización, ¡entonces simplemente no la obtienes!" comentarios Gracias.
skaz
27
Un pensamiento razonable. :-) En mi opinión, el gran punto de los VCS distribuidos no es que se supone que no debes tener un repositorio central (esto a menudo es muy útil), sino que no estás obligado a usar el repositorio central: puedes realizar confirmaciones locales, y es fácil intercambiar revisiones con personas específicas si es necesario, e incluso puede tener varios repositorios "centrales" (en git, cualquier otro repositorio, no importa qué rol tenga, se llama remoto , y puede agrega tantos como quieras). Y los DVCS a menudo tienen modelos de ramificación muy flexibles (git brilla aquí).
Aasmund Eldhuset
15
Para resumir / reformular el comentario de Aasmund: el objetivo de un DVCS a menudo no es eliminar el repositorio centralizado, sino proporcionar a todos los demás usuarios toda la potencia del VCS también.
Cascabel
2
Google tiene un nuevo repositorio de Cloud Source que permite repositorios privados: cloud.google.com/tools/cloud-repositories Además, FWIW, ¡no estoy seguro de por qué esto está marcado como fuera de tema!
Josh M.

Respuestas:

203

Simplemente puede configurar un servidor ssh y ejecutar un repositorio central allí. Todos los desarrolladores simplemente acuerdan (como una cuestión de política) empujar al servidor cuando terminan de hacer los compromisos. Este es el patrón de uso en mi lugar de trabajo. Muy CVS y SVN-like.

  1. Encuentre un lugar para colocar el repositorio ( /var/gitrootpor ejemplo).
  2. Crea un nuevo repositorio ( mkdir project.git && cd project.git && git init --bare --shared=group).
  3. Luego, en su cliente, clone el repositorio remoto ( git clone ssh://yourserver.com/var/gitroot/project.git && cd project)
  4. agregar algunos archivos ( git add README)
  5. commit ( git commit -m "Initial import"),
  6. empujar ( git push origin master)

Esto debería preparar las cosas para ti.

Chris Eberle
fuente
55
Solo para que quede claro: instale git en otro servidor (accesible) y cree un repositorio. Haga que los clientes clonen ese repositorio. Cuando un cliente completa una solución, sube al repositorio del servidor. ¡Gracias!
skaz
8
+1. De hecho, este es el patrón de uso para el uso colaborativo de git.
Aasmund Eldhuset
1
Este error ocurrió cuando se empujó el maestro de origen :::: Contando objetos: 3, hecho. Escribir objetos: 100% (3/3), 244 bytes | 0 bytes / s, hecho. Total 3 (delta 0), reutilizado 0 (delta 0) remoto: error: permiso insuficiente para agregar un objeto a la base de datos del repositorio ./objects remote: fatal: error al escribir error del objeto: descomprimir falló: desempaquetar objetos salida anormal a ssh: //localhost/var/gitroot/project.git! [remoto rechazado] maestro -> error maestro (error del desempacador): error al insertar algunas referencias a 'ssh: //localhost/var/gitroot/project.git'
Abdo
3
Escribí una publicación de blog sobre cómo configurar un repositorio de git local hace algún tiempo. Son 10 minutos como máximo. Lo difícil es establecer estrategias adecuadas de copia de seguridad del servidor local, administrar el servidor, etc.
atmosx
¿No puedes simplemente correr git init --bare project.git?
Dan Dascalescu
199

Gitorious es una interfaz web de código abierto para git que puede ejecutar en su propio servidor, al igual que github:

http://getgitorious.com/

Actualizar:

http://gitlab.org/ es otra alternativa ahora también.

Actualización 2:

Gitorious ahora se ha unido a GitLab

Craig
fuente
55
Se ve bien, pero la configuración parece pesada (especialmente para un usuario que no utiliza rails) [ cjohansen.no/en/ruby/setting_up_gitorious_on_your_own_server ]
gatoatigrado
1
El proceso de instalación está en proceso de simplificarse mucho y hacerse menos "Rails-y". También hay un instalador automatizado para servidores CentOS (y un dispositivo preconstruido) disponible en la página Instalar Gitorious en getgitorious.com.
thomanil
3
Parece que Gitorious ya no es una solución de alojamiento privado gratuita de código abierto.
Mingming el
1
Si va a getgitorious.com y hace clic en Instalador en Gitorious Community Edition, ¿eso no le brinda una solución de alojamiento privado de código abierto?
Craig
16
También gitlab.org es otra alternativa que se ha desarrollado desde mi respuesta.
Craig
74

Prueba GitLab

La mejor herramienta de GUI de git que he usado. Es muy similar a GitHub.

Es de código abierto (licencia MIT) y es el software de gestión de git más instalado con más de 25,000 instalaciones. Tiene lanzamientos mensuales y una comunidad activa con más de 375 contribuyentes. Puede tener depósitos privados, internos y públicos ilimitados en su propio servidor. Es una aplicación Ruby on Rails que se ejecuta en la mayoría de las plataformas Unix.

Plamen Nikolov
fuente
1
Estoy de acuerdo, es asombroso. (+1) Pero a partir de este comentario es difícil instalarlo. Sería genial si pudieran empaquetar rpm, deb, etc.
Synesso
2
He descubierto que la configuración relativamente nueva de un solo script para Ubuntu es bastante sencilla. Incluso sin él, se trata principalmente de seguir las instrucciones fuera del sitio. Nunca he usado rails o realmente incluso un servidor Ubuntu y lo ejecuté primero.
Jon Shier
Experimenté algunos problemas al integrarlo con Active Directory a través de LDAP.
riezebosch
2
En realidad, hoy en día GitLab es bastante fácil de instalar. Es solo cuestión de desempacar un paquete. Ver about.gitlab.com/downloads
Trabajo
2
Gitlab Enterprise no es gratuito, por supuesto, pero hay una edición comunitaria , que es gratuita y también fácil de instalar. Sin embargo, requiere alrededor de 800 MB de espacio en disco, ya que instala un par de motores de base de datos y muchas dependencias.
OndroMih
39

Si no le importa ensuciarse con la línea de comando, gitolite es una delicia absoluta cuando trabaja en un entorno corporativo donde necesita establecer diferentes derechos de acceso en diferentes repositorios. Es una especie de versión más nueva de gitosis mencionada por @Chris.

Aquí está el resumen del sitio web del autor:

Gitolite le permite usar un solo usuario en un servidor para alojar muchos repositorios git y proporcionar acceso a muchos desarrolladores, sin tener que darles usuarios reales o acceso de shell al servidor. La magia esencial para hacer esto es el acceso pubkey de ssh y el archivo autorizado de claves, y la inspiración fue un programa más antiguo llamado gitosis.

La gitolita puede restringir quién puede leer (clonar / buscar) o escribir (empujar) un repositorio. También puede restringir quién puede empujar a qué rama o etiqueta, lo cual es muy importante en un entorno corporativo. Gitolite se puede instalar sin requerir permisos de root y sin un software adicional que no sea git y perl.

Tiene un conjunto de funciones bastante completo, pero una cosa que me gusta mucho es que la edición de la configuración se realiza a través de un repositorio especial de git. Es decir, agregar un usuario es solo

  • Agregar usuario al archivo de configuración
  • Agregue la clave ssh del usuario
  • Cometer el cambio
  • Empujarlo a gitolita
  • ¡Voila, la configuración es en vivo!

Y cuando necesita mirar el código a través del navegador, gitolite tiene soporte para la configuración de "sincronización" con gitweb. O si le gusta cgit , que es una interfaz web muy buena para git escrito en C, mejor, entonces debería ver este tutorial .

stigkj
fuente
24

Puede considerar Gitblit , un servidor, visor y administrador de repositorio Java Git puro, integrado y de código abierto para pequeños grupos de trabajo.

James Moger
fuente
Gitblit parece perfecto para mi aplicación, pero me preocupa que el último lanzamiento fue en 2016.
Roberto
1
@Roberto, un punto válido. Supongo que depende de lo que necesites o de lo que sea importante para ti. Si funciona para usted tal como es, aún podría ser una opción válida. Si le preocupan las correcciones oportunas de errores o necesita más funciones, es posible que no lo haga.
Florian
15

Navegador de huesos desnudos

git instaweb --httpd=webrick

del libro git scm

combínelo con algo como el enfoque descrito aquí para el desarrollo distribuido (crédito a datagrok por el concepto bien descrito)

Inicie un servidor git único desde cualquier repositorio local.

Ya twitteé esto, pero pensé que podría usar algo de expansión:

Habilite el flujo de trabajo descentralizado de git: git config alias.serve "daemon --verbose --export-all --base-path = .git --reuseaddr --strict-paths .git /"

Supongamos que usa un flujo de trabajo de git que implica trabajar con un repositorio "oficial" central desde el que extrae y empuja sus cambios. Estoy seguro de que muchas empresas hacen esto, al igual que muchos usuarios de servicios de alojamiento de git como Github.

Digamos que el servidor, o Github, se cae un poco.

No se preocupe, después de todo, una de las razones por las que usa git es para que tenga una copia del historial completo del proyecto en su clon local.

Puede seguir codificando y comprometiéndose, mientras espera que el equipo de operaciones le dé vida al servidor. Nota personal: compre donas para el equipo de operaciones.

Pero, ¿qué pasa si, durante este tiempo de inactividad, desea colaborar con otra persona, que puede no ser un experto en git, en el mismo repositorio?

O, en lugar del tiempo de inactividad, ¿qué sucede si usted y su colaborador están en el campo y, por alguna razón, no puede obtener su VPN para permitirle conectarse a su repositorio oficial?

O bien, ¿qué sucede si usted y su colaborador están generando un montón de cambios experimentales, y aunque tiene acceso, no desea llevar su desorden inacabado al repositorio central oficial? (Ni siquiera como ramas características). Tal vez esté en medio de la limpieza de un desastroso rebase o fusión y las ramas estén por todos lados.

Bueno, git, como probablemente ya sabe, es un sistema de control de versiones "distribuido" .

Aunque puede usar un repositorio git "oficial" central en su flujo de trabajo, todavía tiene la capacidad de usar git de manera punto a punto, donde usted y su colaborador simplemente construyen y comparten compromisos entre ellos, y el centro El servidor nunca tiene que saberlo.

Entonces, ¿cómo obtienes tus ramas y te comprometes con ellas, o viceversa?

  • Puede utilizar las instalaciones de git para enviar parches por correo electrónico. Pero eso es un poco poco elegante y requiere un poco de conocimiento sobre cómo aplicar parches enviados por correo electrónico.
  • Puede crear una cuenta en su propia máquina para que su colaborador pueda ingresar. Pero tal vez no tenga acceso raíz local, o tal vez no confíe en ellos con acceso SSH a su caja.
  • Podrías clonar tu repositorio en una memoria USB y pasarlo de un lado a otro. Pero eso es bastante tedioso, especialmente si se encuentra en la misma red local y requiere una memoria USB.

Probablemente también puedas pensar en otros métodos. Pero hay una manera súper fácil: si pueden verse en la red, pueden iniciar un servidor git único que pueden usar como control remoto para clonar, buscar y extraer sus cambios, y matarlo cuando estén hecho con eso.

La herramienta que permite esto es git daemon, que tiene muchas opciones y funcionalidades, pero con el propósito de habilitar este servicio único "solo sirve el repositorio en el que estoy", la forma de usarlo es crear un alias. Me gusta llamarlo git serve. Correr:

git config --global alias.serve "daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/"

Usar un alias es realmente crucial, porque los alias git se ejecutan en el directorio base de su árbol de trabajo. Entonces, la ruta '.git' siempre apuntará al lugar correcto, sin importar dónde se encuentre dentro del árbol de directorios de su repositorio.

Use su nuevo git servecomo así:

  1. correr git serve . "Listo para retumbar", informará. Git es malo.
  2. Encuentra tu dirección IP. Digamos que es 192.168.1.123.
  3. Di "hola Jane, no estoy lista / no puedo llevar estas confirmaciones al origen, pero puedes recuperar mis confirmaciones en tu clon ejecutando git fetch git://192.168.1.123/ "
  4. Presione ctrl + c cuando ya no quiera servir ese repositorio.

También podría decirle a Jane git clone git://192.168.1.123/ local-repo-namesi aún no tiene un clon del repositorio. O bien, use git pull git://192.168.1.123/ branchnamepara buscar y fusionar de una vez, lo que es útil si está trabajando en conjunto en una rama de características.

Sin embargo, tenga en cuenta que no debe hacer esto en redes hostiles si guarda secretos en su repositorio, porque no hay autenticación. No anuncia su existencia, pero cualquiera con un escáner de puertos puede encontrarlo, conectarse a él y clonar su repositorio.

Pero no es súper peligroso porque es de solo lectura por defecto. Leer elgit daemon página manual detenidamente si cree que desea habilitar el acceso de escritura. En el caso de que desee obtener las confirmaciones de su colaborador, es mucho más seguro dejarlo solo de lectura y pedirle a su colaborador que también ejecute este comando, para que pueda extraerlo.

Relacionado tangencialmente: sobre el tema de los servidores únicos, si desea compartir temporalmente un montón de archivos estáticos a través de HTTP: python -m SimpleHTTPServer

Mark Essel
fuente
11

Si necesita un servidor GIT bueno y fácil, entonces debe probar GitBlit. También uso gitolite pero solo servidor, con GitBlit obtienes todo en uno, servidor, administrador, repos. gerente ... URL: http://gitblit.com/

corysus
fuente
9

https://rhodecode.com es una aplicación web de código abierto para Git & Mercurial que se puede instalar muy fácilmente en cualquier sistema operativo (se incluye un instalador).

RhodeCode (la nueva versión se llama RhodeCode Enterprise) agrega las características faltantes de Git como la revisión de código y, en general, es muy rápido y confiable.

Sebastian
fuente
1
Realmente ejecuto mi propia instancia aquí: code.gmgauthier.com . La versión 3.x es notablemente limpia y estable. Lo uso para mucho más que código, en realidad (aunque hay mucho de eso ahí arriba). Lo uso para guardar copias maestras de mis diarios personales, manuscritos para dos libros, guiones de podcast y borradores de blogs. Es ideal para esto, en parte porque representa tanto Markdown como RestructuredText para usted, haciendo que los borradores sean muy legibles desde cualquier lugar.
Greg Gauthier
8

También puede instalar Indefero , es un clon GPL de GoogleCode, ya que admite Subversion y Git, puede tener una transición sin problemas. Soy el autor de Indefero.

Loïc d'Anterroches
fuente
Lo estoy usando y me gusta. Pero el diseño está un poco anticuado. ¿Todavía se mantiene?
Jaroslav
8

Puede que no sea ​​la configuración de servidor git más común , pero habiendo jugado con diferentes diseños, herramientas, duplicación y esquemas de permisos, diría que una alternativa bastante sólida para los repositorios empresariales es Gerrit , que puede parecer sorprendente ya que es más conocido como un herramienta de revisión de código. Comenzamos a usarlo como revisión de código y lentamente se convirtió en nuestro repositorio principal, desaprobando g3 / gitolite

  • Es fácil de implementar (básicamente se suelta .war en un tomcat)
  • tiene una interfaz de usuario web para administrar repositorios, grupos y permisos (o un ssh cli)
  • tiene una implementación integrada de Java ssh y git, por lo que no tiene nada más que configurar
  • Compatibilidad con ldap para usuarios y grupos (generalmente imprescindible para empresas)
  • un sistema de permisos muy flexible (con grupos de proyectos, herencia de permisos, restricción de lectura / escritura / ramificación / escrituras no revisadas / etc.)
  • capacidades de revisión de código (si te gusta esa cosa)
  • reflejo de repositorio (para enviar algunos repositorios a github u otro repositorio público)

Además, es utilizado por grandes proyectos (por ejemplo, Android, Chrome), por lo que escala y ahora es bastante sólido. Simplemente otorgue a sus usuarios el permiso PUSH si desea permitir omitir la parte de revisión de código.

simpoir
fuente
7

Para un alojamiento remoto Como otros han dicho, bitbucket.org ofrece repositorios privados gratuitos, lo he estado usando sin problemas.

Para la red local o LAN, agregaré este scm-manager.org (un único archivo ejecutable, es realmente simple de instalar, está hecho en Java para que pueda ejecutarse en Linux o Windows). En caso de que lo instales, estas son contraseñas predeterminadas.

Username: scmadmin
Password: scmadmin
Hernán Eche
fuente
3
gracias por proporcionar las credenciales predeterminadas.
Ryan Williams
6

Mientras tanto, el sitio de alojamiento de Mercurial Bitbucket también ha comenzado a ofrecer repositorios Git.

Entonces, si no necesita un servidor local , solo un lugar central donde pueda alojar repositorios privados de Git de forma gratuita, IMO Bitbucket es la mejor opción.

De forma gratuita, obtiene depósitos ilimitados privados y públicos de Git y Mercurial.
La única limitación es que en el plan gratuito, no más de cinco usuarios pueden acceder a sus repositorios privados (para más, debe pagar).
¡Mira https://bitbucket.org/plans para más información!

Christian Specht
fuente
4

Si desea solicitudes de extracción, existen los proyectos de código abierto de RhodeCode y GitLab y el Stash pagado

joedborg
fuente
2

Si solo desea su repositorio en un lugar central, esto es bastante fácil con el control de versiones distribuido como Git:
puede colocar su repositorio central en una carpeta compartida en una máquina central y todos pueden clonarlo desde allí.

Si desea un sitio web "real" en su servidor local, conozco el sitio web de alojamiento de Git http://repo.or.cz .
Parece tener menos funciones que GitHub, pero a diferencia de GitHub, puede obtener el código fuente y alojarlo en su propio servidor local.

Descargo de responsabilidad: solo leí sobre repo.or.cz, ¡nunca lo intenté yo mismo!

Christian Specht
fuente
2

para configuraciones simples, puede proporcionar acceso ssh a un servidor central y configurar el directorio de trabajo de cada usuario para empujar / extraer desde este 'origen'. Esa sería la configuración más simple y común para equipos pequeños.

También puede analizar la gitosis, que le brinda un servidor http y la capacidad de administrarlo de forma remota. De esa manera, no tiene que otorgar acceso ssh y todo lo que implica a cada committer.

sbeam
fuente
2

Para agregar a lo que Chris ha dicho, puede usar la gitosis (http://eagain.net/gitweb/?p=gitosis.git) para controlar quién puede acceder al repositorio.

Dependiendo de su uso, también puede usar ganchos (en la carpeta .git / hooks) para que su código se incorpore automáticamente al sistema de archivos del servidor cuando empuje desde su máquina local. Aquí hay un script popular para hacerlo: http://utsl.gen.nz/git/post-update . Sin embargo, esto no será necesario en todos los casos.

liamacheung
fuente
El enlace al script posterior a la actualización está muerto ...
Morten Jensen