Git

Git

码云git大全/下载/教程/常用命令

https://gitee.com/all-about-git

git在线练习

https://oschina.gitee.io/learn-git-branching/

git是一个分布式版本控制系统,每个人都拥有全部的代码,不会因为服务器损坏或者网络问题造成无法工作的情况

git和svn的区别,git是分布式的,svn是集中式的版本控制系统,Git可以直接看到更新了哪些代码和文件

Git是目前世界上最先进的版本控制系统

Git Bash

使用linux的命令风格操作git

基本的linux命令

cd 切换目录
pwd 显示当前路径
clear 清空屏幕
ls 列出当前文件夹下的所有文件
touch 新建文件 例如:touch index.js
rm 删除文件 例如:touch index.js
mkdir 创建文件夹
rm -r 删除文件夹
mv 移动文件 例如:mv index.html 123
history 查看历史命令

Git配置

系统配置文件所在目录 Git安装目录/etc/gitconfig
本地配置文件所在目录 C:\Users\用户名\ .gitconfig

git config -l 查看所有配置
git config --system --list 查看系统配置
git config --global --list 查看本地配置

git config --global user.name "yinmk" 配置用户名
git config --global user.email "ymk150@outlook.com" 配置邮箱

Git基本理论

工作区域

git本地有三个工作区域:工作目录(working directory)/暂存区(stage(Index))/资源库(history),如果再加上远程的git仓库(remote directory),就可以分为四个工作区域.

mark

  • workspace 工作区 平时存放代码的地方
  • stage(Index) 暂存区 用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • repository 仓库区 (或本地仓库),就是安全存放书记的位置,这里面有你提交到所有版本的数据.其中head指向最新放入仓库的版本.
  • remote 远程仓库 代码托管的服务器,可以简单的认为是你项目中的一台电脑用于远程数据交换 如:github/gitee

Git工作流程

1.在工作目录中添加/修改文件
2.将需要进行版本管理的文件放入暂存区域
3.将暂存区的文件提交到git仓库
因此,Git管理的文件有三种状态:已修改(modified) 已暂存(staged) 已提交(committed)

Git项目搭建

日常操作需要记住的六个命令

mark

  • add 从工作目录add到暂存区
  • commit 从暂存区提交到本地仓库
  • push 从本地仓库推送到远程仓库

初始化项目

**第一种:**在需要版本控制的文件夹下使用git bash命令初始化仓库,会自动在文件夹下生成.git隐藏文件夹

git init

**第二种:**克隆一个远程仓库到本地

git clone https://gitee.com/y_project/RuoYi.git

Git文件操作

文件的4种状态

  • untracked 未跟踪 此文件在文件夹中,但是并未加入到Git库,不参与版本控制,通过git add 状态变为staged
  • unmodify 文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件有两种去处,如果它被修改,则变为modified,如果使用git rm移出版本库,则成为 untracked文件
  • modified 文件已修改,仅仅是修改,并未进行其它的操作,这个文件也有两个去处,通过git add可以进入staged状态,使用git checkout则丢弃修改过,返回到unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改
  • staged 暂存状态,执行git commit则将修改同步到库中,此时库中的文件和本地文件又变未一致,文件为unmodify状态,执行git reset Head filename取消暂存,文件状态改为modified

常见命令

git status 查看文件状态
git add . 将所有文件放入暂存区
git commit -m [message 注释内容]  将文件放入本地仓库

忽略文件

有时我们不想把某些文件纳入版本控制,比如数据库文件,临时文件,设计文件等,在主目录下新建.gitignore文件,此文件有如下规则

# 为注释 
*.txt #忽略所有txt文件
!lib.txt #但是lib.txt除外
/temp 
bulild/
doc/*.txt #忽略doc目录下的所有txt文件

Java常用的忽略文件配置

### Java template
*.class

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff:
.idea/workspace.xml
.idea/tasks.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml

# Sensitive or high-churn files:
.idea/dataSources.ids
.idea/dataSources.xml
.idea/dataSources.local.xml
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml

# Gradle:
.idea/gradle.xml
.idea/

# Mongo Explorer plugin:
.idea/mongoSettings.xml

## File-based project format:
*.iws

## Plugin-specific files:

# IntelliJ
/out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
### Windows template
# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msm
*.msp

# Windows shortcuts
*.lnk
### Maven template
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# ignore eclipse files
.project
.classpath
.settings
.metadata

.svn

使用码云

Git远程仓库一般有三种: github gitee或者公司自建的gitlab服务器

设置本机绑定ssh公钥,实现免密码登录

进入C:\Users\用户名\.ssh 
ssh-keygen -t rsa 使用git bash执行此命令就可以使用rsa加密方式生产公钥
生成之后就会产生两个文件
进入https://gitee.com/profile/sshkeys
将id_rsa.pub中的密钥粘贴进去

IDEA使用git

现有项目

1.在远程创建仓库
2.将远程仓库的文件clone下来,全部拷贝到现有项目中

分支

分支就是科幻电影里的平行宇宙,如果两个宇宙不互相干扰那对现在的你来说也不受影响,不过在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了

多个分支如果并行执行,代码不冲突,同时存在多个版本

在代码合并时,如果发生了冲突,则需要协商保留其中一个人提交的文件

mark

Git分支命令

git branch 查看所有分支
git branch -r 查看远程的分支
git branch dev 新建一个名为dev的分支 但是依然留在当前分支
git checkout -b dev 新建一个名为dev的分支,并切换到该分支
git merge dev 合并名为dev的分支到当前分支
git branch -d dev 删除名为dev的分支
git push origin --delete dev 删除远程的名为dev的分支

master分支应该保证非常稳定,用于发布新版本,一般情况下不允许在上面工作,工作中一般情况下在新建的dev分支上进行,工作完成之后,如果要发布到线上,或者dev分支代码稳定后,才可以合并到主分支上来

Git工作流

集中式工作流

中央集中式工作流与svn相似,所有人都围绕着中央仓库进行协同开发

1.首先有人初始化中央仓库
2.所有人克隆中央仓库
3.第一个人进行开发,提交并推送代码
4.第二个人需要先把第一个人的代码pull下来合并之后(更新)再进行提交

功能分支工作流

为了保证master分支始终是可以正常运行的,开发工作不在主干分支(master)上进行,创建功能对应的分支进行开发,开发完成之后在开发分支上进行测试,测试通过之后再合并到主干分支,合并完成之后,开发分支会自动删除

GitFlow工作流(常用)

在实际企业开发中通常使用GitFlow工作流
核心要点:Gitflow工作流在开发过程中一定要保证Master分支不被污染,所有的开发工作必须在Dev分支上进行,只有Release分支才能合并到Master分支

mark

GitFlow工作流定义了一个围绕项目发布的严格分支模型,虽然比功能分支工作流复杂几分,但是提供了一个健壮的用于管理大型项目的框架

工作方式

开发分支

mark

1.基于Master分支创建Dev分支
2.基于Dev分支创建功能分支(Feature)进行开发
3.功能开发完成之后将代码合并到Dev分支

发布分支

mark

4.基于Dev分支创建Release分支(预发布版本)
5.预发布版本测试完毕之后,合并到Master分支上线,当完成一个版本的开发之后,就经历了一个里程碑,此时可以为Master分支创建标签(例如:1.0.0-Release)

维护分支

mark

6.在生产中遇到的Bug,直接基于Master创建Hotfix分支,修复完成之后合并到Master分支,完成一个补丁修复之后,需要先创建标签再合并上线(例如:1.0.1-Release)

7.删除仓库中的功能、开发、预发布分支,准备下一个版本的开发

在实际开发中我们也可以省略Feature分支,直接在Dev分支上进行功能开发,这样也可以达到相同的效果(Master分支不被污染)

Forking工作流

多用于巨型跨国开源项目