原创 更新于 时间( 2018-05-09 01:12:00) ( 1575) 次浏览 标签 : Git
导读

整理Git相关 ...

安装

安装 Git

  • windowsexe 全局变量添加,全局使用
  • linux yum install gitapt-get install git
  • macxcode 自带,如果你卸载了 xcode 再使用 git 会发现报错 : 提醒你安装 xcode-select —install


检出仓库

1 检出方式 SSH

git clone username@host:/path/to/repository

ssh-keygen -t rsa -C "leon.si@5imakeup.com”
密钥类型:rsa
-c 邮箱
-f 指定 save file ,不输入会提示存储路径,会车默认
这时候再回车是push 的密码
id_rsa 和 id_rsa.pub

#设置到仓库 的 SSH Key
cat ~/.ssh/id_rsa.pub


Gitlab

2 检出方式 Http/Https

git clone https:/path/to/repository.git

fetch/push 需要输入账号密码,当然这种也可以设置账号密码

GayHub
$ touch ~/.git-credentials 
在此文件中添加https://{username}:{password}@github.com,验证信息修改为个人账号密码,支持多行以及不同网站,如gitlab.me,git.coding.net等。再次push就不再需要手动验证了。


理解 git commitadd

实际上,本地仓库由 git 维护的三颗树组成

这里写图片描述

  • 第一个是 Working Dir 工作目录 ,放代码 ,git-config 文件
  • 第二个是 Stage Index 索引/缓存区
  • 第三个是 Commit History 提交区

  • git addworking Dir -> Stage 缓存区 ;
  • git commitStage 提交到 -> 提交区
  • git push 将 提交区 -> master

git chekcout ,撤销本地区 工作区的修改 ,所谓撤销就是,将未被修改的文件 覆盖,已经修改的文件,从哪儿撤销,从 缓存区 Git撤销相关

Git 规范

.gitignore 忽略

实际项目中,很多文件都是不需要版本管理的。一般来说每个Git项目中都需要一个“.gitignore”文件,这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中。这个文件的内容是一些规则,Git会根据这些规则来判断是否将文件添加到版本控制中。常见的一些平台/语言下的 ignore 文件

***Windows ***
    Desktop.ini
    Thumbs.db
    
***Py***
    *.pyc   被调用 不需要再编译  速度快
    *.egg   类似于 jar 包  配合 easy_install 

***Eclipse***
    .classpath
    .project
    .settings/

***Intellij***
    .idea/
    *.iml
    *.iws

***Mac***
    .DS_Store

***Maven***
    log/
    target/

注意,ignore 文件是需要在 ignore 内的文件提交到远程版本库之前提交,如果已经有了,则需要删除版本库的文件类型,再提交 ignore 才会生效。

Commit 的规范

git commit -m “” / git commit 写文本 规范:

  • Added ( 新加入的需求 )
  • Fixed ( 修复 bug )
  • Changed ( 完成的任务 )
  • Updated ( 完成的任务,或者由于第三方模块变化而做的变化 )
  • Mod ( 修改 )

https 方式 如何不在Push/Pull时输入账号密码

1 生成ssh key  
ssh-keygen -t rsa -C youremail@email.com

2 复制  cat ~/.ssh/id_rsa.pub

3 修改成 ssh 方式   
ssh  git@github.com:leon0204/testGit.git 

分支

分支命名规范(与分支管理规范相关)

  • develop/ release 发布
  • feature 开发
  • hotfix 修改bug


分支常用命令

1 git branch 查看分支 list

[root@VM_0_8_centos testGit]# git branch

* master

2 创建和切换 git checkout -b feature001 等同于 git branch feature001 && git checkout feature001

3 将本地分支推送到远程分支

git remote -v

git remote set-url origin git@github.com:leon0204/testGit.git 

git push origin develop   将本地的 develop 分支 推送到线上分支 

在另外一个工作区 git pullbranch -a 就看到了 然后 checkoutdevelop ,然后 branch 也能看到了 。

4 【合并】无冲突

git checkout master
git merge feature/01/info_rebuild

5 【冲突解决】

branch a commit 
branch b commit 

git pull  
vim 冲突文件 head and >>> 再次 commit  push 

6 【删除分支】

git push origin --delete feature001 删除远程分支
git branch -d   删除本地分支

工作流

GitFlow

这里写图片描述

分支状态: 主要分支 (单独)

1  `master` : `already-production`
2 `develop` : `newest `下次发布的开发状态

支援分支 (多个s)

  • 1 特性 featuredevelop 分支 扩展出 分支 ,mergedevelop
  • 2 releasebug 的时候,在测试环境中,从 develop 开一个分支出来,然后改完,mergemasterdevelop
  • 3 Hotfix 立马修复上线,从 maste r 分出来, merge 回去


AoneFlow

TrunkBased ~ GitFlow

主干分支、特性分支、发布分支
master feature/001 release

  • 1 开始前,从master 创建 feature 分支 就是在 master 上面 开很多的 feature 分支 ==特性分支 这里写图片描述

  • 2 合并 feature 分支,得到 发布 release 分支 公共分支 这里写图片描述 release/test分支对应部署测试环境,release/prod分支对应线上正式环境等等 适合美的你

  • 3 发布到合并 发布分支 release/test|/prod 到主干 ,主干添加标签,删除该发布分支关联的特性分支(节省空间) 这里写图片描述

oldM 老的手机站 oldwww 老的网站 这里写图片描述

一些特殊情况

  • 分支工作区未提交 不想提交 但是要新开分支

我在写一个新功能 假设我们是按照阿里的 AoneFlow 分支模式来工作的,其实不重要,那我现在在,一个特性分支上修改我的这次新功能,xxxx写了一天了,预计还要2天写完,现在我不想 commit ,但是这个时候 ,在 master 上有了一个紧急的bug ,我肯定是要切换回 master ,然后创建一个 feature 分支 ,GitFlow (按紧急程度或者 一个 HotFix 或者一个 release

如果在 feature 001 上执行 checkout master ,就报错 ,提示未 commit ,我就不想 commit ,这时候可以执行 git stash 这个命令 ,相当于把 当前 Working Dir 工作目录 push 到一个 stash 中。

check 到master ,branch -b  HotFix 101 ,add commit ck master ,merge hf 101 

ck 到 feature001 


git stash list 

 stash@{0}:xxx

git stash apply stash@{0}

git stash pop 
Leon0204

打杂后端程序猿~

讨论区

发表评论
昵称:
评论:
验证