WHAT
什么是git?
简单来说就是用于管理代码的版本控制器,用于敏捷高效地处理任何或小或大的项目
Git与SVN区别?
- Git 是分布式的,SVN 不是
- Git 把内容按元数据方式存储,而 SVN 是按文件
- Git 分支和 SVN 的分支不同
分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。 - Git 没有一个全局的版本号,而 SVN 有
WHY
- Git 的内容完整性要优于 SVN
Git 的内容存储使用的是 SHA-1 哈希算法。
这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。 - Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
HOW
Windows 平台上安装
安装包下载地址:https://gitforwindows.org
完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。
在开始菜单里找到"Git"->“Git Bash”,会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。
Mac 平台上安装
在 Mac 平台上安装 Git 最容易的当属使用图形化的 Git 安装工具,下载地址为:
http://sourceforge.net/projects/git-osx-installer/
Git 配置
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 装在什么目录,就以此作为根目录来定位。
用户信息
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
查看配置信息
要检查已有的配置信息,可以使用 git config --list 命令:
$ git config --list
http.postbuffer=2M
user.name=runoob
user.email=test@runoob.com
生成仓库
git init newrepo
初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:
$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'
拷贝项目
git clone <repo> #拷贝整个项目
git clone <repo> <directory> #拷贝项目的指定目录
上交代码基本命令
git add . #添加缓存
git commit -m '填写修改内容' #提交修改
git push #上传修改内容
git pull #更新git云端内容
git status #查看自己本地内容状态
git log #查看commit提交日志
git reset #清空缓存,撤消git add
git reset --mixed HEAD^ #册小commit,并且撤消git add
git branch #列出分支
git branch <branch> #手动创建branch分支
git branch -d <branch> #手动删除branch分支
git merge #合并分支,与当前主干合并
git fetch --all && git reset --hard origin/master && git pull #强制覆盖本地,同步云端代码