git与git三剑客

2024-08-30 17:18
文章标签 git 三剑客

本文主要是介绍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忽略文件

    • 参照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”,回车,出现下图配置成功
    • 5c875f720927d
    • 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三剑客的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121446

相关文章

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

如何删除不小心上传到git远程仓库中的.idea .iml文件

如果在开始的时候不配置,gitignore文件或者文件配置不正确,初始化上传的时候就会有一些不必要的信息上传上去 如果已经存在了一些文件在git远程仓库中,如。idea,.iml文件等。 首先在项目中定义一个  .gitignore文件,简单的实例如下也可以用idea中的gitignore插件 .DS_Storeclasses/*.settings/target/.classpath

ubuntu16.04 Git add 使用tab键卡死

以前使用Ubuntu14.04 进行git add 操作时使用TAB键可以很快自动补全,但自从使用16.04使用TAB半天没有反应。 一开始以为是Git版本问题,后验证与Git无关。 搜索发现与Dash有关,以下是博客原文: http://www.51testing.com/html/50/n-1245050.html 今天碰到一个问题git 后面的参数用Tab键无法补全