美文网首页
Git与github

Git与github

作者: 进击的大东 | 来源:发表于2019-03-12 23:21 被阅读0次

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 --localgit init//把项目纳入git管理git init filename//创建文件夹,并纳入git管理git log //查看提交信息cp ../exportapp/readme.md . //从exportapp目录下拷贝文件到当前仓库,需要加点cp -r ../EclipseAdt/lib . //拷贝文件夹需要加上-rgit 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//简洁方式查看loggit 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命令默认查看当前分支,查看所有添加allgit log --oneline --all (-n4) --graph//图形化查历史看关联或版本演进git help --web log//通过浏览器查看git指令

gitk //启动git图形化界面

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

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

Gt图形化界面

5c86efabc4511 5c86efabc4511

.git目录

  • HEAD:指明我们当前工作在哪个分支下

  • config:文件用户信息(name/email)的配置信息

  • res:包含分支和标签(关键版本添加tag)信息

  • tags:标签信息

  • objects:树结构信息,包含tree、blob

git核心对象:commit、tree、blob

5c86f6528e85b 5c86f6528e85b
一个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团队协作开发企业级项目

gitLab的使用

相关文章

网友评论

      本文标题:Git与github

      本文链接:https://www.haomeiwen.com/subject/hwqapqtx.html