Git--github
Git–github
Git - 关于版本控制 (git-scm.com)(官方)
开源
开源并不意味着完全没有限制,为了限制使用者的使用范围和保护作者的权利,每个开源项目都应该遵守开源许可协议(Open Source License )。
常见开源协议
①BSD(Berkeley Software Distribution)
② Apache Licence2.0
③ GPL(GNU General Public License)
- 具有传染性的一种开源协议,不允许修改后和衍生的代码做为闭源的商业软件发布和销售
- 使用GPL 的最著名的软件项目是:Linux
④ LGPL(GNULesser General Public License)
⑤ MIT(Massachusetts Institute ofTechnology, MIT)
- 是目前限制最少的协议,唯一的条件:在修改后的代码或者发行包中,必须包含原作者的许可信息
- 使用MIT 的软件项目有:jquery、Node.js
开源项目托管平台
专门用于免费存放开源项目源代码的网站,叫做开源项目托管平台。目前世界上比较出名的开源项目托管平台主要有以下3个:
- Github(全球最牛的开源项目托管平台,没有之一)
- Gitlab(对代码私有性支持较好,因此企业用户较多)
- Gitee(又叫做码云,是国产的开源项目托管平台。访问速度快、纯中文界面、使用友好)
注意:以上3个开源项目托管平台,只能托管以Git管理的项目源代码,因此,它们的名字都以Git开头
Github
Github是全球最大的开源项目托管平台。因为只支持Git作为唯一的版本控制工具,故名GitHub。
在Github中,你可以:
①关注自己喜欢的开源项目,为其点赞打 call
②为自己喜欢的开源项目做贡献(PullRequest)
③和开源项目的作者讨论 Bug和提需求(Issues)
④把喜欢的项目复制一份作为自己的项目进行修改(Fork)
⑤创建属于自己的开源项目
⑥etc…
新建空白远程仓库
Github上的远程仓库,有两种访问方式,分别是HTTPS 和 SSH。它们的区别是:
①HTTPS:零配置;但是每次访问仓库时,需要重复输入Github的账号和密码才能访问成功
②SSH:需要进行额外的配置;但是配置成功后,每次访问仓库时,不需重复输入Github的账号和密码
注意:在实际开发中,推荐使用SSH的方式访问远程仓库。
==注意,现在github上面的默认主分支为main,下面的图片是未更改前的==
基于HTTPS将远程仓库上传到github
完成HTTPS管理之后,后续
如果本地进行了修改,先将本地仓库维护好,运行git push就能同步
SSH key
SSHkey 的作用:实现本地仓库和Github之间免登录的加密数据传输。
SSHkey 的好处:免登录身份认证、数据加密传输。
SSHkey 由两部分组成,分别是:
①id_rsa(私钥文件,存放于客户端的电脑中即可)
②id_rsa.pub(公钥文件,需要配置到Github中)
生成SSH key
①打开 Git Bash
②粘贴如下的命令,并将 your_email@example.com替换为注册Github账号时填写的邮箱:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
③连续敲击 3 次回车,即可在C:\Users\用户名文件夹.ssh 目录中生成id_rsa 和 id_rsa.pub两个文件
配置SSH key
①使用记事本打开 id_rsa.pub 文件,复制里面的文本内容
②在浏览器中登录 Github,点击头像->Settings-> SSHand GPG Keys ->NewSSH key
③将 id_rsa.pub 文件中的内容,粘贴到Key对应的文本框中
④在 Title 文本框中任意填写一个名称,来标识这个Key从何而来
检测是否配置成功
基于 SSH 将本地仓库上传到 Github
上面两种方式都用了git remote add <shortname> <url>来添加远程仓库,这是基于本地git初始化有git仓库的情况下。
这里可以看到拉去了远程仓库但是还没有获取其所以分支的引用,所以要拉取一下
1 | |
这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
(有远程仓库分支的引用还不够,和本地分支无关(本地文件夹中的文件取决与本地分支的情况))
将远程仓库克隆到本地
远程仓库是指托管在因特网或其他网络中的你的项目的版本库,git clone 这个命令有一些特殊,没有git init也能使用,执行完后就初始化了本地仓库并成功添加了远程仓库
1 | |
远程仓库的地址通过github获取
如果你使用
clone命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意git fetch命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。如果你的当前分支设置了跟踪远程分支(阅读下一节和 Git 分支 了解更多信息), 那么可以用
git pull命令来自动抓取后合并该远程分支到当前分支。 这或许是个更加简单舒服的工作流程。默认情况下,git clone命令会自动设置本地 master 分支跟踪克隆的远程仓库的master分支(或其它名字的默认分支)。 运行git pull通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
查看远程仓库
如果想要查看某一个远程仓库的更多信息,可以使用 git remote show <remote> 命令。 如果想以一个特定的缩写名运行这个命令,例如 origin,会得到像下面类似的信息:
1 | |
它同样会列出远程仓库的 URL 与跟踪分支的信息。 这些信息非常有用,它告诉你正处于 master 分支,并且如果运行 git pull, 就会抓取所有的远程引用,然后将远程 master 分支合并到本地 master 分支。 它也会列出拉取到的所有远程引用。
Git 分支(本地主分支还是master)
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。
如果两个平行宇宙互不干扰,那对现在的你也没啥影响。
不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN!
作用
在进行多人协作开发的时候,为了防止互相干扰,提高协同开发的体验,建议每个开发者都基于分支进行项目功能的开发
master主分支
在初始化本地Git仓库的时候,Git默认已经帮我们创建了一个名字叫做master 的分支。通常我们把这个master分支叫做主分支。在实际工作中,==master 主分支==的作用是:用来保存和记录整个项目已完成的功能代码。
因此,不允许程序员直接在 master分支上修改代码,因为这样做的风险太高,容易导致整个项目崩溃。
功能分支
由于程序员不能直接在master分支上进行功能的开发,所以就有了功能分支的概念。
功能分支指的是专门用来开发新功能的分支,它是临时从master主分支上分叉出来的,当新功能开发且测试完毕后,最终需要合并到master主分支上。
查看分支
git branch
git branch -vv
如果想要查看设置的所有跟踪分支,可以使用
git branch的-vv选项。 这会将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。
1
2
3
4
5>$ git branch -vv
iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
master 1ae2a45 [origin/master] deploying index fix
>* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it
testing 5ea463a trying something new
创建新分支
git branch 分支名称
是基于当前所处的分支创建的,新分支中的代码和当前分支完全一样。
切换分支
git checkout login
切换到login分支
分支的快速创建和切换
git checkout -b 分支名称
创建新分支并且切换到这个分支上
合并分支
功能分支的代码开发测试完毕之后,可以使用如下的命令,将完成后的代码合并到master主分支上:
删除功能分支
当把功能分支的代码合并到master主分支上以后,就可以使用如下的命令,删除对应的功能分支
遇到冲突时的分支合并
如果在两个不同的分支中,对同一个文件进行了不同的修改,Git就没法干净的合并它们。
此时,我们需要打开这些包含冲突的文件然后手动解决冲突。
Git分支(远程分支)
将本地分支推送到远程仓库
查看远程仓库中所有的分支列表
git remote show 远程仓库名称 默认为origin
跟踪分支
跟踪分支指的是:从远程仓库中,把远程分支下载到本地仓库中。需要运行的命令如下:
git checkout pay 下载过来后本地的分支也叫pay
拉取远程分支最新的代码
远程分支的中的代码发生改变时,将本地仓库的进行更新
(本地分支需要与远程分支产生关联后才能使用)
