Git与Github
Git
git是一个版本管理控制系统(VCS),它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点。将更新记录恢复回来。
基本工作流程
3.git仓库:用于存放提交记录
2.暂存区:临时存放被修改文件
1.工作目录:被git管理的项目目录
先通过工作目录提交到暂存区,再将暂存区的文件提交到git仓库
命令
#基本操作
#查看git版本
git --version
#git 的配置
git config --global user.name #配置提交人姓名
git config --global user.email #配置提交人的邮箱地址
git config --list #配置查看git配置信息
#git的提交步骤
先创建一个项目文件夹,切换到项目文件夹下,打开git
git init #初始化git仓库
git status #查看文件状态
git add 文件列表 #添加被git管理的文件到暂存区
git commit -m 提交记录 #向仓库中提交代码
git log #查看提交记录
#git的撤销
git checkout 文件 #用暂存区中的文件覆盖工作目录中的文件
git rm --cached 文件 #将文件从暂存区中删除,删除不希望被git管理的文件
git rest --hard commitID #将git仓库中指定的更新记录恢复出来,并且覆盖暂存区和工作目录
#分支
当前工作目录中代码的一份副本
使用分支,可以让我们从开发主线上分离出来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gaLxaogn-1577863665201)(/home/lxl/Pictures/Selection_105.png)]
主分支 (master) :主分支,第一次向git仓库中提交更新记录时产生的一个分支
开发分支(develop):作为开发的分支,基于master分支创建
功能分支(feature):作为开发具体功能的分支,基于开发分支的创建
git branch #查看当前的分支
git branch 分支名称 #创建分支,基于当前所在分支创建副本
git checkout 分支名称 #切换分支
git merge 来源分支 #合并分支,当前分支与来源分支合并
git branch -d 分支名称 #删除分支(-D为强制删除,当该分支没有被合并过时,想要删除应该使用-D)
暂时保存更改
场景:当前分支的功能还未开发完成,但是需要切换到其他分支去操作。分支临时切换。
git stash #存储临时改动
git stash pop #恢复改动
Github
多人同时协作开发
github为我们提供远程仓库的功能
多人协作开发流程
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Md3MopWo-1577863665203)(/home/lxl/Pictures/Selection_106.png)]
- A在自己的计算机中创建本地仓库
- A在github中创建远程仓库
- A将本地仓库推送到远程仓库
- B克隆远程仓库到本地进行开发
- B将本地仓库中开发的内容推送到远程仓库
- A将远程仓库中的最新内容拉去到本地
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TyyLAN8L-1577863665205)(/home/lxl/Pictures/Selection_107.png)]
git与远程仓库的使用
git push 远程仓库地址 分支名称
git push 远程仓库地址别名 分支名称
git push -u 远程仓库地址别名 分支名称(-u 是记住推送地址及分支,下次推送只需要输入 git push 即可)
git remote add 远程仓库地址别名 远程仓库地址
实际操作
git push https://github.com/lxllxl233/git-test.git master #从远程仓库中拉取分支
git pull https://github.com/lxllxl233/git-test.git master --allow-unrelated-histories #从远程拉取,允许不一致
如我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传。这时会发现 github 的仓库和本地的没有一个共同的 commit 所以 git 不让提交,认为是写错了 origin ,如果开发者确定是这个 origin 就可以使用 --allow-unrelated-histories 告诉 git 自己确定
遇到无法提交的问题,一般先pull 也就是使用 git pull origin master 这里的 origin 就是仓库,而 master 就是需要上传的分支,因为两个仓库不同,发现 git 输出 refusing to merge unrelated histories 无法 pull 内容
因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在 git pull 之后,这句代码是在git 2.9.2版本发生的,最新的版本需要添加 --allow-unrelated-histories 告诉 git 允许不相关历史合并
总结:如果提交失败的话可能是没有提交到本地仓库: git commit -m 提交说明
git remote add origin(自定义的,可以写其他的名字) 远程仓库地址 #为远程仓库添加别名
git push -u 提交地址 分支名称
=上面是仓库所有者的操作===
克隆仓库
git clone 仓库地址 #克隆远程仓库到本地
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gvIJZ3v7-1577863665206)(/home/lxl/Pictures/Selection_108.png)]
执行完上述操作就会出现一个邀请链接[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-exG3BMXD-1577863665207)(/home/lxl/Pictures/Selection_109.png)]
复制这个邀请链接给其他程序员其他程序员登陆后接受邀请即可
邀请其他程序员共同开发项目的流程如上图
冲突的解决
在多人同时开发一个项目时,如果俩个人修改了同一个文件的同一个地方,就会出现冲突。
远程版本高于本地版本,先把远程版本拉取到本地,然后再修改冲突的文件,最后再提交到远程仓库。
=====================
若本人不是项目的开发团队的成员
先 fork 项目添加到自己的github账号中,然后克隆远程仓库(自己的),修改项目后提交到远程仓库。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3bfXCymK-1577863665209)(/home/lxl/Pictures/Selection_110.png)]
提交后点击 pull request 链接提交给原仓库的所有者仓库所有者审核后即可
========================
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VWwUTk55-1577863665210)(/home/lxl/Pictures/Selection_111.png)]仓库所有者点击绿色和 Merge pull request 按钮即可
ssh免登录
开发者生成公钥(锁)和私钥(钥匙),公钥是放在github账户中,私钥放在本地。
ssh-keygen #生成公钥和私钥
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4WOYYWJ-1577863665211)(/home/lxl/Pictures/Selection_112.png)]会在当前用户的家目录的 .ssh 文件夹下生成公钥和私钥
其中 id_rsa 是私钥,rd_rsa_pub 是公钥
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4vIYrpyR-1577863665212)(/home/lxl/Pictures/Selection_113.png)]
在 github 这里添加公钥
ssh 免密提交测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cYUXS8hY-1577863665212)(/home/lxl/Pictures/Selection_114.png)]
git忽略清单
告诉 git 哪些文件不需要给 git 管理
创建一个文件 .geiignore ,在该文件里写上不想被 git 管理的文件和文件夹名称。
来源:CSDN
作者:雪辉(◕ˇ∀ˇ◕)
链接:https://blog.csdn.net/qq_43104960/article/details/103793233