GIT
vcs:版本控制系统
cvcs:集中化的版本控制系统
dvcs:分布式版本控制系统
git只关心文件数据的整体是否发生变化,而大多数其他系统则只关系文件内容的具体差异
三种状态:
在git内都只有三种状态:已提交(commmitted),已修改(modified),已暂停(staged).
git管理项目时:
文件流转的三个工作区域:git的本地数据目录,工作目录,以及暂存区域。
初次运行git前的配置
git提供一个叫做git-config的工具,专门用来配置或读取相应的工作环境变量。变量可以放在三个不同的地方,
1. /etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用gitconfig时
用--system选项,读写的就是这个文件。
2. ~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用gitconfig时
用--global选项,读写的就是这个文件。
3. 当前项目的git目录中的配置文件(也就是工作目录中的.git/config文件):这
里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以
.git/config里的配置会覆盖/etc/gitconfig中的同名变量。
用户信息
$ git config --global user.name "JohnDoe" $ git config --global user.email johndoe@example.com
文本编辑器
$ git config --global core.editor emacs
差异分析工具
$ git config --global merge.tool vimdiff
查看配置信息
$ git config --list
查阅某个环境变量的设定,只要把特定的名字跟在后面即可
$ git config user.name
获取帮助
$ git help <verb> $ man git -<verb>
git基础
目录初始化
$ git init
检查当前文件状态
$ git status filename
忽略某些文件
#创建一个名为.gitignore的文件,列出要忽略的文件模式 $ cat.gitignore *.[oa] *~
查看具体修改了什么地方
git diff
提交更新
$ git commit $ git commit -m "test"
$ git commit -a #跳过使用暂存区域,给git commit加上-a选项,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤
移除文件
git rm
移动文件
$ git mv file_from file_to #git mv就相当于运行了下面三条命令: $ mvR EADME.txt README $ git rm README.txt $ git add README
查看提交历史
$ git log
#我们常用-p选项展开显示每次提交的内容差异,用-2则仅显示最近的两次更新
修改最后一次提交
$ git commit --amend
查看当前的远程库
$ git remote -v
添加远程仓库
$ git remote add pb git://github.com/paulboone/ticgit.git $ git fetch pb
从远程仓库抓取数据
$ git fetch [remote-name]
fetch #命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支
git pull #命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支
推送到远程master分支
$ git push origin master
查看远程仓库信息:
$ git remote show origin
远程仓库的删除和重命名
$ git remote rename pb paul
移除对应的远端仓库
$ git remote rm paul
打标签
$ git tag -a v1.4 -m "test" (-a annotated) $ git show v1.4
获取git 日志
git log --pretty=oneline
推送所有标签:
git push origin --tags
Git命令别名:
$ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st status $ git config --global alias.unstage 'reset HEAD --'
删除远程分支:
git push --delete origin devel
这样一来,下面的两条命令完全等同:
$ git unstage fileA
$ git reset HEAD fileA
分享标签
git push origin [tagname]
签署标签
如果你有自己的私钥,还可以用GPG来签署标签,只需要把之前的-a 改成 -s (-s Signed)
验证标签
git tag -v [tag-name] (-v verify)
当要指定存储的目录时
$gi tclone git://github.com/schacon/grit.gitmygrit
Git支持许多数据传输协议。之前的例子使用的是git://协议,不过你也可以用
http(s)://或者user@server:/path.git表示的SSH传输协议。我们会在第四章详细介
绍所有这些协议在服务器端该如何配置使用,以及各种方式之间的利弊。
工作目录的文件有两个状态:已跟踪和未跟踪