Git教程笔记

Git教程笔记

Git教程-菜鸟教程

1. Git 安装配置

1.1 Linux | Windows | Mac 平台上安装(略)

Git 各平台安装包下载地址为:http://git-scm.com/downloads

1.2 Git 配置

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量,这些环境变量,决定了 Git 在各个环节的具体工作方式和行为;

这些环境变量存放在以下三个不同的地方:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置;若使用 git config 时用 --system 选项,读写的就是这个文件;
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户;若使用 git config 时用 --global 选项,读写的就是这个文件;
  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效;每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量;

1.2.1 用户信息

# 配置个人的用户名称和电子邮件地址
$ git config --global user.name "runoob"
$ git config --global user.email [email protected]

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息;
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里;

在项目中遇到了这样的问题,只要切换了不同项目(用户名称和电子邮件不同),就需要配置 SSH 秘钥才能成功上传代码,解决该问题方式就是对特定的项目中使用其他名字或者电邮,不加 --global 选项

1.2.2 文本编辑器

# Git默认使用的文本编辑器是 `Vi` 或者 `Vim`,如配置 Emacs 文本编辑器
$ git config --global core.editor emacs

1.2.3 差异分析工具

# 在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff
$ git config --global merge.tool vimdiff

Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息;当然你也可以指定使用自己开发的工具,具体怎么做可以参阅第七章;

1.2.4 查看配置信息

# 要检查已有的配置信息,使用 git config --list 命令;若看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig)
$ git config --list
# 也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可
$ git config user.name

2. Git 工作流程

Git 的一般工作流程如下:

  1. 克隆 Git 资源作为工作目录;
  2. 在克隆的资源上添加或修改文件;
  3. 如果其他人修改了,你可以更新资源;
  4. 在提交前查看修改;
  5. 提交修改;
  6. 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交;
_工作区暂存区版本库的_1557546408_28585.png

3. Git 工作区、暂存区和版本库

3.1 三者的基本概念

  • 工作区:就是你在电脑里能看到的目录;
  • 暂存区:英文叫 stage或index ;一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);
  • 版本库:工作区有一个隐藏目录 .git ,这个不算工作区,而是Git的版本库;

3.2 三者之间的关系

[图片上传失败...(image-6ea622-1576231012220)]

图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区stage, index),标记为 "master" 的是 master 分支所代表的目录树;图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标";所以图示的命令中出现 HEAD 的地方可以用 master 来替换;图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

4. Git 创建仓库

4.1 git init

# 使用当前目录作为Git仓库,我们只需使它初始化,命令执行完后会在当前目录生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变
git init
# 指定目录作为Git仓库
git init newrepo
# 以下命令将目录下以 .c 结尾及 README 文件提交到仓库中
$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'

4.2 git clone

# 从现有 Git 仓库中拷贝项目,repo:Git 仓库;directory:本地目录。
git clone 
# 如果需要克隆到指定的目录,可以使用以下命令格式
git clone  

5. Git 基本操作

Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比;

5.1 获取与创建项目命令

# 用 git init 在目录中创建新的 Git 仓库
$ git init
# 用 git clone 拷贝一个 Git 仓库到本地
$ git clone [url] [dirName]

5.2 基本快照

5.1.1 git add

# git add 命令可将该文件添加到缓存, *或. 表示添加所有新增文件,也可以是具体的文件
$ git add *

5.1.2 git status

# git status 命令用于查看项目的当前状态,查看在上次提交之后是否有修改,-s 表示以简短的结果输出
$ git status -s

5.1.3 git diff

# 查看执行 git status 的结果的详细信息,显示已写入缓存与已修改但尚未写入缓存的改动的区别
$ git diff # 尚未缓存的改动
$ git diff --cached # 查看已缓存的改动
$ git diff HEAD # 查看已缓存的与未缓存的所有改动
$ git diff --stat # 显示摘要而非整个 diff

5.1.4 git commit

# 注意 Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址,注意 --global 参数的使用
$ git config --global user.name 'runoob'
$ git config --global user.email [email protected]
# 使用 git add 命令将想要快照的内容写入缓存区
$ git add .
# 执行 git commit 将缓存区内容添加到仓库中,使用 -m 选项以在命令行中提供提交注释
$ git commit -m '提交的注释信息'
# 若觉得 git add 提交缓存的流程繁琐,Git 也允许你用 -a 选项跳过这一步
git commit -am '提交的注释信息(此前不需要 git add )'

5.1.5 git reset HEAD

# 取消已缓存的文件内容;执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存
$ git reset HEAD [fileName]

5.1.6 git rm

若只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示;要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交:

# 删除工作区目录文件,从已跟踪文件清单中移除
$ git rm 
# 若删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
$ git rm -f 
# 若把文件从暂存区域移除,但仍然希望保留在当前工作目录中;换句话说,仅是从跟踪清单中删除,使用 --cached 选项
$ git rm --cached 
# 递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件
$ git rm –r *

5.1.7 git mv

# git mv 命令用于移动或重命名一个文件、目录、软连接
$ git mv [filename1]  [filename2]

6. Git 分支管理

  • 创建分支命令:git branch (branchname)
  • 切换分支命令:git checkout (branchname)
  • 合并分支命令:git merge

6.1 列出、新建、切换分支

# 列出分支基本命令,不要加参数
$ git branch
# 加上参数就是表示创建一个分支,分支名就是参数值
$ git branch (branchname)
# 切换到某一分支下
$ git checkout (branch)
# 创建新分支并立即切换到该分支下
$ git checkout -b (branchname)

6.2 删除分支

# 删除分支命令
$ git branch -d (branchname)

6.3 分支合并

# 使用以下命令将任何分支合并到当前分支中去
$ git merge (branchname)

6.4 合并冲突

在 Git 中,若合并冲突出现了,我们需要手动去修改它,在修改完成后,我们可以用 git add 要告诉 Git 文件冲突已经解决,然后再使用 git commit 提交结果;

7. Git 查看提交历史

# 使用 git log 命令列出历史提交记录
$ git log
# 可以用 --oneline 选项来查看历史记录的简洁的版本
$ git log --oneline
# 还可以用 --graph 选项,查看历史中什么时候出现了分支、合并,开启了拓扑图选项
$ git log --graph
# 也可以用 --reverse 参数来逆向显示所有日志
$ git log --reverse --oneline
# 只想查找指定用户的提交日志可以使用命令:git log --author , 例如,比方说我们要找 Git 源码中 Linus 提交的部分
$ git log --author=Linus --oneline -5
# 如果要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after ; 例如,如果我要看 Git 项目中三周前且在四月十八日之后的所有提交,我可以执行这个(还用了 --no-merges 选项以隐藏合并提交)
$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges

8. Git 标签

# 如果项目达到一个重要的阶段,并希望永远记住那个特别的提交快照,使用 `git tag` 给它打上标签; -a 选项意为"创建一个带注解的标签"; -m 选项为添加的标签注释内容
$ git tag -a v1.0
# 查看项目中的标签
$ git log --decorate
# 若忘了给某个提交打标签,又将它发布了,我们可以给它追加标签, 85fc7e7 为那次修改发布的哈希值
$ git tag -a v0.9 85fc7e7
$ git log --oneline --decorate --graph
# 指定标签信息命令
$ git tag -a  -m "标签注释内容"
# PGP签名标签命令:
$ git tag -s  -m "标签注释内容"

9. Git Github

9.1 添加远程库

# 要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下:
$ git remote add [shortname] [url]

配置 SSH 秘钥连接 GitHub 远程库步骤:

  1. 执行以下命令生成 SSH Key$ ssh-keygen -t rsa -C "[email protected]";其中邮件名称是你在 Github 上注册的邮箱;
  2. 接着会要求确认路径和输入密码,这使用默认的一路回车就行,会在~/ 目录下生成 .ssh 文件夹,如C:\Users\\.ssh,进去打开 id_rsa.pub,复制里面的 key
  3. 回到 github 上,进入 Account => Settings(账户配置),新增 SSH key
  4. 为了验证是否成功,输入以下命令:$ ssh -T [email protected]

9.2 查看当前的远程库

# 要查看当前配置有哪些远程仓库,可以用命令
$ git remote
# 执行时加上 -v 参数,你还可以看到每个别名的实际链接地址
$ git remote -v

9.3 提取远程仓库

Git 有两个命令用来提取远程仓库的更新:

# 1. 从远程仓库下载新分支与数据,该命令执行完后需要执行git merge 远程分支到你所在的分支
$ git fetch
# 2. 从远端仓库提取数据并尝试合并到当前分支,该命令就是在执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支
$ git merge

假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支;

9.3.1 推送到远程仓库

# 推送你的新分支与数据到某个远端仓库命令,该命令将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支
$ git push [alias] [branch]

9.3.2 删除远程仓库

# 删除远程仓库你可以使用命令:
$ git remote rm [alias]
# 例如:在原有的远程仓库上新增一个,然后再删除
# 1. 先查看当前配置有哪些远程仓库
$ git remote -v
# 2. 添加仓库 origin2,再查看远程仓库
$ git remote add origin2 [email protected]:tianqixin/runoob-git-test.git
$ git remote -v
# 删除仓库 origin2,再查看远程仓库
$ git remote rm origin2
$ git remote -v

10. Git CODING

由于 GitHub 的访问速度太慢,常还会出现丢包、失去连接等情况;因而使用国内服务器的托管平台 CODING

GitHub 上的代码迁移到 CODING 的步骤:

  1. 创建 CODING 项目;
  2. 将 GitHub 代码 Pull 到本地;
  3. 本地关联 CODING 仓库,Push 代码到 CODING;
    • 首先执行命令查看当前配置的远程仓库:git remote -v;
    • 接下来执行以下命令,来关联 CODING 远程仓库,要先删除现有的仓库关联,在将仓库关联到 CODING 的地址,并且将代码 Pushmaster 分支:
$ git remote rm origin
$ git remote add origin https://git.coding.net/xxx/xxx.git
$ git push -u origin master

CODING 仓库的免密码 Push/Pull:配置SSH Key

11. Git 服务器搭建(没有动手测试)

Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费,因而我们就需要自己搭建一台Git服务器作为私有仓库使用;接下来我们将以 Centos 为例搭建 Git 服务器:

11.1 安装Git

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
$ yum install git
# 接下来我们 创建一个git用户组和用户,用来运行git服务
$ groupadd git
$ useradd git -g git

11.2 创建证书登录

# 收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个,若没有就创建它;
$ cd /home/git/
$ mkdir .ssh
$ chmod 755 .ssh
$ touch .ssh/authorized_keys
$ chmod 644 .ssh/authorized_keys

11.3 初始化Git仓库

# 首先选定一个目录作为Git仓库,假定是/home/gitrepo/runoob.git,在/home/gitrepo目录下输入命令
$ cd /home
$ mkdir gitrepo
$ chown git:git gitrepo/
$ cd gitrepo

$ git init --bare runoob.git
Initialized empty Git repository in /home/gitrepo/runoob.git/
# 以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git
$ chown -R git:git runoob.git

11.4 克隆仓库

# 192.168.45.4 为 Git 所在服务器 ip ,需要将其修改为你自己的 Git 服务 ip;
$ git clone [email protected]:/home/gitrepo/runoob.git

这样我们的 Git 服务器安装就完成;

你可能感兴趣的:(Git教程笔记)