git与git三剑客

Git分布式版本控制工具

Git概述和基本使用

git分布式版本管理与svn(cvs)对比
  1. 类型:git是开源的分布式版本控制系统 ,svn是集中式版本控制系统
  2. 架构:git包括工作目录、暂存区、本地仓库和远程仓库。 svn包括工作目录和中央仓库
  3. 分支修改:git分支结构只要不提交合并到远程仓库,对其他共同开发者没有影响,svn只有一个目录,是完整目录,改变分支,其他共同开发者都会改变
  4. 分支匹配:git本地仓库分支和远程仓库分支可以自由匹配,svn是全局统一的
  5. 内部数据存储方式:git统一存储管理元数据,存放在项目根目录下.git文件里,svn是以文件的形式存放管理,与工作区文件存放在一起
  6. git强调个体。速度快、灵活。公共服务器压力和数据量都不会太大,离线工作,svn只有一个单一的集中管理服务器,容易出现单点故障,容易负载过重
git特点
  • 最优的存储能力
  • 非凡的性能
  • 开源的
  • 很容易做备份
  • 支持离线操作
  • 很容易定制工作流程
使用git的web管理平台:github、coding、码云、gitlab(开放源代码,自带持续集成)、BitBucket、Gerrit、百度效率云等
git安装和使用
  • 安装:在 https://git-scm.com/ 下载根据说明安装,或者下载免安装版本,配置git环境

  • git配置用户名和邮箱

    $ git config --global user.name 'your_name'
    $ git config --global user.email 'your_email@domain.com'
    //除了设置global还可以设置--local、--system
    //local只对某个仓库生效
    //global对当前用户所有仓库有效
    //system对系统所有登录的用户有效
    //显示config的配置加--list
    $ git config --list --local
    
  • git创建或初始化仓库

  • git init//把项目纳入git管理
    git init filename//创建文件夹,并纳入git管理
    git log //查看提交信息
    cp ../exportapp/readme.md . //从exportapp目录下拷贝文件到当前仓库,需要加点
    git add readme.md// 添加文件到暂存区
    
Git常用命令

git config --list --local
git init//把项目纳入git管理
git init filename//创建文件夹,并纳入git管理
git log //查看提交信息
cp …/exportapp/readme.md . //从exportapp目录下拷贝文件到当前仓库,需要加点
cp -r …/EclipseAdt/lib . //拷贝文件夹需要加上-r
git add readme.md// 添加文件到占存取
git add index.html images //add命令后边可以跟多个文件和目录
git status //查看当前工程状态
git commit -m’Add readme’ //将暂存区的代码提交到本地仓库(此时用户优先local然后global)
ls -al//查看当前目录下文件
vi index.html//使用vi编辑器编辑文件;按Esc输入冒号退出编辑
git add -u //update,把所有被跟踪的文件一起添加到暂存区
git rm index.html//删除暂存区指定文件 mv index.html index.htm(重命名三步,此命令执行后暂存区有两个文件)
git mv index.htm index.html//重命名文件
git log --oneline//简洁方式查看log
git log -n2 //查看最近两次(后面可以加–oneline)

git rm lib -r -f //git删除指定文件夹和其下所有文件

git branch -v//查看所有本地分支
git branch命令
git checkout -b temp e82c332(分支名)//用历史分支创建一个临时分支

git checkout master//切换分支

git merge temp//合并分支

git tag -a 53d3d6c -m ‘my 53d3d6c tag’

git branch -d fix_readme/git branch -D fix_readme//删除分支

git commit -am’Add test’//把工作区直接创建到历史版本库,其实就是把addhe-m合并一句使用
git log (–oneline) --all//log命令默认查看当前分支,查看所有添加all
git log --oneline --all (-n4) --graph//图形化查历史看关联或版本演进
git help --web log//通过浏览器查看git指令

gitk //启动git图形化界面

git fetch origin master//代码拉取
git pull origin master //拉取并合并两步

git remote add origin

//连接远程
git push -u origin master //指定默认主机提交代码
git push origin master

git log --oneline//查看历史版本

git reset --hard Head~0| --head 798asdasd//回退到第一个版本

Gt图形化界面

5c86efabc4511

.git目录
  • HEAD:指明我们当前工作在哪个分支下
  • config:文件用户信息(name/email)的配置信息
  • res:包含分支和标签(关键版本添加tag)信息
  • tags:标签信息
  • objects:树结构信息,包含tree、blob
git核心对象:commit、tree、blob

[外链图片转存失败(img-oo0rTeP7-1568435724591)(https://i.loli.net/2019/03/12/5c86f6528e85b.png)]

一个commit对应一颗树,即当前commit对应的视图,包含commit当时所有文件的快照,tree是树,可能对应的是一个文件夹,文件下可能也有树,也可能是一个blob(文件),blob和文件名没有关系,它看的是文件内容

Git探秘

Git使用和遇到的问题
  • git tag -a 53d3d6c -m ‘branchAmey tag’ //一个里程碑式的版本添加一个tag

  • 数一数tree的个数

    • mkdir doc// 创建一个文件夹
    • echo “hello,word” > readme//创建readme,并写入内容
    • git add doc/git commit //把内容提交
    • find .git/objects -type f //查看objects下有几个对象
    • git cat-file -t 02fe07b//查看产生的object对象类型
    • git cat-file -p 02fe07b//查看产生的object对象内容
    • 一个文件夹下一个文件提交产生四个对象,一个commit(tree)一个文件名(tree)一个内容(blob)一个文件夹(tree)
  • detached HEAD(分离头指针)–随意切换某个分支

    • 本质上就是在没有分支的状态下工作,你做了很多变更直接切换了分支,变更可能会丢失
    • 尝试性变更反而有好处
    • git branch fix_edit 3d4651d //对没有分支的commit在切换后创建分支
  • HEAD和branch

    • git checkout -b fix_readme master//创建并切换到新分支,HEAD指向也会变
    • git diff 3ff43d7d62cf 53d3d6c4e//比较两个分支的不同
    • git diff HEAD HEAD^1 //HEAD和父分支进行比对
  • commit的描述与合并

    • git commit --amend//修改刚提交的commit描述
    • git rebase -i e82c3322f6//变更某个历史commit描述.指定父commit,把pick改为r,然后修改
    • git rebase --abort//退出rebase状态
    • git rebase -i e82c3322f6//把子commit修改为s,表示合并到一个commit
    • git rebase --continue//rebase vi终断
    • git merge temp//合并分支
    • git commit -c commitID//当rebase -i错误时先add然后指定commit
  • git忽略文件

  • git备份

    哑协议传输进度不可见,智能协议传输速度比哑协议快

    • 哑协议(/path/to/repo.git):本地协议、智能协议(file:///path/to/repo.git)、http/https协议、ssh协议
    • 本地仓库备份和同步
      • git clone --bare /g/workcode/AndroidCode/will/.git ya.git //本地哑协议备份
      • git clone --bare file:///g/workcode/AndroidCode/will/.git zhineng.git //本地智能协议备份
      • git remote show| git remote show//查看远程关联
      • git remote add zhineng file:///g/workcode/AndroidCode/666-backup/zhineng.git// 远程关联本地仓库
      • git push --set-upstream zhineng dev // 新增本地更改提交到远程仓库
Git与github诞生
  • git 出现前
    • 程序员之间协作编程方式少
    • 即使有svn,与开源团队合作也要获得管理员许可才能ferk分支
      • 许多时候批准过程比写代码时间还长
      • 许多开源项目都受到权限问题以及其它一些低效率问题困扰
  • git诞生后
    • 发展
      • 开源领域经历文艺复兴
      • Linux受到追捧
      • 第一个web2.0出现
      • 开源项目的合作变的很容易
      • 许多公司将项目迁移到开源服务器
    • 不足
      • 无法帮助开发人员寻找开源项目
      • 开发的开源项目很难让他人知道
  • Github诞生与发展
    • 让git更好用,让团队协作与编写软件变的轻松、安全,远程协作更方便
    • 开源和寻找开源项目变得容易,互相学习鉴戒提升变的高效
    • 2007-2011-代码协作与软件社交,用户突破100万,库存200万
    • 2012-2015-从快速增长到无处不在,用户280万,库存460万
    • 2015-2018-全球扩张,用户3千万,库存9千万

GitHub使用

注册帐号与配置
创建Hello Word项目
  • 在github创建新仓库,组织名为个人,仓库名是项目名,选择是否公开,选择编程语言自动添加git忽略文件,选择自动创建说明文件,选择公开声明自动创建LICENSE
  • git remote ssh连接,git fetch origin master拉取合并远程代码
  • git merge --allow-unrelated-histories githubWill/master//让没有关联的本地和远程分支合并
  • git push githubWill master//提交代码到远程仓库
  • git merge githubWill/feature/add_gitcommands //合并代码到远程仓库
  • 不同的用户修改了文件,用户需要先拉取,在提交,然后合并
  • 不同用户修改了同一个文件的名称,只需要把协商好的文件名提交,其它删除,其它用户修改了文件名,你只需要拉取代码就好,你修改文件内容git会自动识别
  • git push -f //命令强制提交,会替换远程仓库内容,包括提交记录
  • 禁止向集成分支执行变更历史的操作
github搜索
  • Advanced search高级搜索
  • 搜索关键字+in:readme(>1000) 能搜索出更多项目
  • blog easily start in:readme stars:>5000:搜索容易使用的博客项目
  • help下搜索search查看搜索技巧
github团队协作开发企业级项目
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值