Git概述
Git 是一个开源的分布式版本控制系统 (VCS),最初由 Linus Torvalds(Linux 的创建者)于 2005 年开发,是目前最流行和最常用的版本控制工具。
Git工作流程
一般工作流程如下:
- 克隆 Git 资源作为工作目录
- 在克隆的资源上添加或修改文件
- 如果其他人修改了,可以更新资源
- 在提交前查看修改
- 提交修改
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交
Git vs SVN
总的来说,主要有以下三点不同
- 存储方式不一样
- 使用方式不一样
- 管理模式不一样
存储方式
GIT把内容按元数据方式存储类似k/v数据库,而SVN是按文件(新版svn已改成元数据存储)。
举个例子, 我们打开Git Bash ,演示一下 【元数据】的概念
artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo $ git init artisan # 初始化一个名为artisan的项目 Initialized empty Git repository in D:/opt/gitdemo/artisan/.git/ artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo $ cd artisan # 进入到artisan目录 artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/artisan (master) $ ls artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/artisan (master) $ echo 'artisan test' > readme.mf # 写数据到 readme.mf文件 artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/artisan (master) $ cat readme.mf # 查看写入的内容 artisan test artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/artisan (master) $ git hash-object -w readme.mf # 刷到git的存储里 warning: LF will be replaced by CRLF in readme.mf. The file will have its original line endings in your working directory ca30c25824b24fede390877fcddf0489eef76787 artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/artisan (master) $ git cat-file -p ca30c25824b24fede390877fcddf0489eef76787 # 根据上一步返回的版本号查看提交的内容 (可以根据这个唯一串进行回滚) artisan test artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/artisan (master) $ artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/artisan (master) $ echo 'artisan test 2222' >> readme.mf # 新写入数据到文件 artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/artisan (master) $ git hash-object -w readme.mf # 刷入git存储 ,返回的值与上一个不同 warning: LF will be replaced by CRLF in readme.mf. The file will have its original line endings in your working directory eef835b51d5b4d802765e88cfb19832c11de169b artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/artisan (master) $ git cat-file -p eef835b51d5b4d802765e88cfb19832c11de169b # 查看 artisan test artisan test 2222 artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/artisan (master) $
而 SVN的存储方式 ,类似于
readme.mf.version1 readme.mf.version2 ........
使用方式
从本地把文件推送远程服务
- SVN只需要commit一步
- GIT需要 add、commit、push 三个步骤
管理模式
- SVN是一个远程集中式的管理系统
- git 是一个分布式的版本管理系统
简言之, SVN服务器宕了以后,谁也别提交了。 Git则不然,本地不影响,待服务器好了以后再push 也是妥妥的。
另外,Git支持多个远程服务器地址, 而SVN只有一个地址。
大家试想一下 linus 搞的这个linux 操作系统,全世界都有开发维护者,如果全世界都用一个Remote Git Repository ,那不得疯掉… 多个Git 也便于权限等的独立管理…
Git 核心命令
Git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull
- workspace:工作区
- staging area:暂存区/缓存区
- local repository:版本库或本地仓库
- remote repository:远程仓库
【创建仓库命令】
- git init 初始化仓库
- git clone 拷贝一份远程仓库,即下载一个项目。
【提交与修改】
- git add 添加文件到暂存区
- git status 查看仓库当前的状态,显示有变更的文件。
- git diff 比较文件的不同,即暂存区和工作区的差异。
- git commit 提交暂存区到本地仓库。
- git reset 回退版本。
- git rm 将文件从暂存区和工作区中删除。
- git mv 移动或重命名工作区文件。
【提交日志】
- git log 查看历史提交记录
- git blame
<file>
以列表形式查看指定文件的历史修改记录
【远程操作】
- git remote 远程仓库操作
- git fetch 从远程获取代码库
- git pull 下载远程代码并合并
- git push 上传远程代码并合并
接下来循序渐进的了解
1. GIT客户端安装配置
2. GIT的基本使用
2.1 git 项目创建等操作
#当前目录初始化为git 本地仓库 git init <directory>
创建一个.git 目录。 其中
常用命令列表
下面我们来看下基本的命令
本地添加/删除
#添加指定文件至暂存区 git add <fileName> #添加指定目录至暂存区 git add <directory> #添加所有 git add -A #将指定目录及子目录移除出暂存区 git rm --cached target -r #添加勿略配置文件 .gitignore
本地提交
#提交至本地仓库 git commit file -m '提交评论' #快捷提交至本地仓库 git commit -am '快添加与提交'
我们来个演示
git add 到 local cache
artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo $ cd gitProject/ # 进入到项目目录 artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ pwd # 查看当前路径 /d/opt/gitdemo/gitProject artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ echo 'artisan git demo ' > README.MF # 创建文件 artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git status # 查看文件的状态 Untracked files On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) README.MF nothing added to commit but untracked files present (use "git add" to track) artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git add README.MF # 添加到local cache warning: LF will be replaced by CRLF in README.MF. The file will have its original line endings in your working directory artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git status # 查看文件的状态, 发现文件状态变更为 to be committed On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: README.MF artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git rm --cached README.MF # 从local cache中删除文件 (本地文件其实不会删除) rm 'README.MF' artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git status # 查看文件的状态 又变成了 Untracked files On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) README.MF nothing added to commit but untracked files present (use "git add" to track) artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git add -A # 添加全部的文件 warning: LF will be replaced by CRLF in README.MF. The file will have its original line endings in your working directory artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git status # 查看文件状态 On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: README.MF artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $
截止到这里 add 部分演示完了。
git commit 到 local repository
接下来 看看 commit 部分的操作
artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: README.MF artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git commit README.MF -m 'init commit' # 提交到 local repository warning: LF will be replaced by CRLF in README.MF. The file will have its original line endings in your working directory [master (root-commit) 4ac59bd] init commit 1 file changed, 1 insertion(+) create mode 100644 README.MF artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git status # 查看状态,发现本地已经木有待提交的文件了 On branch master nothing to commit, working tree clean artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $
git push 到 remote git repository
这个时候需要到 github or gitee or gitlab上新建一个项目
我们以gitee为例
看文档
简易的命令行入门教程: Git 全局设置: git config --global user.name "小工匠" git config --global user.email "815150141@qq.com" 创建 git 仓库: mkdir gitProject cd gitProject git init touch README.md git add README.md git commit -m "first commit" git remote add origin https://gitee.com/yangshangwei/gitProject.git git push -u origin "master" 已有仓库? cd existing_git_repo git remote add origin https://gitee.com/yangshangwei/gitProject.git git push -u origin "master"
执行
git remote add origin https://gitee.com/yangshangwei/gitProject.git git push -u origin "master"
artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git remote add origin https://gitee.com/yangshangwei/gitProject.git # 提交到远程git 仓库 artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git push -u origin "master" # 提交master 分支 Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 232 bytes | 232.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 remote: Powered by GITEE.COM [GNK-6.4] To https://gitee.com/yangshangwei/gitProject.git * [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'origin'. artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $
输入用户名和密码
到remote git 查看
OK, 大功告成。
这一部分我们也讲解完了。
2.2 git项目的克隆
#基于远程仓库克隆至本地 git clone <remote_url>
演示一把
artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo $ git clone https://gitee.com/yangshangwei/gitProject.git gitProject2 Cloning into 'gitProject2'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 212 bytes | 30.00 KiB/s, done. artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo $ cd gitProject2/ artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject2 (master) $ ls README.MF
2.3 文件提交与推送
修改一下,然后重新push ,演示一把
artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject2 (master) $ echo 'new modify content ' >> README.MF # 追加内容 artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject2 (master) $ git status # 查看状态 On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: README.MF no changes added to commit (use "git add" and/or "git commit -a") artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject2 (master) $ git add -A ; git commit -am '第二次提交' ; git push # 连写 warning: LF will be replaced by CRLF in README.MF. The file will have its original line endings in your working directory [master 5e6d25b] 绗簩娆℃彁浜? 1 file changed, 1 insertion(+) Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (3/3), 301 bytes | 301.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 remote: Powered by GITEE.COM [GNK-6.4] To https://gitee.com/yangshangwei/gitProject.git 4ac59bd..5e6d25b master -> master artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject2 (master) $
到gitee上去查看
我们回到 gitProject 这个工程,重新git pull 获取最新代码
artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ git pull # 获取最新代码 remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 281 bytes | 17.00 KiB/s, done. From https://gitee.com/yangshangwei/gitProject 4ac59bd..5e6d25b master -> origin/master Updating 4ac59bd..5e6d25b Fast-forward README.MF | 1 + 1 file changed, 1 insertion(+) artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ pwd /d/opt/gitdemo/gitProject artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ ls README.MF artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $ cat README.MF artisan git demo new modify content artisan@LAPTOP-JF3RBRRJ MINGW64 /d/opt/gitdemo/gitProject (master) $
成功
官方文档
Git 完整命令手册地址:http://git-scm.com/docs
PDF 版命令手册:github-git-cheat-sheet.pdf
Git 各平台安装包下载地址为:http://git-scm.com/downloads