Git是一个开源的分布式版本控制系统,用于敏捷高效的处理任何或大或小的项目。 Git 是 Linus Torvalds 为了帮助管理
Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion
等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git与SVN的区别:
Git是分布式的管理,而SVN不是的
Git是把内容按元数据存储,SVN是按文件存储,所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
Git分支和SVN分支不同,分支在SVN中一点不特别,就是版本库中的另外的一个目录。
GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
一、Git的安装配置
1、安装包的地址是:http://msysgit.github.io/ windows
2、Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。 这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方
: /etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 –system 选项,读写的就是这个文件。
~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 –global 选项,读写的就是这个文件。
当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。 在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即$HOME 变量指定的目录,一般都是 C:\Documents and Settings\$USER。 此外,Git 还会尝试找寻找 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。
3、用户信息
配置个人的用户名和Email
$ git config –global user.name “zhangy”
$ git config –global user.email zhangy@xinli.com.cn
4、查看配置信息
$ git config –list
http.postbuffer=2M
user.name=zhangy
user.email=zhangy@xinli.com.cn
二、Git的工作流程
三、创建仓库
使用当前目录作为Git仓库,我们只需使它初始化。
$ mkdir runoob
$ cd runoob/
$ git init
在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)。
$ git clone git://github.com/schacon/grit.git mygrit
Cloning into ‘simplegit’… remote: Counting objects: 13, done.
remote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13
Receiving objects: 100% (13/13), done. Resolving deltas: 100% (2/2),
done. Checking connectivity… done.
三、Git的基本操作
git add 命令可将该文件添加到缓存
git add
git status 以查看在你上次提交之后是否有修改。
git status
执行 git diff 来查看执行 git status 的结果的详细信息,一行一行地显示这些改动具体是啥。
git diff
使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
git commit
git reset HEAD 命令用于取消已缓存的内容。
git reset HEAD – hello.php
git rm 会将条目从缓存区中移除。这与 git reset HEAD 将条目取消缓存是有区别的。 “取消缓存”的意思就是将缓存区恢复为我们做出修改之前的样子。
git rm hello.php
如果你要在工作目录中留着该文件,可以使用 git rm –cached
重命名磁盘上的文件
$ git mv README README.md
$ ls
README.md
从commitid上取代码
首先git branch一个分支
将这个分支推送上去
git push origin 分支git reset - -hard commitid
最后删除本地分支以及远程分支
四、Git分支管理
1、创建分支test
git branch test
2、切换分支test
git checkout test
3、一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用以下命令将任何分支合并到当前分支中去:。
合并分支命令:
git merge
以上实例中我们将 newtest 分支合并到主分支去,test2.txt 文件被删除。
具体操作:
进入当前主干分支输入: git merge 分支名称,最后git pull一下。也许会有冲突。先解决冲突,然后git add
文件,在git commit ,在push
撤销一个分支
git reset - -hard commitid
4、删除分支
git branch -d test
5、删除远程分支
git push origin :(删除的)分支名称
五、Git查看提交历史
git log
我们可以用 –oneline 选项来查看历史记录的简洁的版本。
git log –oneline
我们还可以用 –graph 选项,查看历史中什么时候出现了分支、合并。以下为相同的命令,开启了拓扑图选项:
git log –oneline –graph
你也可以用 ‘–reverse’参数来逆向显示所有日志。
git log –reverse –oneline
如果只想查找指定用户的提交日志可以使用命令
$ git log –author=Linus –oneline -5
如果你要指定日期,可以执行几个选项:–since 和 –before,但是你也可以用 –until 和 –after。
例如,如果我要看 Git 项目中三周前且在四月十八日之后的所有提交,我可以执行这个(我还用了 –no-merges 选项以隐藏合并提交):
$ git log –oneline –before={3.weeks.ago} –after={2010-04-18} –no-merges
五、Git标签
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。
如果我们要查看所有标签可以使用以下命令:
git tag
创建tag
$ git tag -a v0.1.2 -m “0.1.2版本”
切换tag
git checkout [tagname]
查看Tag
git show v0.1.2
删除tag
git tag -d v0.1.2
给指定的commitid打tag
$ git tag -a NAK1.1.9 “提交版本1.1.9” 9fbc3d000998989798f3
Tag推送到服务器
$ git push origin v0.1.2 # 将v0.1.2 Tag提交到git服务器
$ git push origin –tags # 将本地所有Tag一次性提交到git服务器