Git
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git 与 SVN 区别
Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
Git 与 SVN 区别点:
- 1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
- 2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
- 3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
- 4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
- 5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
安装配置
官网下载安装即可。
Git Bash:Unix与Linux风格的命令行,最推荐使用。
Git CMD:Windows风格的命令行。
Git GUI:图形界面的Git。
# 设置提交代码时的用户信息
$ git config --global user.name "[name]"
$ git config --global user.email "[email address]"
# 显示当前的Git配置
$ git config --list
# 添加当前目录的所有文件到暂存区
$ git add .
# 提交暂存区到仓库区
$ git commit -m "[message]"
git push origin master
#密钥
ssh-keygen -t rsa -C "这里换上你的邮箱"
#历史记录
history
#配置信息
git config -l
git config --global --list #用户配置
git config --system --list #系统配置
系统配置文件在:安装目录Git/etc/gitconfig
用户配置文件在:C盘,当前用户,.gitconfig
基本理论
Git本地有三个工作区域,工作目录,暂存区,资源库(本地仓库),如果加上远程的git仓库,就可以分为四个工作区域。
工作目录----git add----暂存区----git commit----本地仓库----git push----远程仓库。
远程仓库----git pull----本地仓库----git reset----暂存区----git checkout----工作目录。
git init:创建全新的仓库。
git clone 地址:从远程仓库克隆到本地。
Git文件操作
文件的四种状态:
- Untracked:未跟踪,此文件在文件夹中,但并没有加到git库,不参与版本控制,通过git add . 状态变为Staged。
- Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中的完全一致,这种类型的文件有两种去处,如果它被修改就变为modefied,如果它被git rm,移除版本库,则成为Untracked文件。
- Modefied:文件已修改,但没有其它的操作,这个文件也有两个去处,通过git add . 进入暂存staged状态,使用git checkout,则丢弃修改,返回unmodify,这个git checkout即从库中取出文件,覆盖当前修改。
- Staged:暂存状态,执行git commit则将修改同步到库中,这时库中的文件和本地的文件变为一致,文件为Unmodify状态,执行git reset HEAD filename取消暂存,文件状态为Modified。
git status:查看文件状态
忽略文件:有时候我们不想将某些文件纳入版本控制中,比如数据库文件,临时文件等。
在主目录下建立 .gitignore 文件,此文件有以下的规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux的通配符,例如:星号(*)代表任意多个字符,问号代表一个字符,方括号[ ]代表可选字符范围,大括号()代表可选的字符串等等。
- 如果名称的最前面有一个!号,代表例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
*.txt #忽略所有的.txt结尾的文件
!lib.txt #lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ #忽略build下的所有文件
doc/*.txt #忽略 doc/notes.txt但不包括doc/server/arch.txt
使用码云
-
注册登录码云
-
设置本机绑定SSH公钥,实现免密登录。(C/user/adminnistrator/.ssh)
ssh-keygen -t rsa -C "邮箱":生成公钥
-
将公钥信息添加到码云SSH中。
-
使用码云创建一个仓库。
IDEA集成Git
-
新建项目。(将远程下载的项目拷贝到新建的项目中,拷贝的颜色变红)
-
修改文件,使用IDEA操作git。
- 添加到暂存区
- commit提交
- git push到远程仓库
-
提交。
Git分支
Git分支中常用的命令
#列出所有的本地分支
git branch
#列出所有的远程分支
git branch -r
#新建一个分支,但依然停留在当前分支
git branch [branch-name]
#新建一个分支,并切换到该分支
git checkout -b [branch]
#合并指定分支到当前分支
git marge [branch]
#删除分支
git branch -d [branch-name]
#删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
如果同一个文件在合并分支时都被修改了则会引起冲突,解决的办法就是修改冲突文件后重新提交。选择要保留哪一个。
master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作。工作一般会在新建的dev分支上工作,工作完后,比如要发布,或者dev分支代码稳定后可以合并到主分支master上。