Git的学习笔记(一)——初识Git及版本库的管理
2016-03-07 14:16
615 查看
引言
Git是目前世界上最先进的分布式版本控制系统,是管理Linux源码的版本控制系统,也是目前谷歌采用用于管理android源码的版本控制系统。一、Git的安装
1、Linux平台下安装
首先,我们可以输入git,检查是否已经安装了Git,如果没有安装它会提示你,你可以通过输入命令:sudo apt-get install git$ git The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git
反之,已经安装好了Git,就会显示,在最后一行我们也可以看到,git 几乎是个智能提示
2、Mac 平台下两种安装方式
一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/第二种方法更简单(推荐),直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
3、Window 平台下安装
Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Git也一样。Cygwin的安装和配置都比较复杂,我自己还木有配置过。用的是牛人把模拟环境和Git都打包好了,所谓的Window版的Git,只需要下载一个单独的exe安装程序,其他什么也不用装,然后按默认选项安装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,弹出一个类似命令行窗口的东西,就说明Git安装成功!二、配置Git
2.1 常用配置命令
git config 针对一个git仓库 默认当前目录是一个git仓库,假设我们有一个仓库叫git_demo,它所修改配置保存在git_demo/.git/config文件,如果当前目录不是一个有效的git仓库,在执行一些命令时会报错git config –global 针对一个用户,即说只要是这个用户操作任何git仓库,那么这个配置都会生效,这种配置保存在~/.gitconfig当中,那什么样的配置需要放到用户的配置文件里呢,git里一个最为重要的信息就是提交者的个人信息
$ git config --global user.name "Your Name" $ git config --global user.email "youremail@example.com"
sudo git config –system 针对一个系统,因为是针对整个系统的,所以必须使用sudo,适用于一个系统中所有的用户,即这里的配置对所有用户都生效,那什么样的配置需要放在这里呢,如我们在执行git commit会弹出一个默认的编辑器,一般是vim,那作为系统的管理员,可以将vim设置为所有用户默认使用的编辑器
$sudo git config --system core.editor vim
还可以配置其他user.xxx属性。因为Git是分布式版本控制系统,便于后期的协作时,更易追踪。
2.2 使用 alias 重新设置git 命令别名
例如输入git ci相当于输入git commit -s,又如输入git st 相当于输入git status$sudo git config --global alias.st status $sudo git config --global alias.ci "commit -s" $sudo git config --global alias.co checkout $sudo git config --global alias.br branch
其中–global 参数非必填,也可以使用–system代替。
2.3 开启Git命令的颜色显示
$git config --global color.ui true
三、创建并管理本地版本库
所谓版本库又名仓库,英文名repository,可以简单理解成一个目录(即隐藏的.git文件夹),这个目录的父目录(即所谓的工作区)里面的所有文件都可以被Git管理起来,每个文件的修改、删除,都可以被跟踪,以便在任何时刻可以回溯版本。1、创建一个空的本地版本库
创建一个空的版本库只需两部,先创建一个空目录(在Windows系统,为了避免各种莫名其妙的问题,请确保所有目录名及父目录都不包含中文),再init(git init)ubuntu2@ubuntu:/media/S2/share$ mkdir codebanks //创建一个目录即工作区 ubuntu2@ubuntu:/media/S2/share$ cd codebanks//进入到目录中 ubuntu2@ubuntu:/media/S2/share/codebanks$ pwd//显示当前命令 /media/S2/share/codebanks
完成了第一步之后只是建立了一个空的目录,还没有形成所谓的版本库,所以还得进行初始化,执行git init 命令之后目录下会多出一个隐藏的.git文件夹(该目录是Git来管理版本库的,请勿手动修改这个目录里面的文件,否则造成严重后果),就说明空的版本库已经创建完毕了。
ubuntu2@ubuntu:/media/S2/share/codebanks$ git init Initialized empty Git repository in /media/S2/share/codebanks/.git/
在Git 1.6.5 或者更高版本之后,我们可以在git init 之后直接输入目录名也可以完成初始化
ubuntu2@ubuntu:/media/S2/share$ git init codebanks Initialized empty Git repository in
2、把已存在的目录变成可以被Git管理的本地版本库
当然我们不一定每次都得在空目录下创建Git仓库,选择一个已存在的目录也是可以的。只需要切到所在目录的路径下执行git init 即可。3、把文件添加到Git本地版本库中
一般来说分为两个主要步骤,第一,使用命令git add filename,(可反复多次使用,添加多个文件);第二步,使用命令git commit -m”提交的内容描述” 提交。但是若是提交到远程版本库提交流程稍微复杂一点为了避免冲突嘛。//git提交代码到版本库的一般流程 git status 查看当前版本库的状态 git diff 查看具体修改内容 git add -u 添加所有代码到暂存区 git show 修改的序列号(可以查看具体修改文件内容(已经提交的)) git log -4 --pretty=oneline --stat 查看四条提交历史记录且一行显示 git commit -m"你对这次提交内容的简单描述" 提交
版本库只能直接add 版本库里的文件,所以我们向空的版本库中添加文件时,第一步是把要添加的文件copy至版本库里,然后才能add、commit。
复制到版本库之后还未add时
add之后
提交git commit -m”提交描述”
ps:commit的时候一定要添加-m参数??否则git log 还是会报 fatal: bad default revision ‘HEAD’ 因为会认为仓库里没有任提交在里面,所以它会报这个错??
4、提交新的版本
假如我们在外部修改了aw08.txt文件未add之前,此时查看版本库git status则会提示所以和svn不同每次提交都得先add再commit
5、回溯到历史记录的某个版本
与svn不同的不是,Git每一次提交成功之后自动生成的commit Id不是1,2,3……递增的数字,而是使用SHA1计算出来的一个非常大的数字,用十六进制表示即每一个commit Id 唯一对应着一个版本,用HEAD表示当前版本,也就是最新的提交c042e4b66……ceac5,前一个版本就是HEAD^,前前一个版本就是HEAD^^,那么往上上百个版本呢。当然不是写上百个^,而是前100个则写成**HEAD~**100。5.1 使用git reset –hard查看当前HEAD指针指向的版本号
5.2 使用git reset –hard HEAD^回到当前版本的前一个版本
5.3 通过git reset –hard commit Id 返回到对应的版本中
5.4 使用git reflog来查看历史操作记录
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- git更新已經刪除的文件
- 提取Git每次提交后Commit的文件
- GIT迁移服务器
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- git终极指南:在实际开发中的应用
- C#分布式事务的超时处理实例分析
- Erlang分布式节点中的注册进程使用实例
- Git远程操作详解
- 25个 Git 进阶技巧(翻译)
- js文件缓存之版本管理详解
- 详解版本控制利器Git,SVN的异同以及适用范围
- C++实现的分布式游戏服务端引擎KBEngine详解
- Ruby实现的删除已经合并的git分支脚本分享
- 在 Shell 提示符中显示 Git 分支名称的方法
- Git使用基础篇(一些常用命令和原理)
- ASP.NET通过分布式Session提升性能
- git fork同步是什么意思?