学习Git

基本流程

从本地文件夹新建一个git项目

git help 命令 #可以看相关命令的文档

工作区(写代码)、暂存区(临时存储)、本地库(历史版本)

  1. 本地库初始化

    git init
    #会在文件夹中生成一个隐藏的.git文件
    
  2. 设置签名(为了区分开发人员)

    #项目级别/仓库级别(会配置到.git/config)
    git config user.name ***
    
    git config user.email ***@***
    #系统用户级别(~/.gitconfig)
    git config --global user.name ***
    
    git config --global user.email ***@***
    

    项目级别优先级大于系统用户级别

  3. 查看当前(工作区、暂存区)状态

    git status
    
  4. 添加到暂存区(移除也有)

    git add ***
    
    #移除
    git rm --cached ***
    
  5. 从暂存区提交到本地库

    git commit ***
    
    #这时我们需要在自动跳转的vim中写一下这次提交的缘由及操作等
    #也可以这样
    git commit -m "***" ***
    

版本记录等问题

  1. 查看版本记录

    #显示标准规格
    git log
    #以一种漂亮的方式展示,一行
    git log --pretty=oneline
    #显示一行,但哈希值只显示一部分
    git log --oneline #只显示后面的版本
    #会多显示当前版本移到其他版本需要的步数HEAD@{数字}
    git reflog
    

    多屏显示时:空格向下翻页、b 向上翻页、q退出

  2. 版本前进后退

    #基于索引值操作(重要)(后面是哈希值,一部分的也可以)
    git reset --hard *** #前进后退都可以
    #使用^符号(只能后退)(后退多步就写多个^)
    git reset --hard HEAD^
    #使用~符号(只能后退)
    git reset --hard HEAD~数字
    
    #其他操作
    #显示最后几行
    tail -n 数字 文件名
    
  3. reset命令的三个参数

    #soft 仅仅在本地库移动HEAD指针
    
    #mixed 在本地库移动HEAD指针、重置暂存区
    
    #hard 在本地库移动HEAD指针、重置暂存区、重置工作区(重置可以找到删除文件git reset --hard HEAD)
    
  4. 删除文件以及找回

    #删除记录也可以提交到本地库,不可磨灭(可以通过版本号找回);没有提交到本地库是找不回来的
    
    #前提:删除前,文件存在的状态提交到了本地库
    #操作:git reset --hard [指针位置]
    	#删除操作已经提交到本地库:指针位置指向历史记录
    	#删除操作尚未提交到本地库:指针位置使用HEAD
    
  5. 查看文件修改状态(比较文件差异)

    #将工作区中的文件和暂存区进行比较
    git diff 文件名
    
    #将工作区中的文件和本地库历史记录比较
    #git diff [本地库中历史版本] [文件名]
    git diff HEAD 文件名
    #不带文件名比较多个文件
    

分支

在版本控制中,使用多条线同时推进多个任务(git的效率很高)

分支的好处

  • 同时并行推进多个功能开发,提高开发效率
  • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可
  1. 查看所有分支

    git branch -v
    
  2. 创建分支

    git branch [命名]
    
  3. 切换分支

    git checkout [分支名]
    
  4. 合并分支

    #第一步:切换到接受修改的分支(被合并,增加新内容)上(如某某合并到master上,切换到master)
    #第二步:执行merge命令
    git merge [另一个分支名]
    
  5. 合并冲突问题的表现(当两个分支修改了同一行内容时,git会把决定权交给操作者)(后面会出现MERGING说明是合并状态)

    #文件中修改处带HEAD的是当前分支内容
    #另外一个相同的修改处会显示分支名
    

    冲突的解决,就是操作者自己编辑到自己满意的地步

    git add [文件名] #标记为已解决
    
    git commit -m "日志信息" #结束合并状态
    #此时的commit一定不能带具体的文件名
    

基本原理

Hash算法

git底层采用的是SHA-1算法

#原始文件以及网络传输后的目标文件都通过SHA-1算法得到的结果不同的话,可以确定目标文件有损坏

git就是靠这种机制来从根本上保证数据完整性的

数据存储机制

  • 当前版本的某个文件如果与上一个版本的同一个文件相同(没有做出修改的话),会有当前版本的会有一个指针指向上一个版本(不是复制),这个就是快照流
  • 所有的文件会构成一个树对象,包括这个树的大小以及具体的哈希值;然后提交对象里面又包括这个树对象
  • 通过各个版本之间的父子关系来建立历史记录
  • git中两个分支都是指向同一个版本号(在两个都没修改的时候);谁修改了,谁就会指向下一个版本号;都做了不同的修改就会指向两个版本号同级的两个不同的版本号,它们的父对象是同一个

远程仓库

首先要有一个github(或gitee)账号

  1. 在github上创建一个仓库,建议命名和该文件名相同

  2. 查看存储的远程仓库的地址

    git remote -v
    
  3. 存储远程仓库地址并起别名

    git remote add [别名] [地址]
    
  4. 推送

    git push [地址] [分支]
    
  5. 克隆

    git clone [地址]
    #完整的把远程库下载到本地
    #创建origin远程地址别名
    #初始化本地库
    
  6. 克隆过来文件后修改但是无法push,需要仓库管理员邀请(可以在仓库的管理或者设置中找到)

  7. 远程库修改的拉取

    #不会修改工作区文件,只是下载到本地
    git fetch [地址] [远程分支]
    #如果想要看到获得的内容
    git checkout [地址]/[远程分支] #切换到下载的master分支上
    #然后就是合并了
    git merge [地址]/[远程分支]
    
    #pull相当于fetch+merge
    git pull [地址] [远程分支]
    

    问题:
    请添加图片描述
    当推送是出现这个问题,就是远程库里面有的东西,本地库里没有
    这个时候需要git pull --rebase [地址] master(为什么写–rebase呢?因为不写的话,git log 会发现会自动生成merge commit;加了这个后就不会再生成了)

  8. 协同开发时冲突问题

    #两人对同一个文件做出修改后,先推送的成功,后推送的失败(因为远程仓库的修改没有拉取,就是上面的问题)
    
    #拉取下来,修改到满意后,再推送就行了(就是分支冲突的解决办法)
    
  9. 跨团队协作

    #该团队点击另一个团队某个仓库的fork,把该仓库复制过来
    #然后就是随意的clone和push(因为是自己的仓库)
    #当修改完成后,点击自己仓库的Pull request,然后点击New pull request(新建***),把修改后的发给另一个团队就行
    #然后另一个团队就点击自己该仓库的Pull request;在里面看到别人发的修改后的代码了(选项卡),没问题的话,点击Merge pull request合并就行了;后面也有合并的日志填写操作
    #然后两个团队可以在这里面留言(相当于聊天了)
    #然后将远程库修改拉取到本地就行了
    
  10. SSH免密登录

    #查看是否配置过密钥
    cd ~/.ssh
    #进行创建ssh
    ssh-keygen -t rsa -C '邮箱'
    #查看生成的公钥(也可以在C盘中找)
    cat ~/.ssh/id_rsa.pub
    #然后复制公钥到gitee或者github中在设置中找到ssh配置中配置即可
    #最后可验证是否成功
    ssh -T gitee@gitee.com
    ssh -T git@github.com
    
  11. 修改.gitignore后生效

    git rm -r --cached .  #清除缓存
    git add .
    git commit -m "update .gitignore" #提交和注释
    git push origin master #可选
    

idea集成git

首先,需要有一个git的忽略文件(git.ignore);可以手动创建、也可以命令行创建、还可以在创建仓库时,选中按钮创建。然后里面写上一些相应的配置(下面是例子)

# Compiled class file
*.class

# Eclipse
.project
.classpath
.settings/

# Intellij
*.ipr
*.iml
*.iws
.idea/

# Maven
target/

# Gradle
build
.gradle

# Log file
*.log
log/

# out
**/out/

# Mac
.DS_Store

# others
*.jar
*.war
*.zip
*.tar
*.tar.gz
*.pid
*.orig
temp/

然后在.gitconfig文件中引入

[core]
	excludesfile = 路径/git.ignore #这里用的是/

创建完一个项目后

打开设置,找到其中的Version Control,点击Git;在里面定位以及安装好的Git(目前idea有自动定位)

之后在idea的上方导航栏可以看到Git

在里面有一个选项Create Git Repository,点击后选中一个项目,该项目就会被git托管

如果在此之后看到pom.xml文件爆红,就是没有在暂存区的缘故

解决:右键pom.xml文件点击Git,点击add(然后就会变成绿色,添加到暂存区了)

之后无论是添加新文件后爆红还是怎么的,都是右键点击Git(里面可以add、也可以commit)

当commit完成后,都会变成黑色或者白色(视背景决定)

蓝色的是修改后的

其他

  1. 在idea上拉取git项目;在创建新项目时,点击Project from Version Control中的Git;之后填写git项目地址以及放到本地的地址就行了
  2. 咱的推送可以在commit的时候一起,也可以之后右键Git,在Repository中点击Push(很多地方都有)
  3. 关于版本号以及切换分支等问题,在idea的最下方的栏目中有
    1. 切换版本选中一个后右键点击Checkout Revision “”
    2. 创建分支GIt -> Repository -> Branches(idea右下角也可以)(切换分支在右下角就行了)
    3. 正常合并是按钮Merge into Current
    4. 冲突合并(合并前,两个分支都有修改),之后需要自己手动

连接github

一般idea的配置中可以找到,如果没有在插件中下载

在配置(Version Control下)中点击+号登陆【用账号密码登陆非常慢】【可以用token登陆,在github的settings中的Developer settings下的Personal access tokens中生成一个token(有权限选择)】

然后在idea上方Git中可以看到如何分享项目到github中

最后,不论是push、pull都可以在Git选项中看到,clone是在创建新项目的时候使用的

git工作流

  1. 集中式工作流(基本不用)
  2. GitFlow工作流
  3. Forking工作流

分支类型

master分支、develop分支、feature分支、release分支、hotfix分支

gitlab服务器搭建

gitlab的版本要与centOS的匹配

  1. 首先自然是进入自己的Linux系统中(CentOS 7),可以的话,需要配置一下网卡、修改ip地址、修改网关
#1.修改IP地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
#例子
DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0
BOOTPROTO=static #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态指定的 ip地址,通过dhcp协议获得的ip地址,通过bootp协议获得的ip地址
BROADCAST=192.168.0.255 #对应的子网广播地址
HWADDR=00:07:E9:05:E8:B4 #对应的网卡物理地址
IPADDR=12.168.1.2 #如果设置网卡获得 ip地址的方式为静态指定,此字段就指定了网卡对应的ip地址
IPV6INIT=no
IPV6_AUTOCONF=no
NETMASK=255.255.255.0 #网卡对应的网络掩码
NETWORK=192.168.1.0 #网卡对应的网络地址
ONBOOT=yes #系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备

#2.修改网关
vi /etc/sysconfig/network
#例子
NETWORKING=yes(表示系统是否使用网络,一般设置为yes。如果设为no,则不能使用网络,而且很多系统服务程序将无法启动)
HOSTNAME=centos(设置本机的主机名,这里设置的主机名要和/etc/hosts中设置的主机名对应)
GATEWAY=192.168.1.1(设置本机连接的网关的IP地址。例如,网关为10.0.0.2)
DNS1=192.168.1.1(=====#3.CentOS 修改DNS
vi /etc/resolv.conf
#例子
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器

#4.重新启动网络配置
service network restart #或者
/etc/init.d/network restart

配置之后,需要将gitlab的压缩包(例如gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm)(ee是企业版、ce是社区版)上传到虚拟机中(这是一种方式,命令行中下载可能会很慢)

  1. 一般会移动到/opt目录下,之后就是安装了,由于已经下载,所以只用安装即可
sudo rpm -ivh/opt/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm
sudo yum install -y curl policycoreutils-python openssh-server cronie
sudo lokkit -s http -s ssh
sudo yum install postfix
sudo service postfix start
sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.example.com"yum-y install gitlab-ce

然后重启(远程是reboot)

  1. gitlab服务操作
#初始化配置gitlab(有些漫长)
gitlab-ctl reconfigure

#启动gitlab服务
gitlab-ctl start

#停止服务
gitlab-ctl stop
  1. 然后用设置好的ip地址就可以在浏览器中进入gitlab首页了
#如果进入首页失败,则先关闭防火墙
service firewalld stop
#这个时候应该就可以了
  1. 之后就是设置密码之类的了
  2. gitlab的操作和github的操作大同小异
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值