这是关于使用git和github的笔记。

git和github的使用

实际使用补充:

一、本地库和远程库关联(个人使用)

1、本地初始化&创建本地库

模型:

image-20200211102811508(本地库先有代码,再与远程库关联,上传本地库的代码给远程库,这个是个人使用的常用操作)

首先,创建工作区的文件夹,里面写代码相关;

Bash here-》git init(创建.git文件,也就是本地库)

2、github代码托管,远程库

首先,创建远程库。登录自己的github,并且创建仓库(写名称,描述,readme先不选择)。

​ 此时,官网自己也会告诉你,本地库关联远程库的方法。也附带了远程仓库的地址(HTTPS方式(这里用这个方式),SSH方式(后面知识点有将))。

image-20200211110844495

3、关联本地库和远程库。

由于之前我们已经在本地创建了本地库

在本地文件夹中,

Bash here ->git remote add origin https://github.com/xinkuiwu/algorithmTraining.git (进行远程地址关联,远程主机名(别名)为origin)

可以通过 git remote -v 查看远程地址。

image-20200211112730808

(fetch用于取回,push用于推送,都是git命令)

注意,此时,本地仓库除了.git隐藏文件夹,需要有新的文件在本地库,因为刚创建的.git本地库是空的,需要添加一些文件(工作区),git add .(暂存区),git commit -m ‘操作说明’(本地库)。否则直接git push 是会报错的。

所以,我们可以本地创建一个文件,如readme.md。

git add .

git commit -m

此时本地库有了更新。

然后将本地库的更新推送至远程库

git push -u origin master

此时,完成了本地库和远程库的关联。之后如果本地有更新情况,在使用git push推送至远程库即可。

image-20200211115147173

说明:

git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull(下拉远程更新到本地)命令相仿。

git push <远程主机名> <本地分支名>:<远程分支名>

(这里的:前后是必须没有空格的。)

git push origin master

上面命令表示(省略了远程分支名,表示将本地分支推送与之存在”追踪关系”的远程分支),将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

git push origin (将当前分支推送到origin主机的对应分支。)如果当前分支只有一个追踪分支,那么主机名都可以省略。即git push

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。即

git push -u origin master

(这个也是官网用的,将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。)

二、团队协作工作

像团队开发,通常是老大已经在本地库做好一部分,push上传至远程库;团队的成员先clone下,进行相关开发修改,然后也push到远程库,然后老大再从远程库pull下拉,在进行整体修改等。循环这个步骤。

image-20200211120516901

但是不是什么人都能加入团队,不然就乱糟糟了,团队老大要邀请才行。

邀请某人加入协作团队成员。(需要人授权并把连接地址送给要被授权的某人,某人加入才行)

即老大的远程库(github)中,settings-> collaborators->输入团队小弟github账户名称-> add collaborator

image-20200211121053465

然后等待团队小弟的确认(发送邀请链接,然后团队小弟打开确认)

git pull 从远程库下拉到本地库的工作区

git pull <远程主机名> <远程分支名>:<本地分支名>

git pull 和 git fetch区别

image-20200211125958854

git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并(git merge)到工作本机分支中。

而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

三、跨团队协作

有时候需要多个团队一些协作,主团队A先复制项目Github连接,然后以非团队人员的身份B去fork(页面有个fork选项)。

例如我在别人的项目仓库下fork,此时,我自己远程仓库会添加主团队的项目仓库,上面也声明来仓库来源。

image-20200211143028864

接着,就和之前一样,clone在本地修改开发,然后推送到自己的远程库,然后自己提出pull request(new pull request->creat pull request)。

然后主团队,审核代码,然后没问题再合并代码。然后就接着就是将远程库修改拉下本地,继续开发。

基本操作

image-20200211104035579

image-20200211104345663

其他:

1、head指针,用于控制版本的前进后退,后面有说。通过head指向的分支控制,进行版本控制。

image-20200211110120718

image-20200211110140856

2、分支管理,在版本控制过程中,使用多条线同时推进多个任务,提升开发效率。一般,主支(master)是发布的,直接线上使用的,其他一些开发功能是一些分支,开发调试成功没问题了,才会并入主干分支,在这个过程中,如果某些分支开发失败,不会对其他分支有影响(包括master),删除该分支,重新开发即可。(创建分支git branch XX,切换分支git checkout XX,合并分支,即先切会原分支,在把旧分支合并进去,用git checkout XXgit checkout XXX ,此时可能出现冲突)

​ 解决冲突:image-20200211105618735

3、git工作流

image-20200211144931095

image-20200211144941700

image-20200211145040629

image-20200211145108495

4、如果是局域网的管理,可以使用gitlab。(搭建gitlab服务器)

全面知识点-学习总纲:

img

1、 版本控制

团队协作:希望版本控制工具能管理文件本身和里面的内容,允许很多人修改同一文件。(协同修改、数据备份、版本管理、权限控制、历史记录、分支管理)

2、 Git是分布式控制版本工具

img

img

img

3、

img

img

(上面写错了,初始化应该是git init)

img

img img

img img img

img

img img img img

img img img img

img

4、 分支管理

img

img

img

img

5、 Git基本原理

img

imgimgimgimg

imgimgimgimg

img

6、 Github

img

创建远程库

img

远程库地址

img

在本地创建远程库地址别名(不用每次复制远程库地址)

img

查看远程地址

img

(fetch用于取回,push用于推送)

推送分支

img

此时,远程库就有对应推送的文件了

img

img

imgimg

(上面写错了,克隆应该是git clone [远程地址])

邀请某人加入协作团队成员。(需要人授权并把连接地址送给要被授权的某人,某人加入才行)

img

imgimgimg

Pull直接就合并了,用方法1比较保险,能确认一下合并内容

img

img

(小刘:GitHub;老王、老王媳妇是开发人员)

跨团队协作

复制Github连接,以非团队人员的身份去fork

img

img

img

img

img

img

img

(提出pull request)

img

(原团队看这个pull request)查看

imgimg

img

img

img

imgimg

imgimg

(以上所有all操作已经满足日常需要了)

7、 Git 图形化界面操作

一般的IDE都有GIT插件,也可以从IDE下载GIt插件做一些Git处理,例如eclipse,Sublime text3等。

一般流程:

建立本地库

推送到远程库

冲突- 解决冲突 –合并

8、 Git工作流

imgimgimgimgimgimgimg

img

9、 Gitlab服务器搭建过程

img

img

(linux环境下装)centOS(Linux环境)

imgimgimg

imgimg

(和GitHub差不多,主要用于局域网,有一定的自由度)

10、 总结

img

img