Git入门
介绍
git ,Linux创始人Linus花了一周时间开发出来的分布式版本控制管理系统,称git为开源软件的基石一点也不为过。
CVS/Subversion | Git |
---|---|
集中式版本控制系统,客户端需要先从服务器端下载最新的代码,开发完成后再将代码交给服务器 | 分布式版本控制系统,没有服务器端与客户端的区别,每台计算机上都保存了一份完整的代码库,代码一旦修改就会推送同步到其他计算机的版本库 |
基本概念
git 设计出色是因为其跟踪和管理的是文件的修改而非文件本身。git 主要维护三个工作区域,分别是
工作目录(Working Directory),暂存区(又称索引区域)和版本仓库区域。
开发流程:
$: mkdir Code 创建一个空的目录用来保存开发程序或项目源代码,称之为工作目录
//进入工作目录,由git对此目录进行初始化,其实质就是在项目目录下创建一个名为git的隐藏文件夹(.git)
//初始化后git即可对源代码文件进行跟踪和项目管理
$: cd Code
$: git init
// Code 工作目录
//.git/index 暂存区
//.git/objects 版本仓库区域
版本仓库区域 :arrow_right: 暂存区 :arrow_right: 工作目录
工作目录 :arrow_right: 暂存区 :arrow_right: 版本仓库区域
工作流程:
开发者在工作区创建一个源代码文件
需要git对其进行跟踪(工作目录中的文件要么处于已跟踪状态,要么处于未跟踪状态)
将此文件进行索引(index/stage),并将索引内容保存到 .git/index 文件中(没有提交文件到暂存区此文件不存在)
索引文件并不保存文件的内容,需要提交后将文件内容保存到 git 对象库中 (.git/objects)
文件索引建立了文件和代码库中对象实体之间的对应关系,便于分批和分阶段提交代码内容,并对文件进行快照,便于回退操作。
基本操作
安装和配置
//安装
$: sudo aptitude install -y git
$: git --version
git version 2.7.4
//配置
git config -l #查看git默认配置
//添加用户电子邮件和用户名称
git config --global user.email "15950513866@163.com"
git config --global user.name "1-riverfish"
//设置默认编辑器,当然是emacs
git config --global core.editor "emacs"
//启用git输出显示颜色
git config --global color.ui true
//查看上述配置
git config --list
user.email=15950513866@163.com
user.name=1-riverfish
core.editor=emacs
color.ui=true
重要配置文件
- .gitconfig
使用 git config
命令设置的结果全部保存在这个文件中
- .gitignore
保存需要忽略的文件或文件夹名
*.o
*.ko
*.obj
debug/
上述配置文件都是重要文件,最好做一下备份
高频操作
- 获取帮助
git --help
git clone --help
man git
man git clone
- 创建本地版本库
//1.初始化全新版本库
mkdir mypro
cd mypro
git init #初始化时不创建.git目录,原先该目录中的内容直接保存到工作目录可以使用 --bare 选项,裸版本库
//2.克隆远端版本库
git clone git://github.com/git/git #一般情况下,裸版本库(Bare Repository)约定俗成以.git为拓展名
git clone git://github.com/git/git mypro #指定本地版本库名称
//检查克隆版本库的正确性
git fsck
- 向版本库添加和提交新文件
1.编辑器创建文件
emacs hello.cpp
2.添加新文件到暂存区
git add hello.cpp
git add . #将所有修改过的工作目录文件一次性全部放到暂存区
git add -i #交互式添加多个文件
3.提交文件到版本库
git commit -m "Hello World program" #-m参数后的双引号是代码提交内容的说明,成功提交文件后,在.git 目录下的objects目录下会多出几个十六进制的目录
//查看提交的详细信息
git show
//查看文件的状态信息
git status
或
git status -s
//取消已经暂存的文件
git reset HEAD hello.cpp
//如果修改了源代码文件,则需要重新添加到暂存区和版本库
git add hello.cpp
git commit
git show
//从版本库删除文件
1.rm命令删除文件
rm -rf hello.cpp
2.从暂存区删除文件
git rm hello.cpp
3.提交删除
git commit
git show
//只是从暂存区中删除且不能删除文件
git rm --cached hello.cpp
//缓存或提交文件后,查看尚未暂存的文件更新了哪些部分
git diff # 查看工作目录和暂存区域之间的差异
//查看暂存区和上次提交时快照之间的差异
git diff --cached
上述操作说明 --cached 参数只对暂存区文件有效
//查看提交历史
git log
git log -p #展开显示每次提交的内容的差异
git log -3 #指定显示历史记录的次数,最新三次
- 版本库的分支操作
//版本库初始化后默认的分支名为 master
git branch
* master
1.创建和切换分支
git branch dev
git checkout dev
或者,合二为一
git checkout -b dev
2.删除分支
git branch -d dev #如果当前分支为dev,则无法运行上述命令
3.合并分支
git merge dev
#撤销此次合并
git reset --hard ORIG_HEAD
#查看哪些分支已被并入当前分支
git branch -merged
#查看哪些分支未被并入当前分支
git branch -no-merged
//HEAD是一个指向当前分支的指针
- Git远程服务器操作
//通过git操作的不是本地版本库而是远程服务器上的版本库
//需要一个Github账户并且配置相关的 SSH Key
1. git@github.com:1-riverfish/git-test.git
//创建SSH Key
ssh-keygen -t rsa -b 4096 -C "15950513866@163.com"
//切换到 ~./ssh目录下,复制id_rsa.pub文件内容到Github Settings左侧的SSH and GPG keys-SSH keys配置页面
2.测试连通性
ssh -T git@github.com
Hi 1-riverfish! You've successfully authenticated, but GitHub does not provide shell access.
3.连接到Github版本库
git remote add origin git@github.com:1-riverfish/git-test.git
#报错:fatal:remote origin already exists,删除 origin 即可
git remote rm origin
4.从Github获取文件
git fetch --all #不会覆盖本地版本库
git pull origin master #覆盖本地版本库,当前的master分支就变了样子
上述远程库的名字是 origin ,这是git默认的叫法,最好不要改名
5.推送本地版本信息至Github
git push -u origin master
//查看远端服务器的详细信息
git remote
#显示远程服务器的版本库地址
git remote -v
参考书籍:《完美应用Ubuntu 第三版》
Any question please contact 1-riverfish