Git、Github、Gitlab与Gitee
Git、Github、Gitlab与Gitee之间的关系
- Git 是一种版本控制系统,是一个命令,是一种工具,有点像cmd(命令行工具)。
- Github 是一个基于git实现在线代码托管的仓库,向互联网开放,企业版要收钱。
- Gitlab 类似 github,一般用于在企业内搭建git私服,要自己搭环境。
- Gitee 即码云,是 oschina 免费给企业用的,不用自己搭建环境,可以建立自己的私有仓库。
- Git-ce 是社区版,gitlab-ee是企业版,收费的。
Github 的快速入门
1. 注册 github
https://zhuanlan.zhihu.com/p/369486197
2. github 的主页介绍
-
主页
- Your profile,个人简介
-
个人简介页面
- Edit profile,修改个人简介;
- Overview,个人主页概览;
- Repositories,仓库;
- Star,点星记录;
- Followers,粉丝;
- Following,关注的 GitHub 账号;
- Contribution activity:个人贡献历史记录
-
编辑个人简介:Edit profile
- Name(昵称)
- Bio(自我介绍)
- Company(公司)
- Location(位置)
还可以 Settings->Public profile 修改详细的信息
3. 在 github 中对仓库的操作
3.1 创建
-
点击新建仓库
-
选择一些设置
-
Repository name,仓库名称;
-
Description,可选描述,也就是写不写都可以;
-
Public,默认的仓库类型;
-
Initialize this repository with a README,初始化仓库的信息文件,建议勾选
-
Add .gitignore,添加在 git add 时应该忽略的文件类型
-
gitignore 的使用方法:在 git 目录下创建一个.gitignore文件,然后在这个文件当中列举出我们不希望提交的文件即可。
凡是列在这个文件当中的名称,当我们在使用 git add 的时候都会替我们忽略掉。我们也没有必要从头开始编写这个gitignore文件,因为git当中已经替我们写好了很多模板,我们可以直接拿过来参考:https://github.com/github/gitignore
-
gitignore 文件的语法:
-
表示注释
-
忽略整个文件夹
如果我们想要忽略某个路径下文件夹内的所有内容,那么可以写出文件夹的路径再加上斜杠作为结尾即可。
举例,假如希望过滤掉 src/build 文件夹下的所有内容,可以这么写:
src/build/
那么这个路径下的所有内容都会被忽略,这个路径是相对路径。
-
! 表示取反
可以用!命令来取反,表示我们指定的可以不遵守忽略条件的文件名。比如想要保留src/build路径下叫做 main.go 的文件,那么可以加上一行:
!main.go
-
glob模式匹配
* 可以代表一切的字符串,可以是0个也可以是任意多个字符
[abc]表示匹配方括号当中的任何一个字符
?表示匹配任何一个字符
[0-9]表示匹配0-9当中任意一个数字
两个*号表示任何中间目录,比如src/**/build。可以匹配到src/test/build,也可以匹配到src/current/build。
比如你想要过滤掉所有的txt格式的文件,你可以这么写:
*.txt
比如你想要过滤掉build路径下的所有json文件,你可以这么写:
build/*.json
-
-
3.2 删除
-
进入自己的仓库页面
-
点击 Settings
-
到页面最下方
-
点击 Delete
4. 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。不过说心里话,如果不FQ的话,Gist并不好用。
Git 的快速入门
Windows
1. Git下载
2. Git 初体验及其常用命令介绍
2.1 进入 Git Bash 的命令窗口
-
在 F 盘下创建一个目录:Code,在其中新建一个名为 hit.txt 的文件
注意:在进行任何的 git 操作之前,都必须切换到 Git 的仓库目录,即先进入我们定义的 Git 仓库的最顶层文件目录下,由此进入 Git Bash,这样之后的操作才可以顺利展开
-
在 Code 目录中右键点击 Git Bash Here
2.2 常用命令
2.2.1 git status
在命令行窗口的光标处,输入git status命令,查看仓库的状态:
如上图所示,结果显示 Code 不是一个 Git 仓库,这是很正常的反应,因为我们还没有在计算机中声明 Code 为 Git 仓库,之前说 Code 是 Git 仓库只是我们口头上的说的,计算机当然不会认可
2.2.2 git init
在命令行窗口的光标处,输入git init命令,初始化 Git 仓库:
如上图所示,结果显示已经初始化Code为一个空的 Git 仓库啦!重新输入git status命令检查一下仓库的状态:
如上图所示,git报错 fatal: unsafe repository,具体原因:https://www.aspirantzhang.com/network/git-fatal-unsafe-repository.html
输入 git config --global --add safe.directory F:/Code 之后继续输入 git status,可以看到在我们初始化仓库之后,Code目录已经成为一个 Git 仓库了,并且默认进入 Git 仓库的master分支,即主分支。
在这里,我们需要注意的是Untracked fies提示,它表示demo仓库中有文件没有被追踪,并提示了具体没有被追踪的文件为hit.txt,还提示了我们可以使用git add命令操作这个文件
2.2.3 git add
在命令行窗口的光标处,输入git add hit.txt命令,将hit.txt文件添加到 Git 仓库:
如上图所示,如果没有报错,就说明命令已经执行啦!接下来,输入git status命令查看仓库状态:
如上图所示,已经显示Initial commit初始化提交了,同时已经没有Untracked files提示了,这说明文件hit.txt已经被添加到 Git 仓库了,而在我们没有进行git add操作之前,文件hit.txt并不被 Git 仓库认可,因此才会出现提示初始化仓库为空的现象。
注意:git add命令并没有把文件提交到 Git 仓库,而是把文件添加到了「临时缓冲区」,这个命令有效防止了我们错误提交的可能性
2.2.4 git commit
在命令行窗口的光标处,输入 git commit -m "text commit" 命令,将hit.txt文件提交到 Git 仓库:
如上图所示,我们成功将文件hit.txt提交到了 Git 仓库,其中commit表示提交,-m表示提交信息,提交信息写在双引号""内。接下来,再输入git status命令查看仓库状态:
如上图所示,结果显示nothing to commit, working tree clean,这表示已经没有内容可以提交了,即全部内容已经提交完毕
2.2.5 git log
在命令行窗口的光标处,输入 git log 命令,打印 Git 仓库提交日志:
如上图所示,显示了我们的提交记录,提交记录的内容包括Author提交作者、Date提交日期和提交信息。
2.2.6 git branch
在命令行窗口的光标处,输入git branch命令,查看 Git 仓库的分支情况:
如上图所示,显示了仓库Code中的分支情况,现在仅有一个master分支,其中master分支前的*号表示“当前所在的分支”,例如* master就意味着我们所在的位置为Code仓库的主分支。输入命令git branch a,再输入命令git branch,结果如下图所示:
如上图所示,我们创建了一个名为a的分支,并且当前的位置仍然为主分支。
2.2.7 git checkout
在命令行窗口的光标处,输入git checkout a命令,切换到a分支:
如上图所示,我们已经切换到a分支啦!也可以通过命令git branch查看分支情况:
也可以在创建分支的同时,直接切换到新分支,命令为git checkout -b,例如输入git checkout -b b命令:在a分支下创建b分支(b为a的分支),并直接切换到b分支
2.2.8 git merge
切换到master分支,然后输入git merge a命令,将a分支合并到master分支:
如上图所示,我们已经将a分支合并到主分支啦!注意:在合并分支的时候,要考虑到两个分支是否有冲突,如果有冲突,则不能直接合并,需要先解决冲突;反之,则可以直接合并
2.2.9 git branch -d & git branch -D
输入 git branch -d a 可删除 a 分支
如上图所示,a 分支已被删除,注意:有时通过 git branch -d 命令无法删除 a 分支,这时可以通过 git branch -D 进行强制删除
2.2.10 git tag
输入 git tag v1.0 命令为当前分支添加标签:
如上图所示,已成功为当前分支添加标签,通过 git tag 可以查看该标签。通过 git checkout v1.0 即可切换到该标签下的代码状态
3. 利用 SSH 完成 Git 与 GitHub 的绑定
3.1 生成 SSH key
-
在 Git Bash 中输入ssh命令,查看本机是否安装 SSH:
-
输入ssh-keygen -t rsa命令,表示指定 RSA 算法生成密钥,敲三次回车键,期间不需要输入密码,之后会生成两个文件,分别为id_rsa和id_rsa.pub,即密钥id_rsa和公钥id_rsa.pub. 对于这两个文件,其都为隐藏文件,默认生成在以下目录:
Linux 系统:~/.ssh
Mac 系统:~/.ssh
Windows 系统:C:\Users\username\.ssh
3.2 添加 SSH key
-
进入 GitHub 主页,先点击右上角所示的倒三角▽图标,然后再点击Settins,进行设置页面
点击我们的头像亦可直接进入设置页面:
-
点击SSH and GPG Keys进入此子界面,然后点击New SSH key按钮:
如上图所示,我们只需要将公钥id_rsa.pub的内容粘贴到Key处的位置(Titles的内容不填写也没事),然后点击Add SSH key 即可
3.3 验证绑定是否成功
-
在 Git Bash 中输入ssh -T git@github.com进行测试:
如上图所示,此结果即为Git 与 GitHub 绑定成功的标志
4. 通过 Git 将代码提交到 GitHub
4.1 本地没有 Git 仓库
可以直接将远程仓库clone到本地。通过clone命令创建的本地仓库,其本身就是一个 Git 仓库了,不用我们再进行init初始化操作啦,而且自动关联远程仓库。我们只需要在这个仓库进行修改或者添加等操作,然后commit即可
-
进入 GitHub 个人主页
-
进入 demo 项目后,点击 Clone or download,复制上图所示的地址链接
-
进入我们准备存储 Git 仓库的目录,进入 Git Bash,输入
git clone https://github.com/SomaFon/demo.git
-
将要添加到该仓库中的文件复制到文件中
-
从此目录进入 Git Bash,然后输入git status命令查看仓库状态:
如上图所示,demo 已经是一个 Git 仓库了,而且在输入 git status 命令后显示有一个文件未被追踪,也就是我们刚刚复制过来的文件没有提交
-
在真正提交代码之前,需要先进行git add操作:
-
输入 git commit -m "text commit" 将 hit.txt 提交到仓库
-
输入git log命令查看仓库日志:
-
输入git status命令查看仓库状态:
-
输入 git push origin main 将本地仓库的内容push到远程仓库
在第一次向远程仓库提交代码的时候,需要输入账号及密码进行验证,验证成功后,显示如上结果:
-
刷新 github 中的仓库
4.2 本地有 Git 仓库
此时已经进行了多次commit操作
-
建立一个本地仓库:
-
进入该仓库,进入 init 初始化操作:
-
输入 git remote add origin https://github.com/SomaFon/Blog.git 关联远程仓库,其中origin为远程仓库的名字:
-
输入git pull origin master命令,同步远程仓库和本地仓库:
-
查看本地仓库,已同步
-
在本地仓库新建一个名为test.txt的测试文件:
-
输入git add和git commit命令,将文件test.txt添加并提交到仓库:
-
输入git push origin master命令,将本地仓库修改的内容提交到远程仓库:
参考:
https://zhuanlan.zhihu.com/p/369486197