前言:之前学的有点错误,这里根据狂神b站的视频,进行知识点整理?
一、git是什么?
git是一个版本管理工具,可以很好的控制你的代码修改版本,保持本地仓库和远端仓库的代码一致性。和svn最大的不同是,svn所有的版本数据都存在服务器上,用户只保留有上一次同步的版本,用户看不到历史版本。
二、git的下载和使用
1、 Windows 平台上安装
安装包下载地址:https://gitforwindows.org/
官网慢,可以用国内的镜像:https://npm.taobao.org/mirrors/git-for-windows/。
下载之后无脑安装,安装之后,可以直接在当前文件或桌面右键打开Git Bash
2、基础配置
在使用git之前,需要对git做一些基础的配置包括用户账号和邮箱
当然我们没有配置任何数据的时候,global的用户配置是没有数据的,使用以下命令进行用户数据的配置:
执行成功后,再次查看global的配置,是否已经配置成功,系统配置和用户配置都可以在文件中找到并且打开查看编辑
个人配置的信息在C:\Users\Administrator.gitcongig 中可以查看
系统默认配置的信息在你安装git的盘,例如:D:\Git\etc\gitconfig 中查看
3、git的四个工作区域
Working Directory:工作区,平时存放项目代码的地方
Stage/index :暂存区,实际上只是一个文件,临时存放你的改动,保存即将提交到文件列表信息
Repository/history:仓库区(本地仓库),存放数据的位置,有你提交所有版本的数据,其中HEAD指向最新放入仓库的版本
Remote Directory:远程仓库,托管代码的服务器,可以认为是项目组中一台电脑用于远程数据交换,存储本地提交的所有数据和版本
注意:我们只需要管理2个区域,那就是工作区和远程仓库,暂存区实际上是一个概念,其他2个区域几乎不用管理,只需要命令行操作即可。如果是git版本控制的项目,在项目文件下有个.git的隐藏文件夹
4、git的工作流程
1、创建一个git工作目录(本地创建或者远端拉取)
2、在工作目录中添加、修改文件 newfile
3、将需要进行版本管理的文件放入暂存区域 git add .
4、将暂存区域的文件提交到git仓库 git commit
5、推送到远程仓库 git push
5、git项目搭建(本地仓库不和远端对接)
5.1在适合的位置新增一个文件/工作目录 就叫它gitwork吧
5.2进入文件内部,右键git bash ,执行git init 初始化这个文件为git文件
5.3查看状态 git status
5.3.1无修改的时候没有新文件提示
5.3.2 当对文件进行了操作(比如新加了一个文件)再次查看status,提示有一个文件没有被跟踪
5.3.3 使用git add . 把新加的文件提交到暂存区,此时新的修改文件变为绿色,意思是可以提交到本地仓库了 注意有个点.代表提交所有
5.3.4将暂存区的提交到本地仓库
5.3.4这个时候再次看一下status,发现以及没有可以提交的数据了
6、拉取远端的仓库,例如在gitee拉取已有的项目
6.1 在gitee平台上创建一个仓库
6.2 在本地选择要放置项目的位置,我这里选择的是桌面,复制仓库地址进行本地clone
拉取后,就可以按照正常的流程进行add commit push等
7、如何忽略不想同步的文件到本地仓库或者远端
7.1 在项目目录下git bash 输入touch .gitignore 即可创建一个.gitignore的文件(注意要用命令行创建,新建一个txt是不生效的)
7.2 打开ignore文件,在文件中填写想要葫芦的文件和文件夹(一般忽略项目ide默认配置文件和日志等)这里以项目根目录下的tmp文件夹和text.txt文件举例子(具体匹配规则可以百度)
当我保存后,新增一个tmp文件夹和text.txt的文件,再执行git status的时候,就不会提示有新的文件等待提交跟踪,只会有一个刚刚修改过的.gitignore,已经忽略了配置的两个文件
这个时候再次add 或者commit都不会把忽略的选中了
8、如何更安全的下载项目
8.1我们在gitee中选择克隆项目的时候,发现又很多选项,其中最熟悉的是https和ssh克隆,这俩有什么区别呢?
HTTPS:不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码;
SSH:clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSHKey。
SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。
8.2获得ssh公钥
随便在什么地方打开git bash
执行 ssh-keygen -t rsa #生成一个ras的加密算法,确保传输安全
[-q] 安静模式
[-b bits] 位数
[-t dsa | ecdsa | ed25519 | rsa | rsa1] 加密算法
如果有提示选择一直空格回车,执行后,在c盘的用户文件夹下有一个.ssh文件夹打开后可以看到两个文件,其中id_rsa 后缀是pub的文件,是公钥,另一个是私钥,复制公钥,添加到gitee设置中ssh配置即可
8.3 使用sshclone下载方式
在gitee项目clone下载出复制ssh的链接,使用以下命令:
每当我们第一次连接服务器时候,就会出现Are you sure you want to continue connecting (yes/no)提示,输入yes即可
9、如何将本地的项目推送到远端呢?或者说与远端仓库连接起来呢?以下介绍最方便的一种
9.1 在本地新建一个项目local_test
9.2在远端新建一个仓库remote_test
9.3将远端的仓库拉取到桌面or其他文件夹下
9.4将远端拉取的数据全部复制到本地新建的项目local_test下
9.5在local_test目录可以可以正常操作提交和push,push后远端的remote_test仓库同步更新
原理:远端拉取到桌面的文件夹,已经指向了远端仓库,直接复制到某项目下,就可以认为当前项目都指向了远端仓库
这个时候我们发现,就有可以提交的数据了,就是local项目的数据
10、使用pycharme集成的git进行推送代码文件
使用pycharme打开上一步的local_test文件夹,发现在IDE里面与往常不一样,有几个git的快捷键,同时我们右键文件的时候可以看到有git的选项,新增文件的时候会提示是否要加入到git,也就是add .到暂存
我们新增一个文件file2.py,根据提示add到暂存区,然后右键文件选择git-commit-填写推送message(可以用右上角的commit 是一样的效果)
返回项目,选择文件git-push
回到远端的仓库,查看是否被推送到了远程仓库remote_test
可以打开git-history 在底部看到提交历史
当push的时候提示如下,是因为远程repository和本地的repository冲突导致的,在多人协同机制下,远程库的代码可能已经被其他程序员更新,而你的本地库还停留在未更新前前的状态,这种情况下的push会被远程库拒绝。
merge是合并,如果远程有的你没有,则拉下来把你的推上去,如果你的和远程的改的是一个文件,则需要选择保留哪一个(一般来说push之前先pull新的代码下来,防止出现merge的情况)
11、关于分支的一些操作
11.1什么时候需要分支
当多个版本协同开发的时候,比如11月要上一个版本,那么通常不会在主分支master上进行操作,因为master是一个相对稳定的分支,类似一个稳定的产品库,是经过测试后进行合并,多个分支相当于克隆了master的多套代码进行平行开发,分支互相不影响,当分支经过测试后可以和master进行合并(merge)。
分支分为远端分支和本地分支,当我们拉取远端的一个项目时,会同时把远端的所有分支都拉下来,我们可以直接在远端的分支上进行开发。当然也可以自己在本地创建分支然后推送到远端。
11.2pycharme推送分支数据
本地新增lo_new 分支。
pycharme进行数据提交,刷新就已经默认选中了lo_new分支。
当push的时候会提交当前分支到远端(pycharme会自动提交远端未有分支)。
11.3 bash命令行推送远端未有分支数据
如果远端新增了一个分支,则只需要pull,则可以拉下远端新的分支
12、合并分支数据
当某一个分支新增修改数据后,我们是希望在测试后能够合并到稳定的master主分支,则这时候只需要切换到master,执行以下命令