Git---入门+出师-应用宝典(学会工作中基本够用)

文章目录

  • Git历史
  • Git安装
    • 下载
    • 配置文件路径
        • 系统配置文件
        • 个人配置文件
        • 秘钥存放地址
    • Git初始化配置
          • 设置全局名称
          • 设置全局邮箱
          • 查看全局变量
    • 创建远程仓库(Gitee或Gitlab)
  • 至此`git`所需环境全部准备完毕,在彻底使用前需先了解原理
  • Git原理
    • Git本地有三个工作区域∶
    • 文件在这四个区域之间的转换关系如下∶
        • 本地的三个区域确切的说应该是`git`仓库中`HEAD`指向的版本:
    • `git`工作流程:
      • 在本地工作目录中添加、修改文件
      • 将需要进行版本管理的文件放入`暂存区`域;[`.`代表全部文件]
      • 将暂存区域的文件提交到本地`git`仓库
      • 将本地git仓库提交到远程仓库
      • Git工作流程图解
    • 文件状态详解
      • 查看Git文件状态
  • `Git`项目使用
    • 基本使用
    • 忽略提交项目的某些文件(`.gitignore`)
      • 语法
      • 标准`.gitignore`文件示例:
  • 分支
    • 分支相关常用命令
    • 解决冲突
  • `Git`命令补充

Git历史

  • GitLinux之父被迫开发的
  • Linux之父【林纳斯·本纳第克特·托瓦兹(Linus Benedic Torvalds )】 1969、芬兰
  • Git---入门+出师-应用宝典(学会工作中基本够用)_第1张图片
  • Linux公开后,参与开发者过多,1991-2002Linux的代码维护很繁琐,在2002年时商业版的BitKeeper以合作的形式面为为Linux团推提供了BitKeeper这款分布式版本控制系统
  • 因后期Linux社区大佬破解BitKeeper,导致2005LinuxBitKeeper合作结束
  • 所以Linux之父被迫开发了一套版本控制工具,也就是现在的Git,开发时间共用时2周
  • Git是目前世界上最先进的分布式版本控制系统。

Git安装

下载

  • 官网传送门
  • Windows版64位exe安装包(官网直连传送门,点击直接下载)
  • 下载后一路下一步,建议不要安装至C盘(按需选择,默认下一步也不影响使用)

配置文件路径

  • 系统配置文件

    ...\Git\etc\gitconfig
    
  • 个人配置文件

    C:\Users\用户名\.gitconfig
    
  • 秘钥存放地址

    C:\Users\用户名\.ssh
    

Git初始化配置

设置个人全局(--global)配置

  • 设置全局名称
     git config --global user.name "userName"
    
  • 设置全局邮箱
    git config --global user.email "[email protected]"
    
  • 查看全局变量
      git config --list
    

创建远程仓库(Gitee或Gitlab)

  1. 默认码云(Gitee)或自己公司搭建的GitlabGithup国外的,直接放弃

  2. 码云注册账号并登录

  3. 设置本机绑定SSH公钥,实现免密码登录!

    • Windows进入C:\Users\Administratorl\.ssh目录(安装git时自动生成的)

    • macOS进入/Users/nan/.ssh/目录(需要显示隐藏文件夹)

    • 打开git命令窗口输入:

      • # 使用rsa加密算法生成公钥
        ssh-keygen -t rsa
        # 输入命令并回车,后续的提示一路回车
        
    • Git---入门+出师-应用宝典(学会工作中基本够用)_第2张图片

  4. C:\Users\Administratorl\.ssh目录下的id_rsa.pub文件中的内容(公钥信息public key)复制到码云账户
    Git---入门+出师-应用宝典(学会工作中基本够用)_第3张图片

  5. 使用码云创建一个自己的仓库!

    Git---入门+出师-应用宝典(学会工作中基本够用)_第4张图片


至此git所需环境全部准备完毕,在彻底使用前需先了解原理


Git原理

Git的工作区域

Git本地有三个工作区域∶

  • 工作目录(Working Directory )
  • 暂存区(Stage/Index)
  • 资源库(Repository或cit Directory)
  • 加上远程的git仓库(Remote Directory)就可以分为四个工作区域

文件在这四个区域之间的转换关系如下∶

Git---入门+出师-应用宝典(学会工作中基本够用)_第5张图片

  • Workspace:工作区,就是你平时存放项目代码的地方

  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

  • Repository :仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

    本地的三个区域确切的说应该是git仓库中HEAD指向的版本:

Git---入门+出师-应用宝典(学会工作中基本够用)_第6张图片

git工作流程:

  1. 在本地工作目录中添加、修改文件

    # 创建本地文件
    D:/testgit/UserMapper.xml
    # 使用git初始化项目
    git init
    
  2. 将需要进行版本管理的文件放入暂存区域;[.代表全部文件]

    git add .
    
  3. 将暂存区域的文件提交到本地git仓库

    git commit -m "注释"
    
  4. 将本地git仓库提交到远程仓库

    git push
    

因此,git管理的文件有三种状态(不算未加入Git管理的状态:Untracked):

  • 已修改( modified )
  • 已暂存( staged )
  • 已提交(committed)

Git工作流程图解

Git---入门+出师-应用宝典(学会工作中基本够用)_第7张图片

Git---入门+出师-应用宝典(学会工作中基本够用)_第8张图片

文件状态详解

Git管理的文件有4种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

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

查看Git文件状态

  • git status
    

    Git---入门+出师-应用宝典(学会工作中基本够用)_第9张图片

Git项目使用

使用git前先记住5个命令,他们将是最常用、最实用、最基本的命令,非特殊情况基本够用

  1. 初始化本地项目git init
  2. 克隆远程项目git clone ...
  3. 将项目添加到本地暂存区git add .
  4. 将暂存区的项目推送至本地仓库git commit -m "注释"
  5. 将暂存区或本地仓库中的内容推送至远程仓库git push

另外,一定要清楚的区分本地仓库远程仓库概念

  • 本地是本地,远程是远程,他俩是通过追踪的关系来保持同步的
  • 当断网的时候远程仓库不会影响本地仓库的使用,当可以联网的时候他们会通过追踪关系继续同步
  • 提交本地仓库的步骤:git add .—>git commit -m "注释"
  • 提交远程仓库的步骤:git add .—>git push

基本使用

创建本地仓库的方法有两种:

创建全新的仓库

  • 创建全新的仓库,需要用Git管理的项目的根目录执行

  • # 在当前目录新建一个Git代码库
    git init
    
    • 执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面

将本地仓库关联到远程仓库

  • 在拥有本地仓库但为和远程仓库关联的情况下

    • 关联远程仓库

      git remote add origin [email protected]/aaa.git
      
    • 把本地仓库master分支推送到远程

      git push -u origin master
      

克隆远程仓库

  • 将远程服务器上的仓库完全镜像一份至本地!

  • # 克隆一个远程服务器上的项目和它的整个代码历史(版本信息)
    git clone [ur1] [email protected]:djn/gitcode.git
    

忽略提交项目的某些文件(.gitignore)

语法

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

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。

  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,.…})代表可选的字符串等。

  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。

  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。

  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

#为注释
*.txt		#忽略所有.txt结尾的文件,这样的话上传就不会被选中!
!1ib.txt	#但1ib.txt除外
/temp		#仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ 		#忽略bui7d/目录下的所有文件
doc/*.txt	#会忽略 doc/notes.txt但不包括doc/server/arch.txt

标准.gitignore文件示例:

### Intelli IDEA ###
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/bin/

### JAVA ###
*.class
*.log

*.lock
tmp/

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

*velocity. log*

### STS ###
.apt_generated
.factorypath
.springBeans


#rebel
*rebel.xml*

分支

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

一定要区分远程分支以及本地分支

Git---入门+出师-应用宝典(学会工作中基本够用)_第10张图片

分支相关常用命令

# 列出所有本地分支
git branch
 
# 列出所有远程分支
git branch -r
 
# 列出所有本地分支和远程分支
git branch -a
 
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
 
# 新建一个分支,并切换到该分支
git checkout -b [branch]
 
# 新建一个分支,指向指定commit
git branch [branch] [commit]
 
# 新建一个分支,与指定的远程分支建立追踪关系
git branch --track [branch] [remote-branch]
 
# 切换到指定分支,并更新工作区
git checkout [branch-name]
 
# 切换到上一个分支
git checkout -

# 切换分支:
git checkout <name>
或者
git switch <name>

#创建+切换分支:
git checkout -b <name>
或者
git switch -c <name>

# 建立追踪关系,在现有分支与指定的远程分支之间
git branch --set-upstream [branch] [remote-branch]
 
# 合并指定分支到当前分支
git merge [branch]
 
# 选择一个commit,合并进当前分支
git cherry-pick [commit]
 
# 删除分支
git branch -d [branch-name]
 
# 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]

解决冲突

  • 代码冲突后使用git push将报错并提示:

    • Git---入门+出师-应用宝典(学会工作中基本够用)_第11张图片
  • **产生原因:**当远程仓库的某些文件有更新,自己的本地仓库没有及时更新、并且修改了这些文件,此时如果提交这些问件时,本地仓库中这些文件被修改的内容就会和远程仓库产生冲突

  • 解决办法:

    • 自动合并

      • 可以自动合并的情况少,并且即便可以自动合并的代码也不够安全
    • 手动合并

      • 绝大多数的冲突都应该使用手动合并来解决
      • 提交时会提示有哪些文件冲突
      1. push代码发现有如上冲突提示后,先git pull把远程的代码拉取下来,此时bash界面将会提示有哪些文件冲突了

        Git---入门+出师-应用宝典(学会工作中基本够用)_第12张图片

      2. 找到这个文件并打开它

        Git---入门+出师-应用宝典(学会工作中基本够用)_第13张图片

      3. 根据实际需求或者删掉其中的分隔符后,按照正常顺序依次添加到暂存区git add.、提交至本地仓库git commit -m ""、提交至远程仓库git push即可,至此冲突解决

Git命令补充

  • 查看配置清单

    git config -l
    
  • 系统配置

    git config --system --list
    
  • 清屏

    clear
    
  • 查看当前用户配置

    git config --global --list
    
  • 使用git初始化项目

    git init
    
  • 将项目文件添加到暂存区

    git add .
    
  • 将项目文件从暂存区提交到本地仓库

    git commit -m "注释"
    
  • 将项目提交到远程仓库

    git push
    
  • 查看所有分支

    git branch -a
    
  • 切换远程分支

    git checkout -b abc origin/abc
    # 或者
    git switch 
    
  • 切换本地分支

    git checkout <branchName> 或者 git switch <branchName>
    

你可能感兴趣的:(开发工具,JAVA,SoftWare,git,gitlab,分布式版本控制系统)