您现在的位置是:首页 >其他 >github学习笔记网站首页其他
github学习笔记
目录
$ git branch --set-upstream-to=origin/master master fatal: branch 'master' does not exist 为什么会出现这种报错
github简介
GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。
唯一版本库是什么意思
唯一版本库通常指的是仅有一个主版本库(Main Repository),所有开发人员都从该主版本库中进行代码的拉取、修改和推送,从而保证代码的唯一性和一致性。
hub的含义什么?
"Hub"是英文单词,表示“中心”、“枢纽”的意思。在计算机领域中,它经常被用来描述一个中央集中的平台或系统,它可以作为多个其他系统的连接点和交互点,用于协调和管理它们之间的数据和通信。在软件开发中,例如GitHub、Docker Hub等,它们都可以被看作是代码或应用程序的中央存储库或交换平台,可以让开发者和用户轻松地共享和协作。
github功能介绍
在团队协作中,使用唯一版本库可以避免代码冲突、版本管理混乱等问题。同时,唯一版本库也可以提高代码的可追溯性和质量,方便项目的管理和维护。常见的唯一版本库工具包括Git、SVN等。
目前,其托管版本数量非常之多,而且其中不乏知名开源项目,例如 Ruby on Rails、jQuery、python 等。
Github 拥有超过千万的开发者用户。随着越来越多的应用程序转移到了云上,Github 已经成为了管理软件开发以及发现已有代码的首选方法。
如前所述,作为一个分布式的版本控制系统,在 Git 中并不存在主库这样的概念,每一份复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。
GitHub 项目本身自然而然的也在 GitHub 上进行托管,只不过在一个私有的,公共视图不可见的库中。开源项目可以免费托管,但私有库则并非如此。在 GitHub,用户可以通过Explore轻而易举地找到海量的开源代码。因此,称之为程序员的 圣地 也不过吧?
登录、注册
这很简单,看得懂一点英文和懂一些登录流程就可以了。
GitHub 术语解释
为了大家进一步了解和使用 GitHub,我们一起来看看 GitHub 的常用术语,也可以说是基本概念:
Repository:简称Repo,可以理解为“仓库”,我们的项目就存放在仓库之中。也就是说,如果我们想要建立项目,就得先建立仓库;有多个项目,就建立多个仓库。
Issues:可以理解为“问题”,举一个简单的例子,如果我们开源一个项目,如果别人看了我们的项目,并且发现了bug,或者感觉那个地方有待改进,他就可以给我们提出Issue,等我们把Issues解决之后,就可以把这些Issues关闭;反之,我们也可以给他人提出Issue。
Star:可以理解为“点赞”,当我们感觉某一个项目做的比较好之后,就可以为这个项目点赞,而且我们点赞过的项目,都会保存到我们的Star之中,方便我们随时查看。在 GitHub 之中,如果一个项目的点星数能够超百,那么说明这个项目已经很不错了。
Fork:可以理解为“拉分支”,如果我们对某一个项目比较感兴趣,并且想在此基础之上开发新的功能,这时我们就可以Fork这个项目,这表示复制一个完成相同的项目到我们的 GitHub 账号之中,而且独立于原项目。之后,我们就可以在自己复制的项目中进行开发了。
Pull Request:可以理解为“提交请求”,此功能是建立在Fork之上的,如果我们Fork了一个项目,对其进行了修改,而且感觉修改的还不错,我们就可以对原项目的拥有者提出一个Pull请求,等其对我们的请求审核,并且通过审核之后,就可以把我们修改过的内容合并到原项目之中,这时我们就成了该项目的贡献者。
Merge:可以理解为“合并”,如果别人Fork了我们的项目,对其进行了修改,并且提出了Pull请求,这时我们就可以对这个Pull请求进行审核。如果这个Pull请求的内容满足我们的要求,并且跟我们原有的项目没有冲突的话,就可以将其合并到我们的项目之中。当然,是否进行合并,由我们决定。
Watch:可以理解为“观察”,如果我们Watch了一个项目,之后,如果这个项目有了任何更新,我们都会在第一时候收到该项目的更新通知。
Gist:如果我们没有项目可以开源或者只是单纯的想分享一些代码片段的话,我们就可以选择Gist。不过说心里话,如果不翻墙的话,Gist并不好用。
Git 初体验及其常用命令介绍
git init
其作用就是初始一个 Git 仓库。
此外,在这里还要强调一点,那就是:在我们进行任何的git操作之前,我们都得先切换到 Git 的仓库目录。
换言之,我们得到先进入到(我们定义的)Git 仓库的最顶层文件目录下,然后从此目录中进入 Git Bash,这样之后的操作才能顺利进行。
第 1 个命令:git status
第 2 个命令:git init
在我们初始化仓库之后,demo目录已经成为一个 Git 仓库了,并且默认进入 Git 仓库的master分支,即主分支。在这里,我们需要注意的是Untracked fies提示,它表示demo仓库中有文件没有被追踪,并提示了具体没有被追踪的文件为hit.txt,还提示了我们可以使用git add命令操作这个文件,简直不要太好。
第 3 个命令:git add
在命令行窗口的光标处,输入git add hit.txt命令,将hit.txt文件添加到 Git 仓库
第 4 个命令:git commit
在命令行窗口的光标处,输入git commit -m "text commit"命令,将hit.txt文件提交到 Git 仓库
我们成功将文件hit.txt提交到了 Git 仓库,其中commit表示提交,-m表示提交信息,提交信息写在双引号""内。接下来,再输入git status命令查看仓库状态:
第 5 个命令:git log
在命令行窗口的光标处,输入git log"命令,打印 Git 仓库提交日志
如上图所示,显示了我们的提交记录,提交记录的内容包括Author提交作者、Date提交日期和提交信息。
通过以上的操作,我们会发现一个现象,那就是:在每个git操作之后,我们基本都会输入git status命令,查看仓库状态。
这也从侧面说明了git status命令使用的频率之高,也建议大家在操作 Git 仓库的时候多使用git status命令,这能帮助我们实时了解仓库的状态,显然非常有用。
第 6 个命令:git branch
在命令行窗口的光标处,输入git branch命令,查看 Git 仓库的分支情况:
显示了仓库demo中的分支情况,现在仅有一个master分支,其中master分支前的*号表示“当前所在的分支”,例如* master就意味着我们所在的位置为demo仓库的主分支。输入命令git branch a,再输入命令git branch,结果如下图所示:
如上图所示,我们创建了一个名为a的分支,并且当前的位置仍然为主分支。
(分支是很容易被创建的)
第 7 个命令:git checkout
就像我这里可好,项目里只有一个分支叫main,但是自己一直因为是master
在命令行窗口的光标处,输入git checkout a命令,切换到a分支:
如上图所示,我们已经切换到a分支啦!也可以通过命令git branch查看分支情况:
在这里,我们还有一个更简单的方法来查看当前的分支,即通过观察上图中用红色框圈起来的部分。此外,我们也可以在创建分支的同时,直接切换到新分支,命令为git checkout -b,例如输入git checkout -b b命令:
如上图所示,我们在a分支下创建b分支(b为a的分支),并直接切换到b分支。
第 8 个命令:git merge
切换到master分支,然后输入git merge a命令,将a分支合并到master分支:
(合并过程就是先切换一下当前分支,之后使用Git merge a(就是自己想要合并的分支,自己选))
我们已经将a分支合并到主分支啦!此外,在这里需要注意一点,那就是:在合并分支的时候,要考虑到两个分支是否有冲突,如果有冲突,则不能直接合并,需要先解决冲突;反之,则可以直接合并。
git中的两个分支是否有冲突是什么意思,这是因为什么导致的
在 Git 中,如果两个分支都修改了同一个文件的同一部分,并且尝试将它们合并在一起,就会发生冲突。这种情况下,Git 无法自动决定应该保留哪个更改,因此需要手动解决冲突。
解决冲突通常需要打开包含冲突的文件,并手动编辑它们,以删除冲突并选择要保留的更改。然后,可以将文件标记为已解决冲突,并将更改提交到 Git 中,以表示解决了冲突。
冲突通常发生在多个人在同一个代码库中工作,并对相同的文件或代码进行更改时。如果没有正确的协调和通信,就会导致冲突。因此,在使用 Git 进行协作开发时,需要密切关注其他人的更改,并努力避免同时更改相同的代码。
第 9 个命令:git branch -d & git branch -D
在命令行窗口的光标处,输入git branch -d a命令,删除a分支:
我们已经将分支a删除啦!不过有的时候,通过git branch -d命令可以出现删除不了现象,例如分支a的代码没有合并到主分支等,这时如果我们一定要删除该分支,那么我们可以通过命令git branch -D进行强制删除。
第 10 个命令:git tag
在命令行窗口的光标处,输入git tag v1.0命令,为当前分支添加标签:
如上图所示,我们为当前所在的a分支添加了一个v1.0标签。通过命令git tag即可查看标签记录:
如上图所示,显示了我们添加标签的记录。通过命令git checkout v1.0即可切换到该标签下的代码状态:
利用 SSH 完成 Git 与 GitHub 的绑定
现在,我们已经对 GitHub 有了一定的了解,包括创建仓库、拉分支,或者通过Clone or download克隆或者下载代码;我们也下载并安装了 Git,也了解了其常用的命令。
But,无论是 GitHub,还是 Git,我们都是单独或者说是独立操作的,并没有将两者绑定啊!也就是说,我们现在只能通过 GitHub 下载代码,并不能通过 Git 向 GitHub 提交代码。
体验通过 Git 向 GitHub 提交代码的能力。不过在这之前,我们需要先了解 SSh(安全外壳协议),因为在 GitHub 上,一般都是通过 SSH 来授权的,而且大多数 Git 服务器也会选择使用 SSH 公钥来进行授权,所以想要向 GitHub 提交代码,首先就得在 GitHub 上添加 SSH key配置。
第 1 步:生成 SSH key
我们要想生成SSH key,首先就得先安装 SSH,对于 Linux 和 Mac 系统,其默认是安装 SSH 的,而对于 Windows 系统,其默认是不安装 SSH 的,不过由于我们安装了 Git Bash,其也应该自带了 SSH. 可以通过在 Git Bash 中输入ssh命令,查看本机是否安装 SSH:
如上图所示,此结果表示我们已经安装 SSH 啦!接下来,输入ssh-keygen -t rsa命令,表示我们指定 RSA 算法生成密钥,然后敲三次回车键,期间不需要输入密码,之后就就会生成两个文件,分别为id_rsa和id_rsa.pub,即密钥id_rsa和公钥id_rsa.pub. 对于这两个文件,其都为隐藏文件,默认生成在以下目录:
Linux 系统:~/.ssh
Mac 系统:~/.ssh
Windows 系统:C:Documents and Settingsusername\.ssh
Windows 10 ThinkPad:C:Users hink.ssh
密钥和公钥生成之后,我们要做的事情就是把公钥id_rsa.pub的内容添加到 GitHub,这样我们本地的密钥id_rsa和 GitHub 上的公钥id_rsa.pub才可以进行匹配,授权成功后,就可以向 GitHub 提交代码啦!
第 2 步:添加 SSH key
如上图所示,进入我们的 GitHub 主页,先点击右上角所示的倒三角▽图标,然后再点击Settins,进行设置页面;点击我们的头像亦可直接进入设置页面:
如上图所示,进入我们的 GitHub 主页,先点击右上角所示的倒三角▽图标,然后再点击Settins,进行设置页面;点击我们的头像亦可直接进入设置页面:
如上图所示,进入Settings页面后,再点击SSH and GPG Keys进入此子界面,然后点击New SSH key按钮:
如上图所示,我们只需要将公钥id_rsa.pub的内容粘贴到Key处的位置(Titles的内容不填写也没事),然后点击Add SSH key 即可。
如上图所示,我们只需要将公钥id_rsa.pub的内容粘贴到Key处的位置(Titles的内容不填写也没事),然后点击Add SSH key 即可。
第 3 步:验证绑定是否成功
在我们添加完SSH key之后,也没有明确的通知告诉我们绑定成功啊!不过我们可以通过在 Git Bash 中输入ssh -T git@github.com进行测试:
如上图所示,此结果即为Git 与 GitHub 绑定成功的标志。
通过 Git 将代码提交到 GitHub
到这一步我们已经完成了本地 Git 与远程 GitHub 的绑定,这意味着我们已经可以通过 Git 向 GitHub 提交代码啦!
但是在进行演示之前,我们需要先了解两个命令,也是我们在将来需要经常用到的两个命令,分别为 push 和 pull 。
push:该单词直译过来就是“推”的意思,如果我们本地的代码有了更新,为了保持本地与远程的代码同步,我们就需要把本地的代码推到远程的仓库,代码示例:
push:该单词直译过来就是“推”的意思,如果我们本地的代码有了更新,为了保持本地与远程的代码同步,我们就需要把本地的代码推到远程的仓库,代码示例:
git push origin master
其实就是把你的本地仓库中的内容提交到中央仓库
pull:该单词直译过来就是“拉”的意思,如果我们远程仓库的代码有了更新,同样为了保持本地与远程的代码同步,我们就需要把远程的代码拉到本地,代码示例:
git pull origin master
此外,在之前我们讲到过pull request,在这里,估计大家就能更好的理解了,它表示:如果我们fork了别人的项目(或者说代码),并对其进行了修改,想要把我们的代码合并到原始项目(或者说原始代码)中,我们就需要提交一个pull request,让原作者把我们的代码拉到 ta 的项目中,至少对于 ta 来说,我们都是属于远程端的。
一般情况下,我们在push操作之前都会先进行pull操作,这样不容易造成冲突。
提交代码
对于向远处仓库(GitHub)提交代码,我们可以细分为两种情况:
第一种:本地没有 Git 仓库,这时我们就可以直接将远程仓库clone到本地。通过clone命令创建的本地仓库,其本身就是一个 Git 仓库了,不用我们再进行init初始化操作啦,而且自动关联远程仓库。我们只需要在这个仓库进行修改或者添加等操作,然后commit即可。
首先,进入 GitHub 个人主页:
进入mybatis-tutorial项目后,点击Clone or download,复制上图所示的地址链接。然后,进入我们准备存储 Git 仓库的目录,例如下面我们新建的GitRepo目录, 从此目录进入 Git Bash:
接下来,输入
git clone https://github.com/guobinhit/mybatis-tutorial.git
命令,其中clone后面所接的链接为我们刚刚复制的远程仓库的地址:
我们已经把远程的mybatis-tutorial仓库clone到本地啦!下面,我们看看clone到本地的仓库内容与远程仓库的内容,是否完全一致:
如上图所示,显示我们已经把远程仓库mybatis-tutorial的内容都clone到本地啦!接下来,为了方便演示,我们直接把之前重构的「史上最简单的 MyBatis 教程」里面的mybatis-demo项目的代码复制过来:
我们已经把mybatis-demo项目里面的主要内容src目录和web目录复制过来啦!接下来,从此目录进入 Git Bash,然后输入git status命令查看仓库状态:
如上图所示,mybatis-tutorial已经是一个 Git 仓库了,而且在输入git status命令后显示有两个文件未被追踪,也就是我们刚刚复制过来的两个文件没有提交。通过「Git 初体验及其常用命令介绍」,我们已经知道了在真正提交代码之前,需要先进行git add操作:
我们已经将src目录add并commit到mybatis-tutorial仓库啦!接下来,我们将web目录提交到仓库,然后输入git log命令查看仓库日志:
再输入git status命令查看仓库状态:
如上图所示,我们已经将mybatis-tutorial仓库里面新添加的两个目录都提交啦!下面,我们将本地仓库的内容push到远程仓库,输入git push origin master命令:
如上图所示,在第一次向远程仓库提交代码的时候,需要输入账号及密码进行验证,验证成功后,显示如下结果:
git push origin master解读这条命令
这条命令是 Git 版本控制系统中的命令,用于将本地的 Git 仓库的 master 分支提交到名为 "origin" 的远程 Git 仓库。
git push
:将本地的提交推送到远程仓库。origin
:远程 Git 仓库的别名,通常是一个 URL 地址。master
:本地仓库中的主分支名称,也是要推送到远程仓库的分支名称。
然后,刷新 GitHub 中mybatis-tutorial仓库:
如上图所示,我们已经将项目(仓库)中新添加的内容提交到了远程仓库。接下来,返回 GitHub 个人主页:
观察上图,我们会发现一个现象,那就是:mybatis-tutorial仓库的概要中新增了一个Java语言的标记。对于这个仓库语言的标记,其来源有两个,一是在我们创建仓库时就指定语言;二是在我们提交或者新建代码后由 GitHub 自动识别该语言。
以上介绍了向 GitHub 提交代码时的第一种情况,即:
第一种:本地没有 Git 仓库,这时我们可以直接将远程仓库clone到本地。通过clone命令创建的本地仓库,其本身就是一个 Git 仓库了,不用我们再进行init初始化操作啦,而且自动关联远程仓库。我们只需要在这个仓库进行修改或者添加等操作,然后commit即可。
接下来,我们继续介绍向 GitHub 提交代码时可能遇到的第二种情况,即:
第二种:本地有 Git 仓库,并且我们已经进行了多次commit操作。
仍然以博主的开源项目为例,不过这次换成springmvc-tutorial项目进行演示。首先,建立一个本地仓库,命名为springmvc-tutorial:
如上图所示,进入该仓库,进入init初始化操作:
然后,输入
git remote add origin https://github.com/guobinhit/springmvc-tutorial.git
命令,关联远程仓库(在此,默认大家都知道如何获取远程仓库的地址),其中origin为远程仓库的名字:
git remote -v 解释这条命令
git remote -v
是一个 Git 命令,用于显示当前 Git 仓库配置的远程仓库信息。
具体来说,这个命令会列出 Git 仓库中所有的远程仓库,以及它们的 URL 地址,其中 -v
选项表示显示详细信息。例如,输出可能会像这样:
origin https://github.com/user/repo.git (fetch)
origin https://github.com/user/repo.git (push)
上面的输出中,origin
是远程仓库的名称,https://github.com/user/repo.git
是远程仓库的 URL 地址。其中 (fetch)
和 (push)
表示这个远程仓库可以被用于拉取数据或者推送数据到远程仓库。
如果想要查看更详细的远程仓库信息,可以尝试使用 git remote show <remote-name>
命令,其中 <remote-name>
是远程仓库的名称。
输入git pull origin main命令,同步远程仓库和本地仓库:
再回到本地springmvc-tutorial仓库,看看我们是否已经把远程仓库的内容同步到了本地:
如上图所示,显然我们已经把远程springmvc-tutorial仓库里面仅有的README.md文件同步到了本地仓库。接下来,在本地仓库新建一个名为test.txt的测试文件:
输入git add和git commit命令,将文件test.txt添加并提交到springmvc-tutorial仓库:
$ git branch --set-upstream-to=origin/master master fatal: branch 'master' does not exist 为什么会出现这种报错
这种报错通常是因为当前本地仓库中不存在 master
分支导致的。这个命令的作用是将本地仓库的 master
分支与远程仓库的 origin/master
分支建立关联,但是如果本地仓库中没有 master
分支,就会出现上述错误。需要先通过 git branch
命令查看本地仓库中有哪些分支,确认是否存在 master
分支,如果不存在,需要通过 git checkout -b master
命令创建一个新的 master
分支再进行关联。
解决github链接不稳定,访问慢的问题
方法一:(感觉最稳的,还是建立ssh的连接,这个应该是最稳的)
方法请看上面
方法二:(但是感觉有一个bug,就是下载虽说是快了,但是提交呢?这个没有试过,不敢保证)
gitclone.com
这是我用过最爽最实用功能最全面的一个方式了。gitclone.com是一个提供下载缓存的代码下载网站,使用方法十分简单,只需要在仓库地址前面加上 gitclone.com,就可以使速度提升几倍。
例如要克隆github上仓库地址https://github.com/killer-p/ctool.git 只需将地址改为https://gitclone.com/github.com/killer-p/ctool.git,在命令行中执行git clone https://gitclone.com/github.com/killer-p/ctool.git,速度直接起飞!芜湖!
gitclone的工作机理是:当开发者第一次经gitclone.com代理clone项目时,gitclone.com异步镜像项目,以后有开发者clone该项目时,就会利用上gitclone.com的本地镜像,而不是从github.com上clone。gitclone.com会在每天夜间与github.com同步。为了解决不断增长的镜像对硬盘资源的需求,gitclone.com采用区块链集群方式扩展,每次的镜像操作都会广播到集群中所有服务器,各服务器可选择生成镜像并登记以便以响应后续的clone请求。同时,gitclone.com还对stackoverflow.com和go get等的加速访问进行了说明,做到“为开发者服务”。
参考博客:
https://blog.51cto.com/u_15284525/4746991