Git集成Gitlab,Github,Gitee
Git
一、Git概述
Git大家都听过,是一个免费的、开源的分布式控制系统。
1. 版本控制工具
版本控制工具分类两类:集中式版本控制工具和分布式版本控制工具
-
集中式版本控制工具
例如SVN、CVS等工具,都包含一个单一的集中管理的服务器,保存了所有文件的修订版本。协同工作的人们通过客户端连接到服务器,取出最新的文件并同步更新。
优点:
- 每个人都可以在一定程度上看到项目中的其他人正在做些什 么。
- 管理员也可以轻松掌控每个开发者的权限
- 管理一个集中化的版本控制系统
缺点:服务器宕机,就无法协同工作。
-
分布式版本控制工具
例如Git等工具, 服务端保存了最新版本的代码,客户端想协同工作首先要将代码仓库完整地镜像下来,并可以在本地进行版本管理并同步更新。
优点:
- 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
- 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
2. Git机制
工作代码→通过添加add,到暂存区,可以修改→通过提交commit,存储到本地库,无法更改
3. Git和代码托管中心
代码托管中心,即远程库是基于网络服务器的远程代码仓库。主要分为两类:
- 基于局域网:GitLab
- 基于互联网:
- GitHub
- Gitee
二、Git安装
官网地址: https://git-scm.com/
安装:
双击Git-2.31.1-64-bit.exe
→ 同意协议
→ 配置安装位置(非中文,不包含空格目录)
→ 选择Git配置
→ 确认Git安装目录名称 → 选择Git默认编辑器
→ 选择默认分支名设置
→ 是否修改Git环境变量
→ 选择客户端联机协议OpenSSL
→ 配置Git 文件的行换行符,选择第一个自动转换(Windows 使用 CRLF,Linux 使用 LF)
→ 选择 Git 终端类型,选择默认的 Git Bash 终端
→ 选择 pull 合并的模式,选择默认fast-forward or merge
→ 选择 Git 的凭据管理器, 保存登录状态
→ 其他配置
→ 选择实验室功能,技术还不成熟,有已知的 bug,不要勾选,然后点击右下角的 Install 按钮,开始安装 Git
安装成功,打开Git Bash,输入Git --version
查看Git版本信息。
三、Git常用命令
常用命令
命令 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户邮箱 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m "日志信息" 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
1. 设置用户签名
$ git config --global user.name Vicstal
$ git config --global user.email 2428991957@qq.com
$ cat ~/.gitconfig
[user]
name = Vicstal
email = 2428991957@qq.com
Git 首次安装必须设置一下用户签名,否则无法提交代码。
并且这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任 何关系。
2. git-init-初始化本地库
在本地库项目文件夹路径下,初始化本地库
Sang@LAPTOP-CF4TUDVT MINGW64 /d/codeProject/HelloGit (master)
$ git init
Initialized empty Git repository in D:/codeProject/HelloGit/.git/
3. git status-查看本地库状态
Sang@LAPTOP-CF4TUDVT MINGW64 /d/codeProject/HelloGit (master)
$ git status
On branch master 当前分支名
No commits yet 提交的文件
Untracked files: 未被追踪的文件
(use "git add <file>..." to include in what will be committed)
hello.txt
nothing to commit (create/copy files and use "git add" to track)
4. git add-添加暂存区
让文件可以被追踪到。
命令 | 作用 |
---|---|
git add 文件名 | 添加文件到暂存区 |
git rm --cached 文件名 | 删除暂存区文件 |
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt. 自动转换换行符警告
The file will have its original line endings in your working directory
$ git rm --cached hello.txt
5. git commit-提交本地库
命令 | 作用 |
---|---|
git commit -m "版本信息" 文件名 | 将暂存区的文件提交到本地库 |
git reflog | 查看日志 |
git log | 查看详细日志 |
$ git commit -m "firstCommit" hello.txt
$ git status
On branch master
nothing to commit, working tree clean
$ git reflog
6ab51f3 (HEAD -> master) HEAD@{0}: commit (initial): firstCommit
$ git log
commit 6ab51f358830f2df4a3abb0412b917e3840c7732 (HEAD -> master)
Author: Vicstal <2428991957@qq.com>
Date: Wed Jun 1 19:27:53 2022 +0800
firstCommit
6. 更新文件
$ vim hello.txt
$ git add hello.txt
$ git status
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: hello.txt 可追踪的文件
$ git commit -m "v3.0" hello.txt
1 file changed, 1 insertion(+), 1 deletion(-) 1处修改 1行新增 1行删除
$ git reflog
685fd80 (HEAD -> master) HEAD@{0}: commit: v3.0 现在指向3.0版本
c229daa HEAD@{1}: commit: v2.0
6ab51f3 HEAD@{2}: commit (initial): firstCommit
7. git reset-版本穿梭
命令 | 作用 |
---|---|
git reset --hard 7位版本号 | 版本穿梭 |
$ git reset --hard c229daa
HEAD is now at c229daa v2.0
四、Git分支
1. Git分支
项目的版本控制中,可以有多个分支应对不同种任务。分支从主线中分离开来,不会影响主线运行。
优点:
- 同时并行推进多个功能开发,提高开发效率
- 分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
2. 常用命令
命令 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 将指定分支合并到当前分支上 |
3. 合并分支
$ git branch hot-fix
$ git branch -v
hot-fix 6436445 hot-fix v1.0
* master 685fd80 v3.0
$ git checkout hot-fix
$ vim hello.txt
$ git add hello.txt
$ git commit "hot-fix v1.0" hello.txt
$ git checkout master
$ git merge hot-fix
Updating 685fd80..6436445
Fast-forward
hello.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
4. 合并分支(代码冲突)
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替 我们决定使用哪一个。必须人为决定新代码内容。
合并冲突问题:
#hot-fix分支的hello.txt
hello, git 55555
hello, git
#master分支的hello.txt
hello, git
hello, git 66666
#在master分支下合并,失败
$ git merge hot-fix
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
Sang@LAPTOP-CF4TUDVT MINGW64 /d/codeProject/HelloGit (master|MERGING)
冲突文件:
<<<<<<< HEAD
hello, git 555555
hello, git
=======
hello, git
hello, git 6666666
>>>>>>> hot-fix
解决方法:
-
自己修改冲突文件,保留需要的代码
hello, git 555555 hello, git 6666666
-
将冲突文件添加到暂存区
$ git add hello.txt
-
执行提交(注意:此时使用 git commit 命令时不能带文件名)
git commit -m "v5.0"
分支原理
- master、hot-fix 其实都是指向具体版本记录的指针。所以创建分支的本质就是多创建一个指针
- 当前所在的分支,其实是由 HEAD 决定的。
- HEAD 如果指向 master,那么我们现在就在 master 分支上。 HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。
五、Git代码托管中心
1. 团队协作
通过pull, push, clone更新获取代码
2. 跨团队协作
跨团队通过fork项目 ➡修改代码 ➡ push提交 ➡ 发送pull 请求 ➡ 当前团队通过merge合并代码
六、GitHub
远程仓库操作
命令 | 作用 |
---|---|
git remote -v | 查看远程仓库别名 |
git remote add 别名 远程地址 | 为远程仓库起别名 |
git push 别名 分支 | 将本地分支推送到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程仓库地址别名 远程分支名 | 将远程仓库对于最新内容拉下来后与本地分支合并 |
1. 创建远程仓库别名
为使用的远程仓库创建别名,便于方便和管理
命令 | 作用 |
---|---|
git remote add 别名 远程地址 | 为远程仓库起别名 |
$ git remote add HelloGit https://github.com/Vicstal/HelloGit.git
$ git remote -v
HelloGit https://github.com/Vicstal/HelloGit.git (fetch) 拉取别名
HelloGit https://github.com/Vicstal/HelloGit.git (push) 推送别名
2. git push-推送本地分支到远程仓库
命令 | 作用 |
---|---|
git push 别名/地址 分支 | 将本地分支推送到远程仓库 |
需要登录GitHub账户
Sang@LAPTOP-CF4TUDVT MINGW64 /d/codeProject/HelloGit (master)
$ git push HelloGit master
Enumerating objects: 21, done.
Counting objects: 100% (21/21), done.
Delta compression using up to 16 threads
Compressing objects: 100% (14/14), done.
Writing objects: 100% (21/21), 1.49 KiB | 508.00 KiB/s, done.
Total 21 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (7/7), done.
To https://github.com/Vicstal/HelloGit.git
* [new branch] master -> master
3. git pull-拉取远程仓库到本地分支
拉取远程仓库最新分支到本地
命令 | 作用 |
---|---|
git pull 别名 分支名 | 将远程仓库对于最新内容拉下来后与本地分支合并 |
$ git pull HelloGit master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 641 bytes | 80.00 KiB/s, done.
From https://github.com/Vicstal/HelloGit
* branch master -> FETCH_HEAD
a66faf6..0879bbf master -> HelloGit/master
Updating a66faf6..0879bbf
Fast-forward
hello.txt | 1 +
1 file changed, 1 insertion(+)
4. git clone-克隆远程仓库
命令 | 作用 |
---|---|
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
无需登录,clone 会做如下操作:
- 拉取代码
- 初始化本地仓库
- 创建别名
$ git clone https://github.com/Vicstal/HelloGit.git
Cloning into 'HelloGit'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 24 (delta 8), reused 20 (delta 7), pack-reused 0
Receiving objects: 100% (24/24), done.
Resolving deltas: 100% (8/8), done.
#clone自动创建别名
Sang@LAPTOP-CF4TUDVT MINGW64 /d/codeProject/HelloGit2/HelloGit (master)
$ git remote -v
origin https://github.com/Vicstal/HelloGit.git (fetch)
origin https://github.com/Vicstal/HelloGit.git (push)
5. 本地团队合作
模拟其他团队操作仓库
5.1 克隆分支
# 在文件夹下clone项目
Sang@LAPTOP-CF4TUDVT MINGW64 /d/codeProject/HelloGit2 (master)
$ git clone https://github.com/Vicstal/HelloGit.git
#进入HelloGit2/HelloGit克隆的项目里
#在windows的凭证管理器中删除GitHub账号名
5.2 邀请加入团队
Github库
➡ settings ➡ Manage access ➡ Invite a collaborator
➡ 输入成员名
➡ 复制邀请函Pending Invite ➡ 团队成员接受邀请 Accept invitation
5.3 拉取推送分支
成功之后可以在 atguigulinghuchong 这个账号上看到 git-Test 的远程仓库。并可以推送到远程仓库:
$ git push HelloGit master
Logon failed, use ctrl+c to cancel basic credential prompt.
Username for 'https://github.com': atguigulinghuchong
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 309 bytes | 309.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/atguiguyueyue/git-shTest.git
7cb4d02..5dabe6b master -> master
$ git pull HelloGit master
6. 跨团队合作
6.1 fork分支
跨团队要想合作,首相fork远程仓库到本地库
在本地修改代码,并推送
$ git pull git-shTest master
$ vim hello.py
$ git add hello.py
$ git commit
$ git push git-shTest master
6.2 跨团队merge分支
- 其他团队提交pull请求
- 自己他团队merge请求
7. SSH免密登录
- 生成SSH:如果已有ssh,在C:/user/用户名下删除.ssh, 进入bash
# 运行命令生成.ssh 秘钥目录
$ ssh-keygen -t rsa -C 远程仓库github名
$ 三次回车
# 打开id_rsa.pub,复制
-
添加SSH
复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像 ➡ Settings ➡ SSH and GPG keys ➡ new SSH key ➡ Title:随意, Key:复制的公钥 ➡ Add SSH Key
-
免密拉取,推送分支
git push/pull SSH连接 分支名
七、Idea集成Git
1. 配置Git忽略文件
在使用idea集成git时,设置需要忽略的文件,这些文件不参与服务器上部署运行,把它们忽略掉能屏蔽IDE工具之间的差异。
-
在C:/Users/用户名下创建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
-
在C:/Users/用户名/.gitconfig 文件中引用忽略配置文件
[user] name = Layne email = Layne@atguigu.com [core] excludesfile = C:/Users/Sang/git.ignore
注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”
2. Idea集成Git
集成Git
settings ➡ 设置Git安装目录
将项目添加到版本控制
➡ VCS ➡ Enabled Version Control Integration
将代码添加到暂存区
代码文件 ➡ 右键 ➡ Git ➡ +Add
将项目添加到暂存区
项目 ➡ 右键 ➡ Git ➡ +Add
将项目添加到本地库
项目 ➡ 右键 ➡ Git ➡ commit Directory
3. 切换版本
- 点击Git
- 点击Log
- 在切换的版本上右键 → checkout Revision 'a40001aa'
4. 创建分支
-
点击new Branch
-
创建新分支
5. 合并分支
- 点击分支按钮
- 点击要合并的分支
- 合并:Merge into current
6. 合并分支——有冲突
-
master合并hot-fix分支
-
自定义冲突
八、GitHub
1. 设置GitHub账号
setting ➡ version control ➡ Github ➡ 点击加号 ➡ 通过token登录github
https://blog.csdn.net/qq_44866828/article/details/118084398
➡通过Github令牌登录
https://blog.csdn.net/qq_44866828/article/details/118084398
2. 将项目分享到Github
底下可以看到推送成功信息
3. Push项目到github
-
点击push箭头
-
点击项目名,define remote
-
改为SSH连接推送项目
-
选择SSH连接的项目,push
注意:
push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致, push 的操作是会被拒绝的。
要想 push 成功,一定要保证本地库的版本要比远程 库的版本高!
因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地 代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地 代码更新到最新以后,然后再修改,提交,推送!
4. Pull项目到本地
5. clone项目
九、Gitee
1. 创建仓库
2. IDEA集成Gitee
-
Idea安装Gitee插件
setttings ➡ Plugins ➡ Gitee ➡ install
-
在idea中登录gitee账号
settings ➡ Log in via Gitee
➡ 登录账号密码
3. push推送到指定仓库中
push代码时,自定义仓库连接到指定位置
4. pull远程项目到本地
Git → Pull到本地
5. 克隆Github项目到Gitee
+➡ 新建仓库 ➡ 已有仓库 ➡ 将Github的Https连接复制过来
更新项目
十、GitLab
开源的用户自建代码托管平台工具,仅支持CentOS7以上系统。官网地址:https://about.gitlab.com/
1. GitLab安装
-
准备好一台CentOS主机,修改Ip地址和主机名
修改ip地址:
vim /etc/sysconfig/network-scripts/ifcfg-ens160
或者直接修改VMWare,修改ip地址
修改主机名:
$ vim /etc/hostname gitlab-server(主机名)
-
配置hosts, 将服务器主机名映射到对应的服务器ip地址
192.168.131.128 gitlab-server
-
安装gitlab
-
在/opt/module文件下上传文件gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
-
在module下创建gitlab-install.sh
sudo rpm -ivh /opt/module/gitlab-ce-13.10.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 -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 sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce
$ chmod +x gitlab-install.sh
-
执行gitlab-install.sh
[root@gitlab-server module]# ./gitlab-install.sh
报错:Errors during downloading metadata for repository ‘AppStream‘
处理:https://blog.csdn.net/xiexingchen_y/article/details/123211959
-
2. Gitlab使用
-
初始化Gitlab服务
[root@gitlab-server module]# gitlab-ctl reconfigure
-
启动Gitlab服务
[root@gitlab-server module]# gitlab-ctl start
3. Gitlab创建远程仓库
-
访问gitlab地址
192.168.131.128:80 gitlab-server (已配置centos主机名和hosts映射)
-
修改root原始密码
-
登录gitlab
user: root password:
4. Push项目到Gitlab
push, 选择 gitlab 远程连接
注意:gitlab 网页上复制过来的连接是:http://gitlab.example.com/root/git-test.git, 需要手动修改为:http://gitlab-server/root/git-test.git