持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
前言:最近团队协作开发,我切切实实感受到了Git的重要性(论把代码传来传去的痛苦)团队小伙伴还是挺多不会使用Git的,我也不太会哈哈,很容易出现代码冲突的问题,不知道怎么解决,现在从头开始学Git,记录一下Git的使用。 大家想要看更详细的教程可以去猴子网再看看
(一)Git是干什么的?
通俗点说,就是多人合作一个项目,现在后端3个人协作开发,就一个工程,你总不可能拿U盘,合并各自不同的代码吧...Git版本管理系统就是为了解决这些问题而产生的。
(二)Git基础理论学习
# 管理历史记录的数据库
数据库 (Repository) 是记录文件或目录状态的地方,存储着内容修改的历史记录。在数据库的管理下,把文件和目录修改的历史记录放在对应的目录下。 首先,Git的数据库分为远程数据库和本地数据库的两种。
- 远程数据库: 配有专用的服务器,为了多人共享而建立的数据库。
(你在github,gitlab,gitee建的那些仓库就是远程数据库) - 本地数据库: 为了方便用户个人使用,在自己的机器上配置的数据库。
创建本地数据库的方法有两种:一种是创建全新的数据库,另一种是复制远程数据库。
# 工作树和索引
在Git管理下,大家实际操作的目录被称为工作树。
在数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域。
Git在执行提交的时候,不是直接将工作树的状态保存到数据库,而是将设置在中间索引区域的状态保存到数据库。因此,要提交文件,首先需要把文件加入到索引区域中。
所以,凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交。
(三)Git实操(基于命令行的方式)
在命令行里面配置你的用户名和电子邮箱地址,这些信息将作为提交者信息显示在更新历史中(也可以在用户本地目录的.gitconfig档案里配置)
$ git config --global user.name "<用户名>"
$ git config --global user.email "<电子邮件>"
在你指定的地方创建一个目录,使用init把该目录移动到本地Git数据库
在你的目录里面随便创建一个文件
里面输入hello
使用status命令确认工作树和索引的状态。
从status响应我们可以看到‘sample.txt’目前不是历史记录对象。请首先把‘sample.txt’加入到索引,就可以追踪它的变更了。
将文件加入到索引,要使用add命令。在指定加入索引的文件。用空格分割可以指定多个文件。
$ git add <file>..
把所有文件加入索引
$ git add .
加入索引后,提交文件
$ git commit -m "提交说明"
使用log命令,我们可以在数据库的提交记录看到新的提交。
$ git log
以上为本地仓库的使用,接下来给大家介绍如何在远程仓库上共享本地数据库的修改记录
使用remote指令添加远程数据库。在处输入远程数据库名称,在处指定远程数据库的URL。
$ git remote add <name> <url>
使用push命令向数据库推送更改内容。repository处输入目标地址,refspec处指定推送的分支。
$ git push <repository> <refspec>...
提交本地分支到远程的分支(如果远程分支名不存在就会自动创建):
$ git push <远程主机名> <本地分支名>:<远程分支名>
克隆远程数据库 使用clone指令可以复制数据库,在repository指定远程数据库的URL, 在directory指定新目录的名称。
$ git clone <repository> <directory>
在推送的时候可能出现合并冲突的问题(两个不同的库要合并会出现冲突),使用以下命令
$ git pull origin [远程分支名] --allow-unrelated-histories
在执行pull之后,进行下一次push之前,如果其他人进行了推送内容到远程数据库的话,那么你的push将被拒绝,这种情况下,在读取别人push的变更并进行合并操作之前,你的push都将被拒绝。这是因为,如果不进行合并就试图覆盖已有的变更记录的话,其他人push的变更就会丢失。而合并的时候,Git会自动合并已有的变更点
然而,假设同一处代码在不同的本地仓库中被做了修改,其中一处已经被提交到了远程上面,当另一处要提交的时候会出现合并冲突的问题。Git会在发生冲突的地方修改文件的内容,所以我们需要手动修正冲突。