Git是目前世界上最先进的分布式版本控制系统,该文档是菜鸟教程上面关于Git教程方面的知识,包括了使用 Git 前的相关知识,在不同系统中安装配置 Git,Git的相关操作(基本操作、分支管理、操作远程库等知识),具体查看文档;
Git教程笔记1
传送门
文章目录:
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 用户信息
1 2 3
| $ git config --global user.name "runoob" $ git config --global user.email test@runoob.com
|
如果用了 --global
选项,那么更改的配置文件就是位于你用户主目录
下的那个,以后你所有的项目都会默认使用这里配置的用户信息;
如果要在某个特定的项目中
使用其他名字或者电邮,只要去掉 --global
选项重新配置即可,新的设定保存在当前项目的 .git/config
文件里;
在项目中遇到了这样的问题,只要切换了不同项目(用户名称和电子邮件不同),就需要配置 SSH 秘钥才能成功上传代码,解决该问题方式就是对特定的项目中使用其他名字或者电邮,不加 –global 选项
1.2.2 文本编辑器
1 2
| $ git config --global core.editor emacs
|
1.2.3 差异分析工具
1 2
| $ git config --global merge.tool vimdiff
|
Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff
等合并工具的输出信息;当然你也可以指定使用自己开发的工具,具体怎么做可以参阅第七章;
1.2.4 查看配置信息
1 2 3 4
| $ git config --list
$ git config user.name
|
2.Git工作流程
Git
的一般工作流程如下:
- 克隆
Git
资源作为工作目录;
- 在克隆的资源上添加或修改文件;
- 如果其他人修改了,你可以更新资源;
- 在提交前查看修改;
- 提交修改;
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交;

3.Git工作区、暂存区和版本库
3.1 三者的基本概念
- 工作区:就是你在电脑里能看到的目录;
- 暂存区:英文叫
stage或index
;一般存放在 “.git目录下
“ 下的index
文件(.git/index
)中,所以我们把暂存区有时也叫作索引(index);
- 版本库:工作区有一个隐藏目录
.git
,这个不算工作区,而是Git的版本库;
3.2 三者之间的关系

图中左侧为工作区
,右侧为版本库
。在版本库中标记为 “index
“ 的区域是暂存区
(stage, index
),标记为 “master” 的是 master 分支所代表的目录树;图中我们可以看出此时 “HEAD
“ 实际是指向 master
分支的一个”游标”;所以图示的命令中出现 HEAD
的地方可以用 master
来替换;图中的 objects
标识的区域为 Git 的对象库,实际位于 “.git/objects
“ 目录下,里面包含了创建的各种对象及内容。
4.Git创建仓库
4.1 git init
1 2 3 4
| git init
git init newrepo
|
1 2 3 4
| $ git add *.c $ git add README $ git commit -m '初始化项目版本'
|
4.2 git clone
1 2 3 4
| git clone <repo>
git clone <repo> <directory>
|
5.Git基本操作
Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比;
5.1 获取与创建项目命令
1 2 3 4
| $ git init
$ git clone [url] [dirName]
|
5.2 基本快照
5.1.1 git add
5.1.2 git status
5.1.3 git diff
1 2 3 4 5
| $ git diff $ git diff --cached $ git diff HEAD $ git diff --stat
|
5.1.4 git commit
1 2 3 4 5 6 7 8 9
| $ git config --global user.name 'runoob' $ git config --global user.email test@runoob.com
$ git add .
$ git commit -m '提交的注释信息'
git commit -am '提交的注释信息(此前不需要 git add )'
|
5.1.5 git reset HEAD
1 2
| $ git reset HEAD [fileName]
|
5.1.6 git rm
若只是简单地从工作目录中手工删除文件,运行 git status
时就会在 Changes not staged for commit
的提示;要从 Git
中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交:
1 2 3 4 5 6 7 8
| $ git rm <file>
$ git rm -f <file>
$ git rm --cached <file>
$ git rm –r *
|
5.1.7 git mv
1 2
| $ git mv [filename1] [filename2]
|
6.Git分支管理
- 创建分支命令:
git branch (branchname)
;
- 切换分支命令:
git checkout (branchname)
;
- 合并分支命令:
git merge
;
6.1 列出、新建、切换分支
1 2 3 4 5 6 7 8
| $ git branch
$ git branch (branchname)
$ git checkout (branch)
$ git checkout -b (branchname)
|
6.2 删除分支
1 2
| $ git branch -d (branchname)
|
6.3 分支合并
1 2
| $ git merge (branchname)
|
6.4 合并冲突
在 Git 中,若合并冲突出现了,我们需要手动去修改它,在修改完成后,我们可以用 git add
要告诉 Git
文件冲突已经解决,然后再使用 git commit
提交结果;
7. Git查看提交历史
1 2 3 4 5 6 7 8 9 10 11 12
| $ git log
$ git log --oneline
$ git log --graph
$ git log --reverse --oneline
$ git log --author=Linus --oneline -5
$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
|
8.Git标签
1 2 3 4 5 6 7 8 9 10 11
| $ git tag -a v1.0
$ git log --decorate
$ git tag -a v0.9 85fc7e7 $ git log --oneline --decorate --graph
$ git tag -a <tagname> -m "标签注释内容"
$ git tag -s <tagname> -m "标签注释内容"
|
9.Git&Github
9.1 添加远程库
1 2
| $ git remote add [shortname] [url]
|
配置 SSH
秘钥连接 GitHub
远程库步骤:
- 执行以下命令生成
SSH Key
:$ ssh-keygen -t rsa -C "youremail@example.com"
;其中邮件名称是你在 Github
上注册的邮箱;
- 接着会要求确认路径和输入密码,这使用默认的一路回车就行,会在
~/
目录下生成 .ssh
文件夹,如C:\Users\<username>\.ssh
,进去打开 id_rsa.pub
,复制里面的 key
;
- 回到
github
上,进入 Account => Settings
(账户配置),新增 SSH key
;
- 为了验证是否成功,输入以下命令:
$ ssh -T git@github.com
;
9.2 查看当前的远程库
1 2 3 4
| $ git remote
$ git remote -v
|
9.3 提取远程仓库
Git 有两个命令用来提取远程仓库的更新:
1 2 3 4
| $ git fetch
$ git merge
|
假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias]
告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch]
以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支;
9.3.1 推送到远程仓库
1 2
| $ git push [alias] [branch]
|
9.3.2 删除远程仓库
1 2 3 4 5 6 7 8 9 10 11
| $ git remote rm [alias]
$ git remote -v
$ git remote add origin2 git@github.com:tianqixin/runoob-git-test.git $ git remote -v
$ git remote rm origin2 $ git remote -v
|
10.GitCODING
由于 GitHub 的访问速度太慢,常还会出现丢包、失去连接等情况;因而使用国内服务器的托管平台 CODING
;
将 GitHub
上的代码迁移到 CODING
的步骤:
- 创建 CODING 项目;
- 将 GitHub 代码 Pull 到本地;
- 本地关联 CODING 仓库,Push 代码到 CODING;
- 首先执行命令查看当前配置的远程仓库:
git remote -v
;
- 接下来执行以下命令,来关联
CODING
远程仓库,要先删除现有的仓库关联,在将仓库关联到 CODING
的地址,并且将代码 Push
到 master
分支:
1 2 3
| $ 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
1 2 3 4 5
| $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel $ yum install git
$ groupadd git $ useradd git -g git
|
11.2 创建证书登录
1 2 3 4 5 6
| $ cd /home/git/ $ mkdir .ssh $ chmod 755 .ssh $ touch .ssh/authorized_keys $ chmod 644 .ssh/authorized_keys
|
11.3 初始化Git仓库
1 2 3 4 5 6 7 8 9 10
| $ cd /home $ mkdir gitrepo $ chown git:git gitrepo/ $ cd gitrepo
$ git init --bare runoob.git Initialized empty Git repository in /home/gitrepo/runoob.git/
$ chown -R git:git runoob.git
|
11.4 克隆仓库
1 2
| $ git clone git@192.168.45.4:/home/gitrepo/runoob.git
|
这样我们的 Git 服务器安装就完成;