Ecrire devant
Récemment, j'ai constaté que de nombreux amis ne sont pas très familiers avec l'utilisation de certains outils de base au travail, tels que: Git, un entrepôt de gestion de code distribué, beaucoup d'entre eux ne sont pas très familiers ou pas très familiers. Même certains amis n'ont jamais entendu parler de Git, alors ils utilisent juste SVN. Comme tout le monde le sait, les grands géants de l'Internet d'aujourd'hui et les entreprises émergentes du cheval noir de l'Internet utilisent essentiellement Git et ont fondamentalement abandonné l'utilisation de SVN. Pourquoi? Regardons ensemble.
La différence entre Git et SVN
Différentes méthodes de stockage
Git stocke le contenu dans un format de métadonnées similaire à une base de données k / v, tandis que SVN est basé sur des fichiers (la nouvelle version de SVN a été remplacée par le stockage des métadonnées)
Ici, nous donnons un exemple d'utilisation de Git simple.
cd .git/objects/df/
git cat-file -p df70460b4b4aece5915caf5c68d12f560a9de56e
echo 'version1' > text.txt
git hash-object -w text.txt
Différents modes d'utilisation
Pour pousser des fichiers localement vers des services distants, SVN n'a besoin que de commint et Git a besoin de trois étapes: ajouter, commint et pousser.
Par exemple, nous utilisons la figure suivante pour simuler l'utilisation de SVN.
Nous pouvons utiliser la figure suivante pour simuler l'utilisation de Git.
Le mode de gestion des versions est différent
Git est un système de gestion de version distribué, tandis que SVN est un système de gestion centralisé à distance.
Par exemple, nous pouvons utiliser la figure suivante pour représenter la gestion centralisée de SVN.
Nous pouvons utiliser la figure suivante pour représenter la gestion distribuée de Git.
Résumé des commandes principales de Git
Installation du client Git
Téléchargement officiel du client: https://git-scm.com/downloads
Téléchargez d'autres clients: https://tortoisegit.org/download/
Utilisation des commandes Git
(1) Cloner en local basé sur un entrepôt distant
git clone <remote_url>
(2) Le répertoire courant est initialisé en tant qu'entrepôt local git
git init <directory>
(3) Créer un projet basé sur un modèle mvn
mvn archetype:generate
Ajouter localement
(1) Ajouter le fichier spécifié à la zone de stockage temporaire
git add <fileName>
(2) Ajouter le répertoire spécifié à la zone de stockage temporaire
git add <directory>
(3) Tout ajouter
git add -A
(4) Supprimez le répertoire et les sous-répertoires spécifiés de la zone de stockage temporaire
git rm --cached target -r
(5) Ajoutez le fichier de configuration .gitignore
Soumettre localement
(1) Soumettre à l'entrepôt local
git commit file -m '提交的注释信息'
(2) Soumettre rapidement à l'entrepôt local
git commit -am '快捷添加与提交'
Gestion de succursale
(1) Afficher la branche actuelle
git branch [-avv]
(2) Créer une nouvelle branche basée sur la branche actuelle
git branch <branch name>
(3) Créer une nouvelle branche basée sur la soumission
git branch <branch name> <commit id>
$ git branch -d {
dev}
(4) Changer de branche
git checkout <branch name>
(5) Fusion de succursales
git merge <merge target>
(6) Résoudre les conflits
Si la fusion automatique échoue en raison de conflits, le statut fusionne actuellement. Besoin de modifier manuellement et de resoumettre (validation)
Gestion d'entrepôt à distance
(1) Afficher la configuration à distance
git remote [-v]
(2) Ajouter une adresse distante
git remote add origin http:xxx.xxx
(3) Supprimer l'adresse distante
git remote remove origin
(4) Téléchargez la nouvelle branche sur la télécommande
git push --set-upstream origin master
(5) Associez la succursale locale à la télécommande
git branch --track --set-upstream-to=origin/test test
Gestion des balises
(1) Voir le courant
git tag
(2) Créer une succursale
git tag <tag name> <branch name>
(3) Supprimer la succursale
git tag -d <tag name>
Gestion des journaux
(1) Afficher tous les journaux de validation sous la branche actuelle
git log
(2) Afficher tous les journaux de validation sous la branche actuelle
git log {
branch}
(3) Journal d'affichage sur une seule ligne
git log --oneline
(4) Comparez la différence entre les deux versions
git log master..experiment
(5) Afficher le réseau fusionné soumis dans un graphique
git log --pretty=format:'%h %s' --graph
Principes sous-jacents de Git
Objet de stockage GIT (hashMap)
Git est un système de fichiers adressable par le contenu. Sa partie principale est un simple magasin de données clé-valeur. Vous pouvez insérer n'importe quel contenu dans la base de données et il renverra une clé de hachage pour récupérer la valeur. .
(1) Insérer des données dans la bibliothèque de valeurs-clés Git
echo 'binghe' | git hash-object -w --stdin 79362d07cf264f8078b489a47132afbc73f87b9a
(2) Obtenez le contenu spécifié en fonction de la clé
git cat-file -p 79362d07cf264f8078b489a47132afbc73f87b9a
Sur la base de cette fonction, Git enregistre le contenu de chaque version de fichier dans la base de données, et lorsque la version doit être restaurée, l'une des clés est utilisée pour récupérer et remplacer la période.
Processus d'écriture et de restauration de la version Git
(1) Trouver tous les objets git
find .git/objects/ -type f
(2) Ecrire la version 1
echo 'version1' > README.MF; git hash-object -w README.MF;
(3) Ecrire la version 2
echo 'version2' > README.MF; git hash-object -w README.MF;
(4) Ecrire la version 3
echo 'version3' > README.MF; git hash-object -w README.MF;
(5) Annuler la version spécifiée
git cat-file -p c11e96db44f7f3bc4c608aa7d7cd9ba4ab25066e > README.MF
Donc, notre git add habituel consiste en fait à insérer le contenu modifié dans la bibliothèque clé-valeur. Lorsque nous exécutons git add README.MF, cela équivaut à exécuter git hash-object -w README.MF pour écrire le fichier dans la base de données.
Nous avons résolu le problème de stockage, mais il ne peut stocker que du contenu et ne stocke pas le nom du fichier. Si vous souhaitez revenir en arrière, comment savoir quel contenu correspond à quel fichier? Ensuite, nous examinerons l'objet tree, qui résout le problème du stockage des noms de fichiers.
Objet d'arborescence Git
L'objet d'arborescence résout le problème de nom de fichier. Son objectif est d'organiser plusieurs noms de fichier ensemble, qui contiennent plusieurs noms de fichiers et leurs clés correspondantes et des références à d'autres objets de l'arborescence, qui peuvent être considérés comme des fichiers dans le système d'exploitation. Dossier, un dossier contient plusieurs fichiers et plusieurs autres dossiers.
Chaque branche est associée à un objet d'arborescence, qui stocke tous les noms de fichiers et les clés correspondantes sous la branche courante. Vous pouvez l'afficher avec la commande suivante
git cat-file -p master^{
tree}
Objet commit Git
Une soumission est un instantané de la version actuelle. L'instantané est enregistré en soumettant l'objet. Le contenu stocké est: un objet d'arborescence de niveau supérieur, l'objet qui a été soumis la dernière fois, le nom d'utilisateur et l'adresse e-mail de l'expéditeur, ainsi que l'horodatage de la soumission. soumettre des commentaires.
$ git cat-file -p b2395925b5f1c12bf8cb9602f05fc8d580311836
tree 002adb8152f7cd49f400a0480ef2d4c09b060c07
parent 8be903f5e1046b851117a21cdc3c80bdcaf97570
author binghe <[email protected]> 1532959457 +0800
committer binghe <[email protected]> 1532959457 +0800
En résumé, nous pouvons en déduire qu'un total de trois objets sont générés du processus de modification d'un fichier à sa soumission:
- Un objet de contenu: le contenu du fichier est stocké
- Un objet arbre: la clé du nom de fichier et de l'objet contenu est stockée
- Un objet de soumission: stocke la clé de l'objet de l'arborescence et soumet des commentaires.
Références Git
Lorsque nous exécutons git branch {branchName}, une branche est créée. L'essence est de créer un fichier de référence basé sur le commit spécifié dans git et de le sauvegarder sous .git \ refs \ heads \.
(1) Créer une branche
git branch dev
cat.git\refs\heads\dev
Il existe trois types de références dans Git:
- Référence de branche
- Référence de branche distante
- Référence d'étiquette
(2) Interroger et comparer deux versions
git log master..experiment
(3) Réseau d'historique de soumission de version
git log --pretty=format:'%h %s' --graph
(4) Voir l'arborescence des branches
git cat-file -p master^{
tree}
Eh bien, parlons-en aujourd'hui! N'oubliez pas de l'aimer, donnez-le à quelqu'un qui le regarde et transmettez-le, afin que plus de gens puissent voir, apprendre ensemble et progresser ensemble! !