今天想把自己的课设上传到GitHub,因为长久不用,Git的命令忘得差不多了,所以今天把Git重新学一遍。
Git一个分布式版本控制工具,能够管理不同版本的项目。
我们在开发中的项目,需要不断地迭代,每次迭代都可以称作一个版本,每个版本的内容也是不一样的,这么多版本的项目,你管理起来会非常麻烦,而且版本回退,协作开发更麻烦,于是版本控制工具就出现了。
版本控制就是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
在团队开发中,版本控制就尤为重要
Git官网下载安装包,无脑下一步即可
git config --global user.name 用户名 | 设置用户签名 |
---|---|
git config --global user.email 邮箱 | 设置用户签名 |
git |
利用命令
git config --global user.name
git config --global user.email
设置用户名和邮箱
签名的作用是区分不同操作者的身份,用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁提交的,Git首次安装必须设置一下 用户签名,否则无法提交代码。
注意:这里设置的用户名和邮箱的真实性不用考虑,只是起标识作用
git init
选择一个目录,在此目录右键"git bash",然后输入命令即可
git status
Git和Linux的命令是通用的,可以写
将工作区的文件添加到暂存区
git add 文件名
此时再次利用git status命令查看本地库状态
如果想要清空暂存区的内容,可以使用命令
git rm --cache 文件名
文件添加到暂存区之后,并未形成历史版本,需要提交到本地库后才能形成历史版本
git commit -m "日志信息" 文件名
提交的是暂存区的文件,如果文件没有添加到暂存区是不能够提交的的哦
此时再查看本地库状态
git reflog
还可以通过
git log
命令查看更加详细的日志,不仅可以查看提交的版本,还可以查看提交的签名,还能看到完整版的版本号
模拟企业中的版本修改
修改文件后,再次查看本地库状态
再次使用git add 和 git commit 提交即可
在Git中是按照行来维护文件的
此时再查看本地库状态,会看到有两个版本git reflog
此时查看就会是第二个版本的内容
在文件管理\本地库 中永远只会显示一个文件
底层是用指针控制的
查看本地库中的文件的版本,有两个命令,前面刚才演示过了
git reflog 查看精简版的信息
git log 查看详细的版本信息【时间、提交者、邮箱】
那么如何切换某个文件的多个版本
只需要使用上述两个命令查看具体的版本号,利用下面命令
git reset --hard 版本号
此时查看版本号,看到指针指向第二个版本号
查看文件内容
此外,还可以打开本地库中的.git
文件夹中的HEAD
文件,会看到
表示当前已经处于master分支上,如何查看该分支上的某个具体的版本呢?
需要打开.git
文件夹中的refs
文件夹,继续打开heads
文件夹,打开master
文件夹,会看到里面具体的文件版本号
在Git的安装目录下的\mingw64\share\doc\git-doc
目录下,有Git所有命令的说明手册,一个命令做成了一个网页,可以根据命令来查看文档。
也可以在git bash 中,利用--help
的命令来查看帮助文档,比如说git add
这个命令我不懂,那么就可以在命令框中这样写
git add --help
就可以查看命令的详细文档
在版本控制的过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务单独的分支。
使用分支意味着,程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。(分支的底层也是指针的运用)
分支的好处
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可
命令 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
git branch 分支名
此时查看文件就是此分支修改后的文件,
打开.git
的HEAD文件,指向切换后的分支
同时在.git
文件夹下的refs
文件夹中的heads
文件夹中就会有新的分支的文件,打开后就是当前分支所处的版本号
git merge 分支名
把当前的其他分支合并到当前分支上
何时会产生冲突?
两个分支在同一个文件的同一个位置有两套完全不同的修改,Git无法决定使用哪一个,此时需要手动解决。
此时就需要手动解决,打开发生冲突的文件
将想要保存的内容留下,其余的删除即可
修改完成之后,仍需要来一波git add 和 git commit
git add 文件名
git commit
**注意:**此时的git commit 不能带文件名,
clone 是本地一点没有远程库的东西,需要复制一份到本地库,此时用clone
如果本地库中有远程库的东西了,需要从远程库更新内容,此时就用pull,pull只会拉取变动的内容
在你的仓库中,会有HTTPS 和SSH两种连接方式
创建别名
远程库的链接是不易于记忆与操作的 , 需要为远程库的连接创建别名,以方便后续使用。
git remote add 别名 链接
当创建了别名后,查看别名,会看到两个别名,因为拉取和推送都可以使用,所以就会显示两种相同别名的远程库别名。
查看本地的远程库别名
git remote -v
git push 远程主机名 本地分支名: 远程分支名
如果本地分支名与远程分支名相同,则可以省略为
git push 远程主机名 本地分支名
git push 别名 分支名
别名的位置直接用远程库的链接也是可以的
首次推送,会有这样一个提示框
需要我们选择登录,第一个是利用浏览器登录的账户,第二个是口令登录,一般选择第一个在浏览器打开即可。
点击授权即可
此时在GitHub就可以看到推送成功的文件
注意:如果选择推送的分支在远程库不存在,那么就会在远程库直接创建这个分支。
自从2020年10月之后,GitHub的主分支不再叫master,而是改名为main
git pull 命令用于从远程获取代码并合并本地的版本。
git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。
与git push 的命令相同
git pull 远程主机名 远程分支名:本地分支名
如果远程分支名与本地分支名相同,则可以省略为
git pull 远程主机名 本地分支名
在利用pull 命令拉取远程库时,会自动将远程库中与本地文件中不同的部分做merge,然后自动add、commit
如果你的本地库中没有任何远程库中的东西,这时候你就需要从远程库克隆一份到本地库中了。
git clone url
git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。
克隆会干这三件事
为远程库添加协作成员,如果不设置,其他人是不能够提交代码的
在远程库的setting中
然后输入要邀请的人的GitHub账户名,选择邀请即可
邀请发送之后,需要将邀请函复制下来,利用沟通工具将邀请链接发送给他人,他人点击就代表同意加入此库协作。
当团队外的人需要对项目进行改动时,因为无法进入团队内,此时就是跨团队协作了
此时打开别人库的链接,点击fork
此时就会在自己的账号中有一个这样的远程库,自己改动即可
当自己修改完成之后,需要将项目的内容发送回原始负责人,原始负责人只要拉取本库到自己的库即可。
首先修改完后,在库中点击pull request生成拉取请求,这样原始负责人才可以在这个库中拉取到个人库
这样,当负责人打开本地库后,就会有拉取请求。
前面连接远程库都是使用的HTTPS连接,但是还有一个SSH的连接
如果是初始使用SSH,会提醒没有公钥,无法使用
首先检查本地主机是否有公钥
需要打开C盘user目录下对应的用户,找找有没有.ssh
这个文件夹,如果有,代表你的本地是有公钥的,如果没有这个文件夹,接下来咱们就创建。
在此目录下右键git bash,输入一下命令
ssh-keygen -t rsa -C "your_email@example.com"
ssh-keygen -t rsa -C "1793645613@qq.com"
代码参数含义:
-t 指定密钥类型,默认是 rsa ,可以省略。 -C 设置注释文字,比如邮箱。
接下来直接回车就行
出现此标志,代表本地公钥生成成功
在此目录下就会看到.ssh
文件夹
打开此文件夹,会看到这两个文件
打开.pub
文件,将里面的密文复制一份
然后打开GitHub,打开个人主页中的setting按钮
这样,在Git中连接此账号的库时,就不会有登录的提醒了。
复制了这个SSH连接后,再在Git中使用此链接来pull、push就不会需要登录了。
在日常工作中,很少用git bash , 都会在编译器中集成Git工具,直接在编译器中使用集成的Git非常方便。
在正常开发中,项目中用到的一些无关文件,是不需要交给git管理的,比如说IDEA的配置信息等。
配置一个xxx.ignore
文件,文件名随便,但是后缀必须是.ignore
理论上这个文件放在什么地方都可以,但是一般都放在本地用户的目录下。
# Compiled class file
*.class# Log file
*.log# BlueJ files
*.ctxt# Mobile Tools for Java (J2ME)
.mtj.tmp/# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rarhs_err_pid*.classpath
.project
.settings
target
.idea
*.iml
想要忽略什么文件,直接将文件的后缀写到这里面即可
有了忽略文件之后,还需要将这个文件配置到.gitconfig
文件中
同样是在用户的目录下,会发现一个.gitconfig
的配置文件,在此文件中加入此配置信息,注意路径是.ignore
的路径
[core]excludesfile = C:/Users/刘明凯的专属computer/git.ignore
注意:将windows目录的反斜杠改成斜杠
此时在文件管理中打开项目,就会看到项目的根目录下有一个.git
的文件夹,代表这个项目已经被git识别接管了。
此时,就会看到项目中的部分文件变红,因为还没有添加到git的暂存区,所以爆红.
此时可以在文件上右键,选择git add
也可以在整个项目上右键,git add
同理,右键commit,填写commit信息
在IDEA中如何查看有哪一些版本?
在右下角的Git中
那如何切换版本呢?只需要在刚才的日志上某个版本,右键checkout
首先是创建分支
在项目上右键,就能看到分支管理
或者也可以在IDEA的右下角,点击分支名也是可以的
创建完成分支之后,直接在点击就可以切换分支
切换到主分支后,选中要合并的分支,点击合并即可
在合并分支时,难免会有代码冲突,在IDEA中如何解决代码冲突的问题
当在合并时,发生了冲突,IDEA就会显示这样的页面
这时候日志就会显示分支合并
如果需要手动输入Github账号就手动输入,但是我这是直接调用网页端的GitHub进行授权。
添加成功后,就能看到GitHub账号的信息
或者使用口令登录,需要去GitHub账号生成一个口令
在个人账户的setting中有一个开发人员选项
**注意:**Token生成之后只会显示一次,需要赶紧复制这个token,刷新网页后,在GitHub上就没有了这个Token的任何痕迹,一定要妥善保管这个Token
然后回到IDEA,将复制的Token粘贴到口令登录框即可
因为IDEA已经默认安装了GitHub的插件,所以可以直接在IDEA中操作GItHub
就会在GitHub上看到新建了一个库
将项目推送到GitHub
可以在项目上右键推送
也可以在上方导航栏,选择push
IDEA默认使用的是HTTPS连接,但是此链接会受到网络波动影响,可以使用SSH连接
在推送的页面,选择自定义链接
将复制的远程库的SSH连接复制进去即可
在Push时,需要保证远程库的版本与本地项目一致,所以需要先手动pull一下,然后再push
国内版的GitHub,由于GitHub的服务器在国外,由于网络原因会连接不上,就有人开发了国内版的代码托管中心——Gitte
使用起来基本与GitHub相同。
IDEA默认没有安装Gitee,需要自己手动安装一下Gitee的插件
安装完成之后,就可以在IDEA中看到Gitee的选项
同样,像GitHub一样,添加自己的Gitee账号
其余操作与GitHub相同
注意:目前是2022-12-29 码云创建公开仓库需要申请,所以不建议使用码云
选择GitHub上的仓库的地址,注意要使用HTTPS连接
同时,Gitee还支持强制同步,因为库是从GitHub迁移过来的,如果Github上的库更新了,那么可以点击强制同步
利用GitLab自搭建代码托管平台,在大公司中比较常用。
比如说,你的公司并不打算使用GitHub来托管代码(因为private的库是收费的,但是你的公司不打算开源),这时公司就可以使用GitLab来自己搭建属于本公司的代码托管平台。
GitLab官网https://about.gitlab.com
会看到目前支持的服务器版本
一般都是公司准备好的,服务器端不是我们管的。
使用GitLab时跟GitHub相同就行。
首先在IDEA中安装GitLab的插件
安装完成之后,就可以看到GitLab的选项
向这里面添加服务器地址即可
使用时与GitHub、Gitee用法相同。