Pregunta

Por uno y medio de años, he estado manteniendo mis ojos en el git de la comunidad con la esperanza de hacer el cambio de distancia desde el SVN.Una cuestión particular que me retiene es la incapacidad para bloquear archivos binarios.Durante el año pasado, todavía tengo que ver la evolución de esta cuestión.Entiendo que el bloqueo de archivos va en contra de los principios fundamentales de la distribución de control de código fuente, pero no veo cómo una empresa de desarrollo web puede tomar ventaja de git para el seguimiento de código fuente y el archivo de imagen cambia cuando existe el potencial de que el archivo binario de conflictos.

Para lograr los efectos del bloqueo, una "central" repositorio debe ser identificado.Independientemente de la naturaleza distribuida de git, la mayoría de las empresas tienen una "central" repositorio de un proyecto de software.Debemos ser capaces de marcar un archivo como el que requiere un bloqueo de los órganos de gobierno repositorio git en una dirección especificada.Tal vez esto se hace difícil debido a git pistas contenido de los archivos, no los archivos?

¿Alguno de ustedes tiene experiencia en el trato con git y los archivos binarios que debe ser bloqueado antes de la modificación?

NOTA:Parece como Fuente de Engranajes del nuevo código abierto distribuido de control de versiones del proyecto, Veracidad, ha de bloqueo como uno de sus objetivos.

¿Fue útil?

Solución

Git LFS 2.0 se ha añadido soporte para el bloqueo de archivos.

Con Git LFS 2.0.0 ahora puede bloquear los archivos que usted está trabajando activamente en, evitando que otros empujando a la Git LFS servidor hasta que se desbloquee de nuevo los archivos.

Esto evitará conflictos así como la pérdida de trabajo en los que no puede mezclar archivos de nivel de sistema de ficheros.Mientras que puede parecer en contradicción con la distribuida y paralela a la naturaleza de Git, el bloqueo de archivos es una parte importante de muchas de desarrollo de software de flujos de trabajo—en particular para los grandes equipos de trabajo con el binario activos.

Otros consejos

La subversión ha bloqueos, y no son sólo consultivos.Pueden ser forzada mediante el svn:needs-lock atributo (pero también puede ser deliberadamente roto si es necesario).Es la solución adecuada para la gestión de no combinables archivos.La empresa en la que trabajo para tiendas de todo a la Subversión, y utiliza svn:needs-lock para todos los que no son combinables archivos.

No estoy de acuerdo con "los bloqueos son sólo un método de comunicación".Son un modo mucho más efectivo que el método de notificaciones push-tales como el teléfono o el e-mail.La subversión de los bloqueos se auto-documentación (que tiene el bloqueo).Por otro lado, si usted tiene que comunicarse por otros tradicionales de notificación de inserción de los canales, tales como e-mail, que se hará el envío de la notificación?Usted no sabe de antemano quién podría querer editar el archivo, especialmente en los proyectos de código abierto, a menos que usted tenga una lista completa de todo su equipo de desarrollo.Así que los tradicionales métodos de comunicación no son tan eficaces.

Una central de bloqueo del servidor, mientras que en contra de los principios de DVCS, es el único método viable para no combinables archivos.Mientras DVCS no tenemos un centro de característica de bloqueo, creo que va a mantener a la empresa en la que trabajo para el uso de Subversion.

La mejor solución sería hacer una combinación de herramienta para todos sus formatos de archivo binario, pero eso es a largo plazo y permanente objetivo que nunca va a ser "terminado".

He aquí un interesante leer sobre el tema.

Estoy de acuerdo en que el bloqueo de archivos binarios es una característica necesaria para algunos entornos.Yo sólo tenía un pensamiento acerca de cómo implementar esto, a pesar de que:

  • Tienen una manera de marcar un archivo como "needs-lock" (como la "svn:needs-lock" de la propiedad).
  • En la caja, git iba a marcar un archivo como de sólo lectura.
  • Un nuevo comando git-lock se pondría en contacto con una central de bloqueo del servidor se ejecutan en algún lugar de pedir permiso al bloqueo.
  • Si el bloqueo de servidor concede permiso, marca el archivo de lectura-escritura.
  • git-add se informará al bloqueo de servidor de contenido hash del archivo bloqueado.
  • El bloqueo de servidor de reloj para que el contenido de hash para aparecer en un commit en el repositorio principal.
  • Cuando el hash aparece, liberar el bloqueo.

Esto es de mucha mitad del horno idea y hay potencial de agujeros por todas partes.También va en contra del espíritu de git, sin embargo, que sin duda puede ser útil en algunos contextos.

Dentro de una organización particular, este tipo de cosas que tal vez podría ser construido a partir de una combinación adecuada de la secuencia de comandos de contenedores y cometer los ganchos.

En respuesta a Mario adicionales de preocupación con los cambios que están ocurriendo en varios lugares en los binarios.Por lo que el escenario es Alice y Bob están tanto realizar cambios en el mismo binario de recursos al mismo tiempo.Cada uno de ellos tiene su propio local de repos, clonado a partir de una central remota.

Este es de hecho un problema potencial.Así que Alice acabados de primera y empuja a la central alice/update la rama.Normalmente cuando esto sucede, Alice iba a hacer un anuncio que debe ser revisado.Bob se ve que y la revisa.Él puede (1) incorporar los cambios a sí mismo en su versión (de la ramificación de alice/update y hacer sus cambios) o (2) publicar sus propios cambios a bob/update.De nuevo, se hace un anuncio.

Ahora, si Alice empuja a master en lugar de eso, Bob tiene un dilema cuando él tira master y trata de combinar en su sucursal local.Sus conflictos con la de Alice.Pero, de nuevo, el mismo procedimiento se puede aplicar en diferentes ramas.Y aunque Bob caso omiso de todas las advertencias y se compromete a través de Alice, siempre es posible sacar de Alice se comprometen a solucionar las cosas.Esto se convierte en simplemente un problema de comunicación.

Desde (AFAIK) la Subversión de las esclusas son sólo consultivo, un correo electrónico o mensaje instantáneo podría servir para el mismo propósito.Pero incluso si usted no hace eso, Git te permite solucionarlo.

No, no hay ningún mecanismo de bloqueo de por sí.Pero un mecanismo de bloqueo tiende a ser un sustituto para una buena comunicación.Creo que por eso el Git desarrolladores han añadido un mecanismo de bloqueo.

Hemos comenzado recientemente a usar Git (usa Subversion anteriormente) y he encontrado un cambio en el flujo de trabajo que pueden ayudarle con su problema, sin necesidad de bloqueos.Se aprovecha de cómo git está diseñada y de lo fácil ramas.

Básicamente, se reduce a empujar a un no-maestro de la rama, haciendo una reseña de esa rama, y, a continuación, en la fusión de la rama master (o cualquiera que sea el destino de la rama).

El camino git está "destinado" a ser utilizado, cada desarrollador publica su propio repositorio público, que piden a los demás a tirar.He encontrado que la Subversión de los usuarios tienen problemas con eso.En vez de eso, nos empuje a la rama de los árboles en el repositorio central, con la que cada usuario tiene su propia rama de árbol.Por ejemplo, una jerarquía de como podría funcionar esto:

users/a/feature1
users/a/feature2
users/b/feature3
teams/d/featurey

Siéntase libre de utilizar su propia estructura.Nota también estoy mostrando tema ramas, otro de los git idioma.

A continuación, en un local de la repo de usuario:

feature1
feature2

Y para llegar a servidor central (origen):

git push origin feature1:users/a/feature1

(esto probablemente puede ser simplificado con los cambios en la configuración)

De todos modos, una vez feature1 es revisado, quien es responsable (en nuestro caso, es el desarrollador de la característica, usted podría tener un solo usuario responsable combina a la maestra), hace lo siguiente:

git checkout master
git pull
git merge users/name/feature1
git push

La tire hace un fetch (tirando de cualquier nuevo maestro cambios y la rama de la característica) y las actualizaciones de maestro a lo que el repositorio central ha.Si el usuario hizo su trabajo y el seguimiento de maestro correctamente, no debería haber ningún problema con la combinación.

Todo esto significa que, incluso si un usuario o equipo remoto hace un cambio a un recurso binario, que se revisará antes de que se incorpora en la rama master.Y hay una clara delimitación (basado en el proceso) como para cuando algo va en la rama master.

También se pueden hacer cumplir mediante programación los aspectos de la esta usando git ganchos, pero de nuevo, no he trabajado con estos todavía, así que no puedo hablar sobre ellos.

Cuando yo estaba usando Subversion, yo religiosamente conjunto de la svn:needs-lock propiedad en todos los binarios e incluso la duro-a-editar archivos de texto.Yo nunca en realidad sufrido ningún tipo de conflictos.

Ahora, en Git, no me preocupo de esas cosas.Recuerde:bloqueos en la Subversión en realidad no son obligatorios los bloqueos, no son más que herramientas de comunicación.Y adivinen qué:No necesito de Subversion para comunicarse, puedo manejar bien con el E-Mail, el Teléfono y la mensajería instantánea.

Otra cosa que me hizo, es para reemplazar a muchos formatos binarios con texto sin formato.Yo uso reStructuredText o LaTΕΧ en lugar de Word, CSV en lugar de Excel, ASCII-Art en lugar de Visio, YAML en lugar de bases de datos, SVG en lugar de OO Dibujar, abc lugar de MIDI, y así sucesivamente.

Vale la pena examinar su flujo de trabajo actual para ver si el bloqueo de imágenes es realmente necesario.Es relativamente inusual para dos personas, de forma independiente, editar una imagen, y un poco de comunicación puede ir una manera larga.

Me han hablado de este tema en git, grupos de discusión y han concluido que en este momento, no es no acordado el método de centralizado de bloqueo de archivos para git.

TortoiseGit apoya plenamente el git de flujo de trabajo para documentos de Office delegar diff a la misma Oficina.Funciona también delegar a OpenOffice para formatos de OpenDocument.

Yo no esperaría de bloqueo de archivos de hacer siempre como una característica en git.¿Qué tipo de archivos binarios que están principalmente interesados en?Estás realmente interesado en el bloqueo de los archivos, o sólo la prevención de los conflictos causados por no ser capaz de combinación de ellos.

Me parece recordar que alguien hablando (o incluso la implementación) soporte para la fusión de OpenOffice-documentos en git.

¿Qué acerca de los archivos cad?Si los archivos no están bloqueados, para que sea guardado leer-sólo así, la mayoría de los programas de cad sería simplemente un cambio arbitrario de bits, visto como un archivo nuevo por cualquier vcs.Así que en mi opinión, el bloqueo es un medio ideal para comunicar su intención de cambiar algunas particalur archivo.Así, se evita que algunos programas de Software para obtener acceso de escritura en el primer lugar.Esto permite que las actualizaciones de los archivos locales, sin la necesidad de cerrar el software o, al menos, todos los archivos por completo.

Sólo hay que poner un archivo de texto en el cc con el archivo que desea bloquear y, a continuación, tiene la actualización de gancho rechazarlo.

Podría ser cierto, que en la reorganización de un proyecto puede ayudar a evitar los bloqueos, pero:

  • Los equipos también están organizados por otras prioridades (ubicación, clientes, ...)
  • Las herramientas también son seleccionados por otros objetivos (compatibilidad, precio, facilidad de uso por la mayoría de los empleados),
  • Algunas herramientas (y por lo tanto no hay archivos binarios) no puede ser evitado, ya que simplemente no hay reemplazo que puede hacer el mismo trabajo, el ajuste de la misma a la empresa por el mismo precio.

A petición, que una empresa puede organizar su flujo de trabajo y reemplazar todas sus herramientas que producen los binarios, sólo para ser capaz de trabajar con git, debido a la falta de cerraduras, suena bastante ineficiente.

Los bloqueos no encajan en el git de la filosofía (que nunca fue hecho para los binarios), pero las hay que no neglectable situaciones, donde las cerraduras son la forma más eficaz de resolver ese problema.

Esto no es una solución sino un comentario sobre por qué los mecanismos de bloqueo son necesarios.Hay algunas herramientas que se utilizan en algunos de los campos que utilizar el binario sólo formatos que son de plano de misión crítica y el "mejor uso/herramientas diferentes" no es una opción.No hay ninguna alternativa viable herramientas.Los estoy realmente familiarizado con el no ser candidatos para la fusión, incluso si usted almacena la misma información en un formato ascii.Una objeción que he escuchado es que usted quiere ser capaz de trabajar sin conexión.La herramienta en particular estoy pensando en que realmente no funciona sin conexión de todos modos debido a la necesidad de tirar de licencias por lo que si tengo los datos de un ordenador portátil no es como yo puede ejecutar la herramienta, mientras que en un tren de todos modos.Dicho esto, ¿qué git ¿si tengo una conexión lenta, puedo conseguir las licencias y también tire hacia abajo de los cambios, pero tienen la rápida copia local para ver diferentes versiones.Que es una buena cosa que los DVCS le da incluso en este caso.

Punto de vista de uno es que git no es, simplemente, la herramienta a utilizar, pero es agradable para todos los archivos de texto que se logró también con él y es molesto para necesitar diferentes de la versión de las herramientas de control para los diferentes archivos.

El tipo de asesoramiento-bloqueo-a través de correo electrónico enfoque realmente apesta.Lo he visto y se han cansado de un sinfín de correos electrónicos de "yo tengo la edición de la misma", "estoy hecho de edición" y visto los cambios perdido a causa de ella.El caso particular estoy pensando es el caso de una colección de pequeños archivos de texto ascii habría sido mucho más agradable, sino que es un tema aparte.

No estoy sugiriendo el uso de git en mi empresa para el mismo problema.Utilizamos EA para todos nuestros diseños y microsoft word para la documentación, no sabemos de antemano que puede editar un archivo en particular, de modo de bloqueo exclusivo es nuestra única opción.

git va a funcionar muy bien en un no-ambiente de trabajo en equipo donde cada desarrollador es el único responsable de un fragmento de código o de archivo, porque en ese caso la comunicación acerca de los bloqueos no es necesario.

Si su organización requiere de equipo de medio ambiente (generalmente a la franja de los desarrolladores de la seguridad en el empleo), a continuación, utilizar svn, git no es para usted.Svn proporciona tanto la fuente de control y de comunicación entre los desarrolladores acerca de los bloqueos.

Git no es la prestación de cualquier comando para bloquear archivos, pero he fondo una manera de lograr que la función usando git ganchos.Un auxiliar es necesario un servidor para almacenar el bloqueo de la información.Podemos utilizar un gancho pre-confirmación para verificar si alguno de los cometidos de los archivos está bloqueado.Y si alguien bloquea un archivo, un programa debe decirle al servidor auxiliar de la información de la taquilla y el archivo bloqueado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top