La plupart des informations proviennent de Qianfeng Education, et l'individu a apporté quelques modifications.
Intrusion et suppression.
Informations vidéo correspondantes: https://www.bilibili.com/video/BV1Mf4y117f3?p=1&spm_id_from=pageDriver
Introduction
Dans le processus de développement par une seule personne, la gestion des versions est nécessaire pour faciliter le contrôle de la progression du développement.
Dans le processus de développement multi-personnes, non seulement la gestion des versions est requise, mais également un contrôle collaboratif multi-personnes .
2. Présentation
- Git est un système de contrôle de version distribué open source pour le traitement agile et efficace de tout petit ou grand projet.
- Git est un logiciel de contrôle de version open source développé par Linus Torvalds pour aider à gérer le développement du noyau Linux.
- Site officiel: https://git-scm.com/
Trois, installation de Git
3.1 Télécharger Git
Téléchargez Git https://git-scm.com/downloads
3.2 Installation
Installation, en plus de l'emplacement d'installation, l'autre peut être la prochaine étape
3.3 Configuration de base (définir les variables globales)
Après l'installation, ouvrez la fenêtre cmd de git et signalez votre domicile
Les informations suivantes seront utilisées lors de la soumission du code et enregistrées dans chacune de vos soumissions. Ce n'est que plus tard que je saurai qui a fait quelle soumission.
git config --global user.name "Your Name" #用户名
git config --global user.email "[email protected]" #邮箱
# 查看信息
git config -l
3.4 Test
Test: exécuter dans cmd, vérifier la version de git
git version
Quatre, l'architecture
Repository: Il y a un répertoire caché
.git
dans la zone de travail, ce répertoire n'appartient pas à la zone de travail, mais git版本库
, c'est tout le contenu géré par gitZone de stockage temporaire: la bibliothèque de versions contient une zone temporaire pour enregistrer les fichiers à soumettre à l'étape suivante
Branche: le référentiel contient plusieurs branches et les fichiers soumis sont stockés dans la branche
Diagramme d'architecture |
---|
Cinq, entrepôt
Le correspondant est un répertoire , tous les fichiers de ce répertoire sont gérés par git.
À l'avenir , le répertoire racine d' un projet sera utilisé comme entrepôt.
Les modifications apportées à chaque fichier du référentiel sont suivies par git.
5.1 Nouvel entrepôt
Sélectionnez un répertoire et exécutez la commande: git init
Nouvel entrepôt | Catalogue d'entrepôt |
---|---|
[Échec du transfert de l'image du lien externe. Le site source dispose peut-être d'un mécanisme de liaison anti-sangsue. Il est recommandé d'enregistrer l'image et de la télécharger directement (img-37TmA3Vh-1613493411419) (/ Users / xwj / Library / Application Support / typora- user-images / image-20210216205341427 .png)] |
5.2 Zone de travail
Le répertoire où git init est exécuté est la zone de travail, comme dans l'exemple ci-dessus, le répertoire D: \ repo1 est la zone de travail [sans le répertoire .git ]
Tous les fichiers sont d'abord créés dans la zone de travail, puis peuvent être stockés dans l'entrepôt (bibliothèque de versions) pour le contrôle de version.
5.3 Zone de stockage temporaire
La zone de stockage temporaire se trouve également dans le répertoire .git . Lorsque les fichiers de la zone de travail entrent dans l'entrepôt, ils doivent d'abord entrer dans la zone de stockage temporaire.
5.4 Succursale
Le contrôle de version, pour faire simple, consiste à enregistrer de nombreuses versions d'un fichier, et la branche est l'emplacement d'enregistrement final de ces versions.
Six, opérations de base
6.1 Vérifier l'état de l'entrepôt
Exécutez git status pour voir l' état des fichiers dans l'espace de travail
Les fichiers non enregistrés ne sont pas suivis |
---|
[Échec du transfert de l'image du lien externe. Le site source dispose peut-être d'un mécanisme de liaison anti-sangsue. Il est recommandé d'enregistrer l'image et de la télécharger directement (img-ju4HiAcL-1613493411420) (http://xwjpics.gumptlu.work/qinniu_uPic/ xO3NjM.png)] |
6.2 Fichier temporaire
Exécutez git add. Enregistrez tous les fichiers de l'espace de travail dans la zone de stockage temporaire
Enregistrez les fichiers de la zone de travail dans la zone de stockage temporaire |
---|
6.3 Soumettre des documents
Exécutez git commit -m "Écrivez la description de la soumission ici" .Stockez tous les fichiers de la zone de stockage temporaire dans la branche,Former une nouvelle version
Soumettre des documents pour former une version |
---|
Seven, entrepôt éloigné
L'entrepôt du chapitre 5 est en fait un entrepôt local.
Lorsque plusieurs personnes développent en collaboration, chacun conserve la version dans son propre entrepôt local.
Mais le point important est que plusieurs personnes doivent partager le code et fusionner le code. Pour le moment, un entrepôt distant est nécessaire .
7.1 Mode de fonctionnement de l'entrepôt distant
Mode de fonctionnement de l'entrepôt à distance |
---|
7.2 Sélection de l'entrepôt distant
Vous avez le choix entre de nombreux entrepôts distants, tels que github ( https://github.com/ ), code cloud ( https://gitee.com/ ). Notez que github ou code cloud ne sont pas des entrepôts distants mais des serveurs git. Construisez un entrepôt distant dessus ;
Vous pouvez vous inscrire à ces deux types pour vos propres tests, mais s'il s'agit d'un projet commercial, vous devez payer pour plus d'assistance.
L'entreprise peut également faire construire un entrepôt distant par elle-même ( http://qianfeng.qfjava.cn:8087/users/sign_in ).
7.3 Fonctionnement de base
Chaque développeur devra faire face à des opérations de base face à un entrepôt distant.
7.3.1 Enregistrer un compte de serveur git
Dans le compte enregistré de nuage de code et connectez-vous.
Après être entré dans l'entreprise, il est susceptible d'utiliser le serveur git construit par l'entreprise elle-même, vous pouvez donc demander le compte au chef.
7.3.2 Créer un nouvel entrepôt distant
7.3.3 Associer localement l'entrepôt distant
Dans ce document, l'adresse de protocole https de l'entrepôt est sélectionnée, et cette adresse est associée au git local
git remote add origin [https地址\ssh地址]
Ajouter une adresse distante
git remote -v
Afficher l'adresse actuellement associée à l'entrepôt local
Après cela, l '«origine» locale peut être utilisée pour faire référence à l'entrepôt distant |
---|
Transférer les fichiers vers l'entrepôt distant
Transférez le contenu validé de l'entrepôt local vers l'entrepôt distant pour partager votre propre code.
pousser |
---|
[Échec du transfert de l'image du lien externe. Le site source dispose peut-être d'un mécanisme de liaison anti-sangsue. Il est recommandé d'enregistrer l'image et de la télécharger directement (img-RJBCBvGj-1613493411423) (http://xwjpics.gumptlu.work/qinniu_uPic/ bRdmkS.png)] |
Afficher sur le serveur github |
---|
7.3.5 Cloner un entrepôt distant
Si l'entrepôt a été créé par quelqu'un d'autre et que nous avons besoin du contenu, nous pouvons le copier dans le local via git clone .
Créez un nouveau répertoire "repo2", puis exécutez git clone dedans |
---|
7.3.6 Partage de code
Lorsque plusieurs personnes développent en collaboration, le git push du code écrit est téléchargé dans l'entrepôt distant; le git pull du code est nécessaire pour extraire le code.
Sauvegarder: Quelqu'un pousse le fichier local vers l'entrepôt distant:
git push origin master
prendre: Important: à ce stade, si l'autre partie souhaite obtenir la mise à jour, elle doit effectuer une extraction
git pull origin master
7.3.7 Résumé des commandes
commander | la description |
---|---|
git remote add adresse distante du nom distinctif (maître) | Entrepôt distant associé localement |
git push identifiant nom maître | Télécharger le contenu de l'entrepôt local vers l'entrepôt distant |
git pull identification nom maître | Télécharger le contenu de l'entrepôt distant vers l'entrepôt local |
adresse distante git clone | Copiez l'entrepôt distant dans le local et formez automatiquement un entrepôt local |
La différence entre git clone et git pull est la suivante: lorsque la zone locale est vide, git clone est utilisé pour la première fois et git pull est utilisé pour chaque mise à jour suivante.
Huit, branche
8.1 Présentation des succursales
La branche est l'emplacement où chaque version est finalement stockée.
Une branche est une chronologie. Chaque commit git forme une version, et les versions sont stockées tour à tour dans les points de commit de la branche.
La branche est composée de plusieurs points de validation, et il y aura un pointeur sur la branche, qui pointe toujours vers le dernier point de validation par défaut |
---|
Le contenu obsolète / le contenu non modifié de la nouvelle version soumise à chaque fois ne conservera qu'un de ses liens dans la nouvelle version au lieu de le copier. Il s'agit d'une méthode d'optimisation
8.2 Fonctionnement en succursale
8.2.1 Voir la branche
Afficher la branche de la branche git actuelle de l'entrepôt
Il n'y a que la succursale principale dans l'entrepôt par défaut
Lors de l'exécution de git commit , la valeur par défaut est d'enregistrer la version sur la branche master.
Seulement la branche principale par défaut |
---|
8.2.2 Créer une branche
Lors du développement de projets commerciaux, nousNe sera pas facile fonctionner sur le maître branche.
nousUne nouvelle branche de développement sera créée et des enregistrements de version seront créés sur cette branche.
Lorsqu'il n'y a pas de problème avec le code, la version de code mature sur la branche de développement sera ajoutée à la branche master .
Assurez -vous que la version peut être enregistrée dans le temps au cours du processus de développement, et que commettras chaque point sur le maître branche est une version stable.
git branch 新分支名
La branche avec * devant elle représente la branche actuellement utilisée, et la branche par défaut est la branche principale
Créer une branche |
---|
8.2.3 Changer de branche
- Par défaut, la branche actuellement utilisée est la branche principale
- Vous pouvez basculer vers la branche dev, et les commits git suivants créeront une nouvelle version sur la branche dev (point de commit)
git checkout 分支名
Changer de branche |
---|
Vérifiez à nouveau la situation de la succursale |
---|
8.3 Détails de la nouvelle succursale
Lors de la création d'une nouvelle branche, quel contenu la nouvelle branche a-t-elle par défaut? Quels commits sont inclus dans la branche?
8.3.1 Contenu initial de la nouvelle succursale
Chaque branche a un pointeur ,Pour créer une nouvelle branche, créez d'abord un nouveau pointeur .
而且新分支的指针会和当前分支指向同一个提交点。
新分支包含的提交点就是从第一个提交点到分支指针指向的提交点。
每个分支都有一个指针,新建一个分支,首先是新建一个指针 |
---|
8.3.2 多分支走向
在master分支和新分支,分别进行 git add 和 git commit
分支情况如下图:
master分支未动,在dev分支增加一次commit |
---|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bCUoDN95-1613493411426)(http://xwjpics.gumptlu.work/qinniu_uPic/JvXtbD.png)] |
master分支增加一个commit,dev分支再增加一个commit |
---|
8.3.3 分支提交日志
查看分支的提交日志,进而看到当前分支中提交点的详细情况。
简略的查看
git log --oneline
详细的查看:
git log
查看当前分支的提交日志 |
---|
8.4 分支合并
两个分支内容的合并
git merge 分支a 当前分支合并到分支a
合并的方式有两种:快速合并 和 三方合并。
8.4.1 快速合并
如果分支A当前的修改,是完全基于分支B的修改而来,则B分支合并A分支,就是==移动指针即可==。
要求:主分支不动,其他分支一直更新
合并前分支状态 |
---|
快速合并效果(master 合并 dev) |
---|
8.4.2 三方合并
在下图的情况下直接移动指针是不可以的,master会丢失自己原本的状态,所以需要三方合并
在不具备快速合并的条件下,会采用三方合并。
这个合并是git帮忙做的,其实我们是不用担心的
合并前,分支状态 |
---|
三方合并,将2 和3 的更改都累加在1 上,形成新的提交点 |
---|
三方合并,它是把两个分支的最新快照(2 和 3)以及二者最近的共同祖先(1)进行三方合并,合并的结果是生成一个新的快照(并提交)
8.4.3 合并冲突
两个分支进行合并,但它们含有对同一个文件的修改,则在合并时出现冲突,git无法决断该保留改文件哪个分支的修改。
8.4.3.1 冲突演示
场景模拟如下:
master分支修改hig.txt文件
dev分支修改hig.txt
对同一个文件做了不同的修改
然后在master分支 合并 dev分支
合并dev分支 |
---|
此时,打开hig.txt 文件:
冲突后,git会将两个分支的内容都展示在文件中 |
---|
8.4.3.2 冲突解决
出现冲突后,如要由两个开发人员当面协商,该如何取舍,为冲突文件定义最终内容。
解决方案:
- 保留某一方的,删除另一方的
- 保留双方的
- 但无论如何,要记得删除 <<<< ==== >>>> 这些
- 本质是两人协商为冲突的内容,定制出合理的内容。
- 根据协商,再次编辑文件
提交 再次编辑后的文件 |
---|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-byBj3jKu-1613493411429)(http://xwjpics.gumptlu.work/qinniu_uPic/8Thl31.png)] |
九、IDE关联Git(以goland为例)
9.1 关联Git
File > Settings 关联过程是自动的
此处关联是Idea可以自动完成的 |
---|
9.2 创建仓库
新建项目后,将项目目录创建为git仓库
注意: 要在建仓库前,设置忽略文件 “.gitignore”
作用:被忽略的文件会被版本记录忽略,版本中不包含它们。
范围:不需要和其他开发共享的文件,具体见下图。
创建仓库前,先添加忽略文件 |
---|
9.3 提交-commit
创建好仓库后,做第一次提交。
9.4 创建分支
新建开发分支
点击右下角链接
9.5 上传到远程仓库(push)
请首先参照第7章,创建一个远程仓库。
要求是裸库,且建议库名和项目名同名。
9.6 复制到本地仓库(clone)
如果有建好的远程仓库,比如公司内已经在用的仓库,或者github,码云上的一些公开仓库,
可以将远程仓库的项目复制到本地使用。
9.7 更新本地项目
如果远程仓库有更新,则你的本地项目也需要一起更新。
9.8 冲突解决
合并分支时,如果出现冲突,则需要解决冲突。
当远端的文件与本地尚未上传远端的文件不同时,在本地拉取更新时就会造成冲突。
冲突出现,弹窗中可以选择如下 |
---|
两人协商保留什么代码然后修改即可
也可以直接修改冲突文件,然后commit即可
十、多人协同开发
多人开发协同,git操作
10.1 项目管理员( 项目经理 )
1> 由管理员负责创建一个远程库,初始的库中什么也没有,为裸库。库的名称建议和项目同名
2> 管理员会在idea中创建一个初始项目,其中包含.gitignore文件。
并在项目根目录下 建立本地库。并建立 dev分支。
3> 管理员将本地库上传到远程库
4> 将其他开发人员拉入远程库的 开发成员列表中 ,使得其他开发人员可以访问该远程库。
10.2 开发人员
初始化:在idea中clone 远程库,获得项目。会建立本地库
Le développement ultérieur doit être effectué sur la branche dev. Après avoir développé une fonction et réussi le test, validez-la dans la branche de développement locale, puis téléchargez-la dans la branche de développement distante.
Lorsque le contenu du projet doit être mis à jour, extrayez le contenu de l'entrepôt distant via pull.
Remarque:Lors d'une collaboration à plusieurs personnes, à chaque fois avant de pousser vers la bibliothèque distante, effectuez d'abord une extraction, L'une consiste à fusionner le dernier contenu distant avec le contenu local et l'autre à vérifier si le contenu local est en conflit avec le contenu distant.
Le développement ultérieur recevra les tâches fonctionnelles une par une, et l'opération réciproque 2>, 3>, 4> n'est rien de plus que.
Onze problèmes classiques
Lorsque vous utilisez le protocole https pour le push, si vous avez utilisé Code Cloud, mais que le mot de passe a été modifié, une erreur sera signalée à ce moment
Les informations d'identification du compte précédent ne sont pas compatibles avec les nouvelles informations d'identification du compte git, les problèmes suivants se produiront donc:
Utilisez le protocole https pour signaler les erreurs |
---|
Solution: Panneau de configuration "Credential Manager" Supprimez les informations d'identification correspondantes et vous serez invité à ressaisir le mot de passe lorsque vous l'utiliserez à nouveau.
Supprimez le certificat de cloud de code précédent, puis appuyez à nouveau