本文主要是介绍git与git三剑客,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Git分布式版本控制工具
Git概述和基本使用
git分布式版本管理与svn(cvs)对比
- 类型:git是开源的分布式版本控制系统 ,svn是集中式版本控制系统
- 架构:git包括工作目录、暂存区、本地仓库和远程仓库。 svn包括工作目录和中央仓库
- 分支修改:git分支结构只要不提交合并到远程仓库,对其他共同开发者没有影响,svn只有一个目录,是完整目录,改变分支,其他共同开发者都会改变
- 分支匹配:git本地仓库分支和远程仓库分支可以自由匹配,svn是全局统一的
- 内部数据存储方式:git统一存储管理元数据,存放在项目根目录下.git文件里,svn是以文件的形式存放管理,与工作区文件存放在一起
- 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 mastergit log --oneline//查看历史版本
git reset --hard Head~0| --head 798asdasd//回退到第一个版本
Gt图形化界面
.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忽略文件
- 参照github
-
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使用
注册帐号与配置
- 网站与探索:网址|帮助|探索|开发辅助工具
- 配置ssh公私钥
- Adding a new SSH key to your GitHub account(新增ssh key)
- Checked for existing SSH keys先检查是否存在
- Generated a new SSH key and added it to the ssh-agent创建
- 打开git bash,然后输入 ssh-keygen -t rsa -b 4096 -C “your_email@example.com”,回车,出现下图配置成功
- pwd//查看目录
- ls -al //查看目录下文件
- cat id_rsa.pub 打开公钥文件并复制
- 粘贴公钥到github sshKey,保存
创建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团队协作开发企业级项目
这篇关于git与git三剑客的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!