javaee之git

文章详细阐述了Git的使用,包括初始化本地库、创建和切换分支、提交文件、指针移动、合并分支以及解决合并冲突的过程。同时提到了Git的工作流程、忽略文件设置、Gitlab的搭建以及从远程库拉取和推送代码的注意事项,强调了在团队协作中防止冲突的方法。
摘要由CSDN通过智能技术生成

git分支指针移动问题

使用git之前,我们必须git init初始化本地库,才能使用git命令

文件没有提交的时候是没有指针指向的

 还有一点是,文件必须先添加到暂存区在添加到本地库

 在提交到本地库

 

提交完了之后,就会创建一个指针比如上面是master第一次提交,指针指向了30f8956

现在我们创建test分支

Git  branch可以查看当前处于什么分支

很明显可以看到创建分支之后,并且切换到新的分支之后,新的分支指针还是指向了最新提交的文件位置指针

 如果我们在test分支在创建一个文件hello1.txt,添加到暂存区,提交到本地库

我们很明显可以看到test分支上,指针已经移动到最新提交的位置

切换到master分支看看指针在什么位置

 它指向了在这个分支最新提交的位置,而且它看不见在test分支上面创建的文件,也就是下面的hello1.txt文件 

 上面就是整体指针移动过程:每个分支永远指向他最新修改的文件指针

假如两个分支共有一个文件,比如上面的hello.txt文件

现在master去修改了,并且已经提交到了本地库

 它的指针自然是指向最新修改的位置

我们去看一下test分支,它的分支明显是还是指向它最新修改提交的位置。与其他分支无关

每一个分支只能查看到自己所处分支的文件

说一下文件merge的问题

如果你不知道你的文件被修改之后,有没有提交到本地库,那么就git status查看一下当前的文件状态,如果有修改没有被提交,就会爆红

 

现在就是master与test都修改了这个文件 ,合并就会冲突

上面合并的意思就是,当前处于test分支上面,我们就git merge 另外合并分支的名字

 上面很明显就是冲突了,我们可以用git status查看哪一个文件冲突了,然后合并过来之后,多的文件是什么

这里很明显提示,多了m1.txt文件,然后冲突文件是hello.txt,我们直接去修改

这里冲突文件,整体是长下面这个样子

 上面特殊符号可以全部删除

这样就解决冲突了 

一张图说明git 

 分支之间的操作

这个 框里面的linux命令都可以用

操作开始:

在master分支里面创建了一个hello.txt,并且放入了一些数据进去

这个去查一下日志

问题:当你放入了暂存区,你去查看日志会报错

 一个分支这个指针head永远会指向新提交的文件位置。

 

上面这个解释一下:

head->master 指向最新的提交版本的地址,也就是第三次提交的 hello1.txt

之前还提交过两次hello和两次hello1

现在我做这样一件事儿,我把hello1.txt 恢复第一次提交的版本

下面我们来创建另外一个分支pxx1

当你创建了一个分支之后,这个分支会默认指向这个本地仓库最新修改的文件。

分支创建之后,我现在是pxx这个分支,如果在这个分支我去修改了hello1.txt

 然后我们去master分支

两个分支内容明显不一致

下面进行一个分支合并

我们要让这两个文件内容一直,就是helllo1.txt的内容

 上面就是把pxx分支合并到master上面

这里pxx改过,master没动,所以,直接会把pxx覆盖过去

但是我们如果把master分支改动呢

下面就是这两个文件都走了改动,并且提交到了本地库

 这个时候因为文件都做了改动,所以会造成冲突

 我们要去修改如下这个文件

 

 上面就已经把pxx中文件内容给合并过来了

Git团队协作机制

 

下面说一下git的工作流程

Github远程库操作  

 自己去注册个账号使用

 

注意现在这里要用token密码登录 

讲一下如何从github上面clone一个项目下来

 团队协作往一个库推送代码需要注意的问题 

比如我是之前是pxx520pxx创建这个远程库,那么我来推送当来是没有问题的,那么如果换一个用户来向我这个库进行推送可以吗?肯定不是说,只要是一个用户来推送都是可以。这里如下操作

好像不管从本地文件什么位置进行push都可以上传到某个库里面

只不过如果我们从这个远程库中添加了一个collaborators合作者,那么就会在合作者远程的仓库看到我们添加者的这个远程库,并且可以上传代码

下面说一下关于文件从远程仓库push的问题

从仓库push ,很容易造成文件冲突问题,也就是说如果你在仓库改动了某个文件,又在本地库改动某个文件,在进行push的时候是肯定会造成问题的

IDEA集成git

 

这个文件是已经创建好的 

下面去写一个git.ignore,这里面写上我们要忽略上传的文件后缀

大体内容如下

# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see
http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml

 

文件的 

后缀名必须叫.ignore

搭建自己的代码托管平台gitlab 

 先克隆一台虚拟机出来

 下面修改一下ip与主机地址

去参考一下e\linux这是我资料存放的地方

这里贴一篇文章

centos修改固定IP

下面去Windows下面配置一把

IP与主机名的一个映射

 下面我们写一个shell脚本来执行这个安装程序

gitlab-install.sh

sudo rpm -ivh /opt/module/gitlab-ce-13.10.2-ce.0.e17.x86_64.rpm
sudo yum install -y curl policycoreutils-python openssh-server cronie
sudo lokkit -s http -s ssh
sudo yum install -y postfix
sudo service postfix start

sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-

ce/script.rpm.sh | sudo bash
#这段脚本可以不要,因为我们已经下载了rpm包
sudo EXTERNAL URL="http://gitlab.example.com" yum -y install gitlab-ce

rpm -e MySQL-server-5.6.25-1.el6.x86_64 --nodeps

在安装中会出现如下问题

软件包在安装过程中出现冲突

 服务启动问题出错

默认创建一个root账户,我们需要自定义密码 

关于文件各个分支合并单独文件的问题

先来说一下各个分支之间的一个整体合并,比如在test这个库下面,我们创建一个A分支,并且给它两个文件,一个d1.txt,一个d2.txt

下面把上面都创建一下

遇到一个问题

其实就是当前库没有任何提交,主分支还没有创建出来,那我们要去先创建一个文件,提交到暂存区然后提交本地库,我们先来看一下git的初始状态

有一个文件当前库,没有被追踪也没有被提交

那我吧这个文件删了,因为这个不是我要的

 

删了之后提示没有提交

 

上面就是创建在pxx1这个本地库上面创建一个master分支

下面我们实际业务操作

我们先来创建一个A分支

 

 A分支第一次的指向是主分支第一次提交的指针

那现在有一个问题是如果主分支又提交了指针,那么A分支的指针会跟着改变吗?明确说,不会,因为其实就是说这里是给主分支A一个指向初始指向,并没有其他的,不信,我们来测试一下,比如我们把master1这个文件在用master分支给改变一下

上面我们执行了三次提交,A还是在初始位置。

那么现在我切换一下分支,比如切到A这个分支

他还是停留在第一次文件停留的版本,也就是分支之间的操作不会影响你当前的指针位置

现在还是回到我们两个分支合并上面来讲

这里在来说一下分支合并

我创建一个pxx1分支,然后下面创建两个文件 p1.txt p2.txt

这个库目前的指针指向了pxx1,它创建了一个文本,p1.txt,内容如下:

 下面再来创建一个分支pxx2,它可以去处理的所有文件,只不过指针不同嘛

提交暂存区,提交本地库

 

上面值得注意的就是,这也是分支操作文件的关键,我们虽然不同的分支都是操作同一个文件,但是他们把内容指针指向的都不一样,比如pxx1->84db7d9,也就是pxx1第一床创建px1.txt,然后现在是pxx2又去改变了pxx1.txt文件,他指向了pxx2->93c847,所以两个分支的pxx1.txt内容并不一样

下面我们把pxx1当做主分支,让pxx2去合并当pxx1上面,也就是把pxx2开发的新功能提交过去,当下如果直接合并,是不会提示冲突的,因为只是pxx2修改了,ppxx1没动

下面我们切换到pxx1上面,然后让pxx2过来

 

这个时候指针就都指向了同一个修改点。

在我们实际业务开发中,我们把主体开发项目用一个master分支保存,然后我们弄几个副本分支去开发不一样的功能。

当我们想要把这个功能放到主分支上去的时候,我们直接在主分支merge副本分支就可以l了。这个时候副本的所有修改都会到主分支里面。

说一下项目推送push

一般我们会往github与gitee上面进行推送,先来说一下如果在github上面通过token登录保存到IEDA里面我们怎么去获得令牌,点击旁边的generate就能进入下面的页面

GitHub老是会因为网络的问题出现push不上去,这里我们说一下gitee,国内的托管平台

当我们在客户端操作的时候,最好做如下步骤

首先,我们先git pull origin master我们先pill下来远程库,他只会自动给我们Merge文件,而且都是当前分支最新版本提交的,我们先pull的原因也是为了必变push冲突问题,也就是文件不一致,我们无法上传的,我们只有解决了本地与远程的conflict冲突,才能push 

我们push的地址origin可以通过下面定义

我们可以定义多个不同的origin地址,以便进行不同的git地址推送。注意新增一个文件或者修改一个文件,必须先提交暂存区,在提交本地库,然后在push

针对于IDEA里面的操作就是,下面我们记得可以先pull一下拿到最新版本

 下面这个可以看提交状态

可以在下面的位置创建新的分支

远程修改文件文件之后,我们本地先pull出现了冲突的问题 

这个时候,比如出现了一个问题的是 我们在远程仓库修改了readme.md文件,然后本地没有动,还是之前,那么pull的时候就会出现一个问题。文件不一样的问题,那么这个时候,我们按照如下方式来做

右键出现了冲突的文件,然后把他们隐藏起来

 隐藏起来了,就表示这个文件没了,没了之后在pull就没有问题了

如果我们想要源文件,并且去解决冲突,可以如下

 我们打开冲突然后解决

好了,祝大家早安午安晚安。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值