git
Infi-chu:
http://www.cnblogs.com/Infi-chu/
代码管理工具:
1.代码管理工具作用:
*防止代码丢失,做备份
*代码版本的管理,可以进行多个节点的备份,在多个版本之间跳跃
*可以方便的将代码在多人之间进行共享传输
*多人开发时有各种模式可以方便代码管理
2.什么是git:
git是一个开源的分布式版本控制系统,可用于高效的管理大小项目
3.分布式与集中式:
分布式:
每个节点都保存完整的代码,没有明确的中央服务器,节点之间项目推送下载代码,完成代码共享
集中式:
代码集中管理,每次完成的代码上传到中央管理器,然后再统一从中央管理器下载代码使用
4.git特点:
*git可以管理各种文件,特别是代码项目,多数情况下在Linux/Unix系统中使用
*分布式管理,不同于集中式,这是git和svn的核心区别
*git可以更好的支持分布式,方便多人协同工作
*git分布式代码更加安全,方便多人协同工作,有全球唯一的commit版本号
*git是开源的系统
*使用git可以脱网工作,并且数据传输速度较快
5.安装git:
Linux/MacOS(Ubuntu系列):
sudo apt-get install git
Windows:
找适当的版本
msysgit.github.io(Windows下操作GitHub的工具)
6.git配置:
配置级别:
1.系统中所有用户都可以使用该配置
命令:
git config --system
配置文件:
/etc/gitconfig
2.当前用户可以使用该配置
命令:
git config --global
配置文件:
~/.gitconfig
3.当前项目可以使用该配置
命令:
git config
配置文件:
项目文件/.git/config
【注】再有冲突重复的情况下,优先使用范围小的配置
7.git配置内容:
1.配置用户名:
sudo git config --system user.name 用户名
创建密码
2.配置邮箱:
sudo git config --global user.email 邮箱
【注】优先使用范围小的配置
8.git操作:
1.初始化仓库:
git init
在某个目录下初始化仓库后会自动产生.git目录。该目录下工作的所有文档都可以使用git进行管理。
2.配置编译器:
cd 项目目录
git config core.editor sublime
3.查看当前项目的配置信息:
git config --list
4.查看分支状态:
git status
默认工作分支是主分支master,可通过创建新的分支切换
eg.
echo "This is a git test file" > Readme.txt
4.提交文件(工作区-->暂存区):
git add 文件名1 文件名2
git add *
git add 目录名
git rm --cached 文件名1 #取消暂存
5.同步文件(暂存区-->本地仓库):
git commit -m "说明性、描述性文字"
6.修改文件:
eg.
echo "Add a test line!" >> Readme.txt
git add Readme.txt
git commit -m "update Readme.txt file"
7.查看commit日志:
git log # 查看所有日志
前七位是刚刚提交的码(ID),整体是全球唯一ID
git log --pretty=oneline #查看单行日志
8.工作区文件与本地仓库的差异:
git diff Readme.txt
9.误删工作区文件,恢复该文件:
eg.
rm -rf Readme.txt
git chechout Readme.txt
【注】此时恢复的是在本地仓库备份的那个文件,之前在工作区改动的文件无法恢复。
10.本地文件的移动和删除:
与mv、rm命令的用法相同,区别就在于在开头处写一个git
【注】无需add,直接提交
11.丢弃工作区修改:
git chechout -- Readme.txt
12.版本控制:
回到之前版本:
git reset --hard HEAD^ #有几个上箭头(^)就回到上几个版本
git reset --hard 七位ID #回到这个7位ID的版本(指定版本)
用最新的版本:
查看所有历史版本号:
git reflog
git reset --hard 七位ID #commit操作中大括号数值最小的({})就为最新版本
【注】HEAD可以理解为指针
9.标签管理:
定义:
在当前位置添加快照,保存工作状态,一般用于项目版本的迭代。默认是在最新的commit-id处打标签。
创建新的标签:
git tag v1.0 #打标签
git tag -d v1.0 #删除标签
git tag v1.0 -m "version 1.0" #打标签并附加信息
git tag v0.9 七位ID #在指定版本添加标签
git show v1.0 #查看标签的基本信息(内容、基本操作等)
git reset --hard v1.0 #恢复到某一指定标签的版本下
10.临时工作区:
定义:
再有突发任务时,且当前工作不想提交时,可以创建临时工作区。或者在同一个项目中,有好几种想法,不知道哪一个更合适,可以创建临时工作区。
操作:
git stash #保存工作目录
git stash list # 查看保存工作目录列表
git stash apply stash@{1} #恢复到指定工作区(应用某一个工作区)
git stash pop #在最新的临时工作区,恢复到上一个临时工作区并删除
git stash drop stash@{3} #删除某一个工作区
git stash clear #删除所有的临时工作区
【注】{0}为最新的临时工作区,数值越大越旧
11.分支操作:
什么是分支:
分支是每个人获取原有代码,在此基础上创建自己的工作环境,单独开发,不会影响其他分支的操作,开发完成后在统一合并到主线分支中。
分支的好处:
*安全
*不影响他人工作
*自己控制进度
查看当前分支:
git branch #前面有*的表示当前正在工作的区域
创建分支:
git branch miaomiao #创建了喵喵分支
切换分支:
git chechout miamiao #切换到喵喵分支
提交分支:
同之前
同步分支:
同之前
合并至主分支:
git chechout master #切换至主要分支
git merge miaomiao # 将喵喵分支与主分支合并
【注】
1.合并过程中,如果没有冲突,则直接合并,合并之后,当前分支即为干净的分支
2.如果产生冲突,则需要人为的选择在进行add、commit等操作
3.在创建分支前,尽量保证当前分支是干净点,以减少冲突的发生
删除分支:
git branch -d miaomiao #删除喵喵分支(合并后可用-d删除)
git branch -D miaomiao #没有合并的分支需要用-D删除(-D强制删除没有合并的分支)
12.远程仓库:
什么是远程仓库:
远程主机上的仓库。实际上git是分布式的,每一台主机的git结构都是相似的,只是把其他主机的git仓库叫远程仓库
创建共享仓库:
1.创建目录
mkdir gitrepo
2.设置目录属主
chown tarena:tarena gitrepo
3.将该目录设置为共享的git仓库
cd gitrepo
git init --bare [项目名称].git
4.设置本地仓库属主
chown -R Infi_chu:Infi_chu [项目名称].git
上传至共享仓库:
git remote add origin 用户名@目标IP地址:/路径/xxx.git #连接添加远程仓库
git push -u origin master #将主分支推至远程仓库(第一次推送需要-u)
git remote rm [origin] #删除远程主机名
【注】
1.origin是远程仓库默认的名称
2.默认的协议是ssh协议
获取远程仓库的项目:
git clone 用户名@目标IP地址:/路径/xxx.git
从远程仓库拉取分支或代码:
直接拉取远程分支和当前工作区分支合并:
git pull origin 分支名称
拉取远程分支到本地,不合并:
git pull origin 远程分支名:本地分支名
代码退出和拉取:
将本地代码推送至远程仓库:
git push
git push --force origin #当本地版本比远程仓库版本旧时,用本地旧版本覆盖远程仓库的新版本
从远程仓库更新代码:
git pull
git fetch #如果有新的分支拉取到本地,不会和本地的分支合并