学习Git和Github,从这里开始!

一、简介

Git 是一个免费开源分布式版本控制系统,由于其占用空间小、性能快,优于其他SCM工具(SVN、CVS等),主要用于代码版本管理。

GitHub 是基于 Git 的免费版本控制仓库(开源项目集中地),任何人都可以上传或下载平台上的开源项目,全球有6500万的开发者在使用。


二、Git
1、Git 整体结构

Git

2、版本对象

Git 通过 commit 对象来保存每一次提交的版本内容,其中 tree对象指向所有代码文件的快照。多版本之间通过 parent 对象进行链接。

commit-and-tree

3、文件状态

Git 管理的文件,有4个状态:

  • Untracked:没有加到 Git仓库 进行版本管理;
  • Unmodified:提交Git仓库后没有被修改;
  • Modified:提交Git仓库后被修改;
  • Staged:本地暂存区,等待被提交到Git仓库。

git文件的几个状态

4、安装
  • MacOS 使用软件包管理器Homebrew 安装git。更多...
# 1、终端下,执行下面命令,安装 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 2、安装git
brew install git

# 3、安装完成,首先设置全局名称和邮箱(修改下面邮箱和用户名)
git config --global user.name ×××
git config --global user.email ×××@×××

  • Linux/Unix :Debian/Ubuntu、Fedora 上用命令安装git。更多...
# Debian/Ubuntu
apt-get install git

# up to Fedora 21
yum install git
	
# Fedora 22 and later
dnf install git

# 安装完成,首先设置全局名称和邮箱(修改下面邮箱和用户名)
git config --global user.name ×××
git config --global user.email ×××@×××

  • Windows :用 exe 安装包安装 git。下载

5、配置说明

路径文件

描述

/etc/gitconfig

包含系统上每一个用户及他们仓库的通用配置。 执行 git config 时带上 --system 选项,才能读写该文件,需要管理员或超级用户权限。

~/.gitconfig ~/.config/git/config

只针对当前系统用户。 用 --global 选项来读写此文件,修改配置影响当前系统用户的所有仓库。

.git/config

当前仓库的 Git 配置文件。 用 --local 选项来读写此文件(在仓库目录中,无需此选项)。

  • 查看配置的命令
# 查看所有git配置,可能会有重复,因为来自不同配置文件(/etc/gitconfig 和 ~/.gitconfig),后面显示的配置信息会覆盖前面
$ git config --list

# 查看所有git配置,以及对应的配置文件
$ git config --list --show-origin

# 查看单个配置信息
git config user.name

# 查询所有可用配置信息
git help config

6、.gitignore

有些文件不需要 git 进行版本管理,譬如编译生成的 cache 文件等,可以使用 .gitignore 对其进行忽略。

glob模式

简化版的正则匹配

*

匹配零个或多个任意字符;

?

只匹配一个任意字符;

abc

匹配任何一个列在方括号中的字符 ;

0-9

表示匹配所有 0 到 9 的数字;

**

表示匹配任意中间目录,比如 a/**/z 可以匹配 a/za/b/za/b/c/z 等。

序号

描述

1、

空行或者 # 开头的行 都会被忽略;

2、

匹配模式可以以(/)开头防止递归;

3、

匹配模式可以以(/)结尾指定目录;

4、

要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反;

# 忽略所有的 .a 文件
*.a

# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a

# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO

# 忽略任何目录下名为 build 的文件夹
build/

# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

7、origin 与 master

远程仓库名字 origin 与分支名字 master 一样,在 Git 中并没有任何特别的含义

  • master : 是运行 git init 时,默认的起始分支名字;
  • origin : 是运行 git clone 时,默认的远程仓库名字, 如果运行 git clone -o booyah,那么远程分支名字将会是 booyah/master

8、HEAD

HEAD是一个符号引用,指向当前分支。

$ cat .git/HEAD
ref: refs/heads/master
  • HEAD~{n} :表示以 HEAD 为起点,向后回溯n个版本;
  • HEAD^n :表示上个版本的第几个提交的版本(当前版本可能由多个版本合并得到);

如下版本提交记录(提交顺序从上到下、从左到右),A的上个版本是 B 和 C。更多...

G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         A
A =      = A^0
B = A^   = A^1     = A~1
C =      = A^2
D = A^^  = A^1^1   = A~2
E = B^2  = A^^2
F = B^3  = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2  = B^^2    = A^^^2  = A~2^2
I = F^   = B^3^    = A^^3^
J = F^2  = B^3^2   = A^^3^2

9、常用操作

怎么使用 Git 的命令进行文件版本管理?详情,看这里!


三、GitHub
1、下载代码方式

GitHub 有三种方式下载代码:

  • HTTPS:使用登录 github 的用户名和密码,即可clone 项目。
  • SSH:通过上传 SSH key 到 GitHub 后台,这样无需密码即可 clone 项目。
  • GitHub CLI:平台提供管理仓库的终端工具,还可以使用 Github 提供的一些额外功能。

2、免密下载代码

配置ssh key,可以免密下载Github代码,既方便又安全,需要使用到 ssh-keygen 工具。

# 1、打开 Terminal(终端),查看已有密钥(.pub后缀的文件名)
$ ls -al ~/.ssh

# 2、如果没有就创建一个
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

# 3、复制下面输出到剪切板(下面两个适用mac系统)
$ cat ~/.ssh/id_rsa.pub
$ pbcopy < ~/.ssh/id_rsa.pub
$ cat ~/.ssh/id_rsa.pub | pbcopy

# 4、登录github官网,按照这个路径新建 SSH key
Settings --> SSH and GPG keys --> New SSH key
1、填写名字(随意填写,保证下次看到能明白是哪里的key);
2、粘贴剪切板内容到key的输入框中;
3、保存。

# 5、Terminal(终端)检查是否可以成功连接
$ ssh -T git@github.com

# 6、Github随便找个项目,测试下载,看看是否成功
$ git clone git@github.com:shipwright-io/build.git

3、桌面工具

如果觉得在终端输入命令太麻烦,可以使用 Github 提供的桌面应用工具 GitHub Desktop


4、Pull Requset

为开源项目贡献代码的流程:

# 1、登录Github,找到项目,单击 Fork 按钮来获得项目副本
# 2、下载项目副本到本地
git clonet git@github.com:***/test.git

# 3、新建分支
cd test
git checkout -b branch1

# 4、修改代码
# 5、提交代码到本地仓库
git commit -a -m '修改代码'
# 6、推送本地仓库到远程仓库(项目副本)
git push origin branch1
# 7、登录 Github,提示项目有新分支,并创建 pull request 发送给源项目
# 8、源项目作者可以看到这个 pull request,由他决定是关闭还是合并

5、Pull Requset(冲突)

如果源项目比副本多很多提交版本,在副本上提交的分支会无法提交 pull request,这样来解决:

# 1、下载源项目最新代码
git remote add upstream git@github.com:***/orgin.git
git fetch upstream
# 2、合并最新代码到自己分支
git merge upstream/master

# 3、有可能会产生冲突,修复冲突并使得功能完好

# 4、推送分支代码到远程仓库(项目副本)
git push origin branch1

# 5、登录Github,并发送 pull request 给源项目

6、Fork项目

fork项目是不会随着源项目自动更新的,需要手动更新

# 1、切换到fork项目的分支master
git checkout master
# 2、拉取源项目代码并合并到当前分支
git pull https://github.com/progit/progit2.git
# 3、推送更新后的代码到fork项目
$ git push origin master (3)
# 上面每次更新都需要输入源项目地址,太麻烦,如下方式简化
# 1、添加源项目地址到本地
git remote add progit https://github.com/progit/progit2.git
# 2、把master分支的拉取代码的地址设置为源项目地址
git branch --set-upstream-to=progit/master master
# 3、将默认推送仓库设置为 origin
git config --local remote.pushDefault origin

# 4、之后更新代码方式
git checkout master
git pull
git push

四、VS Code

推荐使用 VS Code 来编辑代码,支持所有编程语言,只需要安装插件即可,git也是内置的,只需要鼠标点击即可完成git操作,无需输入复杂的git命令。


五、参考文档

相关文章

kindeditor4.x代码高亮功能默认使用的是prettify插件,prett...
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小