Gestión de control de versiones


Nota: Todas las imágenes de este blog son de Internet, si hay alguna infracción, comuníquese conmigo para eliminar la imagen.

¿Qué es el control de versiones?

Un método de gestión para registrar cambios en el contenido del código, que pueden utilizar archivos o proyectos para volver a una versión anterior. A través de las diferencias entre distintas versiones, puedes saber dónde hay un problema, dónde se ha modificado (también puedes determinar a qué persona), etc.

centralizado

El sistema de control de versiones centralizado tiene un único servidor administrado centralmente que guarda las revisiones de todos los archivos, y las personas que trabajan juntas se conectan a este servidor a través del cliente para sacar los archivos más recientes o enviar actualizaciones. (En red, el servidor central tiene un alto riesgo de punto único de falla)
centralizado
La desventaja más obvia de hacer esto es el punto único de falla del servidor central. Si hay una hora de tiempo de inactividad, nadie puede enviar actualizaciones durante esa hora y no pueden trabajar juntos.
Si el disco donde reside la base de datos central falla y no tiene una copia de seguridad adecuada, sin duda perderá todos sus datos, incluido el historial de cambios completo del proyecto, dejando solo las instantáneas individuales que las personas guardan en sus máquinas.

repartido

El cliente no solo extrae la última versión de la instantánea del archivo, sino que refleja completamente el almacén de códigos, incluido el historial completo. De esta forma, si algún servidor utilizado para el trabajo colaborativo falla, se puede restaurar posteriormente con cualquier almacén local duplicado. Cada operación de clonación es en realidad una copia de seguridad completa del repositorio de código.
repartido

  1. Puede funcionar sin red, porque la computadora de todos tiene un repositorio completo
  2. Después de modificar un archivo, solo necesita enviar su modificación a otros
  3. Rara vez empuja los cambios directamente, en su lugar usa algo que actúa como un "servidor central". (Esto es conveniente para la operación, el intercambio y la modificación)
  4. Potente gestión de sucursales y otras funciones

Git

Manual: https://git-scm.com/book/zh/v2

Sistema de control de versiones distribuido

  1. La confidencialidad del código es pobre Una vez que el desarrollador clona toda la biblioteca, toda la información del código y la versión se puede revelar por completo;
  2. El control de permisos no es amigable; si necesita restringir varios permisos para desarrolladores, se recomienda usar SVN.

El flujo de trabajo es el siguiente:
Clonar el recurso Git del almacén remoto como almacén local;
retirar el código del almacén local y luego modificar el código;
enviar el código al área de almacenamiento temporal antes de enviar el almacén local;
enviar la modificación y enviarlo al almacén local; el almacén local Cada versión histórica de la modificación se guarda ;
cuando el código debe compartirse con los miembros del equipo, el código modificado puede enviarse al almacén remoto.
git
Índice/Etapa: área de almacenamiento temporal : se utiliza para almacenar temporalmente sus cambios. De hecho, es solo un archivo, que guarda la información de la lista de los archivos que se enviarán la próxima vez, generalmente en el directorio de almacenamiento de Git. En la terminología de Git se llama "índice"

Git tiene tres estados y sus archivos pueden estar en uno de ellos: comprometido, modificado y preparado

  • Modificado significa que el archivo se ha modificado pero aún no se ha guardado en la base de datos. (Estado modificado si se ha realizado una modificación desde la última salida pero no se ha colocado en el área de preparación )
  • Preparado significa que la versión actual de un archivo modificado está marcada para su inclusión en la siguiente instantánea confirmada. (Modificado y puesto en el área de almacenamiento temporal, pertenece al estado de almacenamiento temporal )
  • Confirmado significa que los datos se han guardado de forma segura en la base de datos local. (Se guarda una versión específica del archivo en el directorio Git, que pertenece al estado comprometido )
    inserte la descripción de la imagen aquí

El nuevo almacén de git tiene solo una línea de tiempo. En Git, esta rama se llama la rama principal, es decir, la rama maestra (rebautizada como principal). Estrictamente hablando, el puntero HEAD no apunta al envío, sino al maestro, y el maestro apunta al envío.
inserte la descripción de la imagen aquí
Crear una rama es muy rápido. Excepto por agregar un puntero de desarrollo y cambiar el puntero de HEAD, ¡los archivos en el espacio de trabajo no han cambiado!
por ejemplo: Git crea un nuevo puntero llamado dev, que apunta a la misma confirmación que el maestro, y luego apunta HEAD a dev, lo que significa que la rama actual está en dev :
inserte la descripción de la imagen aquí
después de una nueva confirmación, el puntero dev avanza un paso, mientras que el puntero maestro permanece sin cambios
inserte la descripción de la imagen aquí
. Una vez que se realiza el trabajo, puede fusionar dev en maestro. ¿Cómo se fusiona Git? La forma más fácil es apuntar directamente al maestro a la confirmación actual de dev, y la fusión se completa.
Incluso puede eliminar la rama de desarrollo una vez que haya terminado de fusionar las ramas. Eliminar la rama dev es eliminar el puntero dev. Después de la eliminación, queda una rama maestra:
inserte la descripción de la imagen aquí

SVN

Sistema de control de versiones centralizado

  1. El repositorio está centralizado en el servidor central
  2. Debe extraer el código de la última versión del servidor central debajo de su computadora y luego hacer el trabajo.Después de terminar el trabajo, debe enviar el trabajo que ha realizado al servidor central.
  3. El método de administración centralizada puede ver lo que otros desarrolladores están haciendo hasta cierto punto, y los administradores pueden captar fácilmente los permisos de desarrollo de todos.

La diferencia entre Git y SVN

La mayoría de los sistemas almacenan información en forma de listas de cambios de archivos, y dichos sistemas ( svn, etc. ) ven la información que almacenan como un conjunto de archivos básicos y las diferencias acumuladas de cada archivo a lo largo del tiempo. Después de que enviemos y actualicemos un archivo, los registros del sistema registrarán qué actualizaciones se han realizado en este archivo, **indicado por el símbolo incremental Δ(Delta)**.
svn
La versión final del documento es la adición de estos documentos originales y estas adiciones.
El problema que surge: si hay demasiados incrementos, llevará tiempo y rendimiento obtener el archivo final.

Git usa el método de grabar instantáneas directamente en lugar de la comparación de diferencias .
Git piensa en los datos más como una serie de instantáneas de un pequeño sistema de archivos. En Git, cada vez que confirma una actualización o guarda el estado de un proyecto , básicamente crea una instantánea de todos los archivos en ese momento y mantiene un índice de esa instantánea. Para mayor eficiencia, si el archivo no se ha modificado, Git no vuelve a almacenar el archivo, sino que solo mantiene un enlace que apunta al archivo almacenado anteriormente. Git trata los datos más como un flujo de instantáneas.
git
Almacenar instantáneas de los cambios del proyecto a lo largo del tiempo

  • La gran mayoría de las operaciones en Git solo requieren acceso a archivos y recursos locales, y generalmente no requieren información de otras computadoras en la red.
  • Para navegar por el historial de un proyecto, Git no necesita ir al servidor para obtener el historial y luego mostrarlo, simplemente lo lee directamente desde la base de datos local. Puede ver inmediatamente el historial del proyecto. Si desea ver las modificaciones introducidas entre la versión actual y la versión de hace un mes, Git encontrará el archivo de hace un mes y hará un cálculo de diferencia local en lugar de ser procesado por el servidor remoto o recuperar el archivo de la versión anterior del servidor remoto procesamiento local.
  • Significa que incluso si no hay red (volando), el código se puede operar hasta que haya una conexión de red antes de cargar
  • Git no tiene un número de versión global, mientras que SVN sí: esta es, con mucho, la característica más importante de la que carece GIT en comparación con SVN.

Supongo que te gusta

Origin blog.csdn.net/GDIUOOO/article/details/128189764
Recomendado
Clasificación