¿Por qué los gigantes de Internet usan Git en lugar de SVN? (Contiene un resumen de los principios y comandos básicos de Git)

Escribir al frente

Recientemente, descubrí que muchos socios pequeños no están muy familiarizados con el uso de algunas herramientas básicas en el trabajo. Por ejemplo, Git, un almacén de administración de código distribuido, no es muy familiar o no es muy familiar para muchos socios pequeños. Incluso algunos amigos nunca han oído hablar de Git, por lo que solo usan SVN. Como todo el mundo sabe, los grandes gigantes de Internet de hoy y las empresas emergentes de Internet utilizan básicamente Git, y básicamente abandonaron el uso de SVN. ¿por qué? Miremos juntos hacia abajo.

La diferencia entre Git y SVN

Diferentes métodos de almacenamiento

Git almacena el contenido en un formato de metadatos similar a una base de datos k / v, mientras que SVN se basa en archivos (la nueva versión de SVN se ha cambiado a almacenamiento de metadatos)

Aquí, damos un ejemplo simple de uso de Git.

cd .git/objects/df/
git cat-file -p df70460b4b4aece5915caf5c68d12f560a9de56e
echo 'version1' > text.txt
git hash-object -w text.txt

Diferentes formas de uso

Para enviar archivos localmente a servicios remotos, SVN solo necesita commint y Git necesita tres pasos: agregar, commint y push.

Por ejemplo, usamos la siguiente figura para simular el uso de SVN.

Inserte la descripción de la imagen aquí

Podemos usar la siguiente figura para simular el uso de Git.

Inserte la descripción de la imagen aquí

El modo de gestión de versiones es diferente

Git es un sistema de administración de versiones distribuido, mientras que SVN es un sistema de administración centralizado remoto.

Por ejemplo, podemos utilizar la siguiente figura para representar la gestión centralizada de SVN.
Inserte la descripción de la imagen aquí

Podemos usar la siguiente figura para representar la administración distribuida de Git.

Inserte la descripción de la imagen aquí

Resumen de los comandos principales de Git

Instalación del cliente Git

Descarga oficial del cliente: https://git-scm.com/downloads

Descargar otros clientes: https://tortoisegit.org/download/

Uso de comandos de Git

(1) Clonar a local basado en almacén remoto

git clone <remote_url>

(2) El directorio actual se inicializa como un almacén local de git

git init  <directory>

(3) Cree un proyecto basado en una plantilla mvn

mvn archetype:generate

Agregar localmente

(1) Agregue el archivo especificado al área de almacenamiento temporal

git add <fileName>

(2) Agregue el directorio especificado al área de almacenamiento temporal

git add <directory>

(3) Agregar todo

git add -A

(4) Elimine el directorio y los subdirectorios especificados del área de almacenamiento temporal

git rm --cached target -r

(5) Agregue el archivo de configuración .gitignore

Enviar localmente

(1) Enviar al almacén local

git commit file -m '提交的注释信息'

(2) Enviar rápidamente al almacén local

git commit -am '快捷添加与提交'

Gestión de sucursales

(1) Ver la rama actual

git branch [-avv]

(2) Cree una nueva rama basada en la rama actual

git branch <branch name>

(3) Cree una nueva rama basada en el envío

git branch <branch name> <commit id>
$ git branch -d {
    
    dev}

(4) Cambiar de rama

git checkout <branch name>

(5) Fusión de ramas

git merge <merge target>

(6) Resolver conflictos

Si la combinación automática falla debido a conflictos, el estado se está fusionando en este momento. Necesita modificar y reenviar manualmente (confirmar)

Gestión remota de almacenes

(1) Ver configuración remota

git remote [-v]

(2) Agregar dirección remota

git remote add origin http:xxx.xxx

(3) Eliminar la dirección remota

git remote remove origin 

(4) Cargue la nueva rama al control remoto

git push --set-upstream origin master 

(5) Asociar la sucursal local con el control remoto

git branch --track --set-upstream-to=origin/test test

Gestión de etiquetas

(1) Ver actual

git tag

(2) Crea una rama

git tag <tag name> <branch name>

(3) Eliminar rama

git tag -d <tag name>

Gestión de registros

(1) Ver todos los registros de confirmación en la rama actual

git log

(2) Ver todos los registros de confirmación en la rama actual

git log {
    
    branch}

(3) Registro de visualización de una sola línea

git log --oneline

(4) Compare la diferencia entre las dos versiones

git log master..experiment

(5) Mostrar la red fusionada enviada en un gráfico

git log --pretty=format:'%h %s' --graph

Principios subyacentes de Git

Objeto de almacenamiento GIT (hashMap)

Git es un sistema de archivos de contenido direccionable. Su parte principal es un simple almacén de datos de valor clave. Puede insertar cualquier contenido en la base de datos y devolverá una clave hash para recuperar el valor. .

(1) Insertar datos en la biblioteca de valores-clave de Git

echo 'binghe' | git hash-object -w --stdin 79362d07cf264f8078b489a47132afbc73f87b9a

(2) Obtenga el contenido especificado según la clave

git cat-file -p 79362d07cf264f8078b489a47132afbc73f87b9a

Con base en esta función, Git guarda el contenido de cada versión de archivo en la base de datos, y cuando la versión se va a revertir, una de las claves se usa para recuperar y reemplazar el punto.

Proceso de escritura y reversión de la versión de Git

(1) Encuentra todos los objetos git

 find .git/objects/ -type f

(2) Escriba la versión 1

echo 'version1' > README.MF; git hash-object -w README.MF;

(3) Escriba la versión 2

echo 'version2' > README.MF; git hash-object -w README.MF;

(4) Escriba la versión 3

echo 'version3' > README.MF; git hash-object -w README.MF;

(5) Revertir la versión especificada

git cat-file -p c11e96db44f7f3bc4c608aa7d7cd9ba4ab25066e > README.MF

Entonces, nuestro git add habitual es en realidad insertar el contenido modificado en la biblioteca de valores clave. Cuando ejecutamos git add README.MF, es equivalente a ejecutar git hash-object -w README.MF para escribir el archivo en la base de datos.

Hemos resuelto el problema de almacenamiento, pero solo puede almacenar contenido y no almacena el nombre del archivo. Si desea revertir, ¿cómo sabe qué contenido corresponde a qué archivo? A continuación, veremos el objeto de árbol, que resuelve el problema del almacenamiento de nombres de archivos.

Objeto de árbol Git

El objeto de árbol resuelve el problema del nombre de archivo. Su propósito es organizar varios nombres de archivo juntos, que contiene varios nombres de archivo y sus claves correspondientes y referencias a otros objetos de árbol, que pueden entenderse como archivos en el sistema operativo. Carpeta, una carpeta contiene varios archivos y varias otras carpetas.

Cada rama está asociada con un objeto de árbol, que almacena todos los nombres de archivo y las claves correspondientes en la rama actual. Puedes verlo con el siguiente comando

 git cat-file -p master^{
    
    tree} 

Objeto de confirmación de Git

Un envío es una instantánea de la versión actual. La instantánea se guarda al enviar el objeto. El contenido almacenado es: un objeto de árbol de nivel superior, el objeto que se envió la última vez, el nombre de usuario y la dirección de correo electrónico del remitente, y la marca de tiempo del envío. enviar comentarios.

$ git cat-file -p b2395925b5f1c12bf8cb9602f05fc8d580311836 
tree 002adb8152f7cd49f400a0480ef2d4c09b060c07 
parent 8be903f5e1046b851117a21cdc3c80bdcaf97570 
author binghe <[email protected]> 1532959457 +0800 
committer binghe <[email protected]> 1532959457 +0800 

En resumen, podemos inferir que se generan un total de tres objetos desde el proceso de modificación de un archivo hasta su envío:

  • Un objeto de contenido: el contenido del archivo se almacena
  • Un objeto de árbol: se almacena la clave del nombre del archivo y el objeto de contenido
  • Un objeto de envío: almacena la clave del objeto de árbol y envía comentarios.

Referencias de Git

Cuando ejecutamos git branch {branchName}, se crea una rama. La esencia es crear un archivo de referencia basado en la confirmación especificada en git y guardarlo en .git \ refs \ heads \.

(1) Crea una rama

 git branch dev 
 cat.git\refs\heads\dev

Hay tres tipos de referencias en Git:

  • Referencia de rama
  • Referencia de rama remota
  • Referencia de etiqueta

(2) Consultar y comparar dos versiones

 git log master..experiment

(3) Red de historial de envío de versiones

git log --pretty=format:'%h %s' --graph

(4) Ver la rama del árbol

git cat-file -p master^{
    
    tree}

Bueno, ¡hablemos de eso hoy! ¡No olvides darle me gusta, dárselo a alguien que esté mirando y reenviarlo, para que más personas puedan verlo, aprender juntos y progresar juntos! !

Supongo que te gusta

Origin blog.csdn.net/l1028386804/article/details/108569833
Recomendado
Clasificación