参考

http://www.cnblogs.com/clsn/p/7929958.html#auto_id_16
https://backlog.com/git-tutorial/cn/intro/intro1_1.html
https://git-scm.com/book/zh/v2

Git安装

yum安装

[root@ ~]# yum install -y git

编译安装

下载地址

https://github.com/git/git/releases

安装依赖

[root@ ~]# yum install -y curl-devel expat-devel gettext-devel  openssl-devel zlib-devel gcc*

上传tar包,编译安装

[root@ ~]# tar -zxf git-2.17.0.tar.gz
[root@ ~]# cd git-2.17.0/
[root@ git-2.17.]# make configure

如果报如图错误,安装qutoconf

[root@ git-2.17.]# yum install -y autoconf

没问题继续

[root@ git-2.17.]# ./configure --prefix=/usr/local
[root@ git-2.17.]# make
[root@ git-2.17.]# make install

配置Git

[root@ ~]# git config --global user.name "wanglan"  #配置Git使用用户
[root@ ~]# git config --global user.email "123456@qq.com" #配置Git使用邮箱
[root@ ~]# git config --global color.ui true #语法高亮
[root@ ~]# git config --list # 查看全局配置
user.name=wanglan
user.email=@qq.com
color.ui=true

配置后生成的配置文件

[root@ ~]# cat .gitconfig
[user]
name = wanglan
email = @qq.com
[color]
ui = true

创建Git仓库

[root@ ~]# mkdir git_data  #创建Git目录
[root@ ~]# cd git_data
[root@ git_data]# git init #初始化Git仓库
Initialized empty Git repository in /root/git_data/.git/
[root@ git_data]# git status #查看工作状态
On branch master #位于master分支上 No commits yet #没有提交的内容 nothing to commit (create/copy files and use "git add" to track)

创建文件

[root@ git_data]# touch README
[root@ git_data]# git status
On branch master No commits yet Untracked files:
(use "git add <file>..." to include in what will be committed) README nothing added to commit but untracked files present (use "git add" to track)

添加文件跟踪

[root@ git_data]# git add ./*
[root@12 git_data]# git status
On branch master No commits yet Changes to be committed:
(use "git rm --cached <file>..." to unstage) new file: README

文件会添加到 .git 的隐藏目录

[root@ git_data]# tree .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── objects
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
├── heads
└── tags

由工作区提交到本地仓库

[root@ git_data]# git commit -m "test"   # -m后面为注释信息
[master (root-commit) 52c2c95] test
file changed, insertions(+), deletions(-)
create mode 100644 README

查看Git的状态

[root@ git_data]# git status
On branch master
nothing to commit, working tree clean

查看提交后的Git目录状态

[root@ git_data]# tree .git/
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│   └── heads
│   └── master
├── objects
│   ├──
│   │   └── c2c95476560f3b65a23884bbf6a44c2e5e51c7
│   ├──
│   │   └── 3b9bebdc6bd5c4b22136034a95dd097a57d3dd
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
├── heads
│   └── master
└── tags

删除Git内的文件

没有添加到暂存区的数据直接rm删除即可

已经添加到缓存区的数据:

将文件从Git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

 git rm --cached database

将文件数据从git暂存区和工作目录一起删除

git rm -f database

将文件撤出暂存区

git reset HEAD database

实践

创建新文件

[root@ git_data]# touch 123
[root@ git_data]# git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed) nothing added to commit but untracked files present (use "git add" to track)

将文件添加到暂存区域

[root@ git_data]# git add 123
[root@ git_data]# git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage) new file: 123 [root@ git_data]#

删除文件

[root@ git_data]# rm 123 -f
[root@ git_data]# ls
README
[root@ git_data]# git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage) new file: Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) deleted: [root@ git_data]# git reset HEAD 123
[root@ git_data]# git status
On branch master
nothing to commit, working tree clean

重命名暂存区数据

没有添加到暂存区的数据直接mv/rename改名即可。

已经添加到暂存区数据:

git mv README NOTICE

查看历史记录

查看提交历史记录

git log

查看最近几条记录

git log -

显示每次提交的内容差异,例如仅查询最近一次差异

git log -p  -

简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

git log --stat -

以更详细的模式输出提交的历史记录

git log --pretty=fuller -

查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名

git log --pretty=fomat:"%h %cn"

使用format参数来指定具体的输出格式

格式

说明

%s

提交说明。

%cd

提交日期。

%an

作者的名字。

%cn

提交者的姓名。

%ce

提交者的电子邮件。

%H

提交对象的完整SHA-1哈希字串。

%h

提交对象的简短SHA-1哈希字串。

%T

树对象的完整SHA-1哈希字串。

%t

树对象的简短SHA-1哈希字串。

%P

父对象的完整SHA-1哈希字串。

%p

父对象的简短SHA-1哈希字串。

%ad

作者的修订时间。

还原历史数据

Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。

查看现在的hash

git reset --hard

还原历史提交版本上一次

git reset --hard HEAD^

找到历史还原点的SHA-1值后,就可以还原(值不写全,系统会自动匹配)

[root@12 git_data]# git log
commit a409fc46f792228a8119705e9cc97c2a013534ab
Author: clsn <@.com>
Date: Wed Nov :: + test commit bb963eb32ad93a72d9ce93e4bb55105087f1227d
Author: clsn <@.com>
Date: Wed Nov :: + first commit

还原数据

[root@12 git_data]# git reset --hard  bb963
HEAD 现在位于 bb963eb first commit
# 查看数据
[root@gitlab git_data]# ls
README

还原未来数据

什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git log已经找不到这个版本了

查看未来历史更新点:git  reflog

[root@12 git_data]# git reflog
bb963eb HEAD@{}: reset: moving to bb963
a409fc4 HEAD@{}: reset: moving to a409fc4
bb963eb HEAD@{}: reset: moving to bb963
a409fc4 HEAD@{}: commit: test
bb963eb HEAD@{}: commit (initial): first commit
[root@gitlab git_data]#

标签使用

前面回滚使用的是一串字符串,又长又难记,

当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag

git tag v1.

查看当前所有的标签

git show v1.

创建带有说明的标签,-a指定标签名字,-m指定说明文字

git tag v1. -m "version 1.2 release is test"

为同一个提交版本设置了两次标签,删除之前的v1.0

git tag -d v1.

测试

[root@12 git_data]# git reset --hard 0bdf2e7
HEAD is now at 0bdf2e7 modified README file
[root@gitlab git_data]# git reset --hard V1.0
HEAD is now at a66370a add test dir [root@12 git_data]# git tag v20171129
[root@gitlab git_data]# git tag
v20171129

对比数据

git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改

git diff README

分支结构

在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。所以团队的合作分支看起来会像下图那样

分支切换

[root@ git_data]# git branch linux
[root@gitlab git_data]# git branch
linux
* master
[root@ git_data]# git checkout linux
切换到分支 'linux'
[root@gitlab git_data]# git branch
* linux
master

在linux分支进行修改

[root@ git_data]# cat README
[root@ git_data]# echo "2017年11月30日" >> README
[root@ git_data]# git add .
[root@ git_data]# git commit -m "2017年11月30日09点10分"
[linux 5a6c037] 2017年11月30日09点10分
file changed, insertion(+)
[root@ git_data]# git status
# 位于分支 linux
无文件要提交,干净的工作区

回到master分支

[root@ git_data]# git checkout master
切换到分支 'master'
[root@ git_data]# cat README
[root@ git_data]# git log -1
commit 7015bc7b316cc95e2dfe6c53e06e3900b2edf427
Author: clsn <admin@znix.top>
Date: Wed Nov :: +

合并代码

[root@ git_data]# git merge linux
更新 7015bc7..5a6c037
Fast-forward
README | +
file changed, insertion(+)
[root@gitlab git_data]# git status
# 位于分支 master
无文件要提交,干净的工作区
[root@gitlab git_data]# cat README
2017年11月30日

删除分支

查看所有包含未合并工作的分支

git branch --no-merged
testing

这里显示了其他分支。 因为它包含了还未合并的工作,尝试使用 git branch -d 命令删除它时会失败

git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'

如果真的想要删除分支并丢掉那些工作,如同帮助信息里所指出的,可以使用 -D 选项强制删除它

Gitlab(机器内存配置应最少为4G,否则会卡顿)

参考文档:

https://about.gitlab.com/installation/#centos-7

安装并配置必要的依赖关系

在CentOS上,以下命令也将在系统防火墙中打开HTTP和SSH访问

 
[root@node1 ~]# yum install -y curl policycoreutils openssh-server openssh-clients
[root@node1 ~]# systemctl enable sshd
[root@node1 ~]# systemctl start sshd
[root@node1 ~]# firewall-cmd --permanent --add-service=http
如果开放了防火墙重新加载防火墙
[root@node1 ~]#systemctl reload firewalld

添加GitLab包服务器并安装包

安装包下载地址

官网 :https://about.gitlab.com/downloads/
清华大学镜像: https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
[root@node1 ~]# wget https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.6.2-ce.0.el7.x86_64.rpm
[root@node1 ~]# rpm -ivh gitlab-ce-9.5.2-ce.0.el7.x86_64.rpm

配置并启动GitLab

[root@node1 ~]# gitlab-ctl reconfigure  # 编译配置
[root@node1 ~]# gitlab-ctl start
[root@node1 ~]# gitlab-ctl status

通过浏览器访问 :IP地址

配置GitLab域名,否则项目git clone的地址时错

[root@ ~]# vim  /etc/gitlab/gitlab.rb
编辑 :external_url '你的网址'
例如 :external_url 'http://192.168.1.100'
编辑完成后,再 gitlab-ctl reconfigure 使配置生效

进行web界面操作

第一次访问时创建密码

登录用户为root,

创建一个新的项目

定义项目

创建完成后会提示没有添加ssh秘钥

在服务器上创建ssh秘钥

[root@ ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:8v/xXIGry7oNGpAemTjuMTWyauX0DNYgDdtTivrWRZQ root@10.0.0.11
The key's randomart image is:
+---[RSA ]----+
| . |
| . .E |
| * o. |
| + *. = . |
|. .++X. S . . |
|. .=*.=o . .|
| .=*+o ... .. .|
| .=.+o o.+ .+ . |
|.o . . o+*o o |
+----[SHA256]-----+
[root@ ~]# cat .ssh/id_rsa
id_rsa id_rsa.pub

[root@11 ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDQMQD/rUedK+DNzENuhcv8vF0zQ01iQ9nbjJIGdL/u/ymePXeydv1ZMQ1ZXZXGy4BT+Zg1Xj/KUxYbPyXQ0TIdnfF0d9FIraAfxk8K7m47l9c7iECcncvVnQfbHLpoCTudKnOiuci/4rKQzUxaSfZhdPsZ0NXyOCiYxC07ior4AMk/YeAwOVDWDU2CQDfur2QwUbLuV2+gFA2CR+9fYpXgYMv0Sr4cUJ02JOiz3rSAi6Anl4riyqI9qdX+1FU5bS1y5SJ/nbHwmu2MJ5vOeFczczpxocsXpQT/lz40HMnsjAXp38qTPdVIDS3Enig4mR9w64WZJ5M0lTCSamCtSep root@10.0.0.11

 

将秘钥添加到web页面的用户中

 本地仓库创建 提交 推送

所有代码只能向 dev 分支推送,不允许直接推送 master 分支。你也提不上。。

 方法一:适用于不存在demo仓库

git clone http://git.xinchanedu.com/root/demo.git
cd demo
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master:dev

方法二:适用于已经存在demo目录

cd demo
git init
git remote add origin http://git.xinchanedu.com/root/demo.git
git add .
git commit -m "Initial commit"
git push -u origin master:dev

方法三:适用于已经存在demo仓库

cd demo
git remote rename origin old-origin
git remote add origin http://git.xinchanedu.com/root/demo.git
git push -u origin master:dev # 本地所有分支推到dev
git push -u origin master:dev --tags # 本地所有tags推到dev

创建文件并推到远端git仓库

[root@ Test1]# echo "clsn" >> clsn
[root@ Test1]# git push -u origin master

 

Git和Gitlab的更多相关文章

  1. 【Git】 GitLab简单使用

    本例介绍简单实用GitLab,安装请参照[Git] GitLab服务器社区版安装与配置 1.用户和组的管理 a.创建组,在首页点击Create a group b.创建用户,在首页点击Add peop ...

  2. 使用git和gitlab进行协同开发流程

    一.基本概念 1.仓库(Repository) ①源仓库(线上版本库) 在项目的开始,项目的发起者构建起一个项目的最原始的仓库,称为origin. 源仓库的有两个作用: 1.汇总参与该项目的各个开发者 ...

  3. Git与GitLab

    Git与GitLab 一.Git Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个 ...

  4. win10下git与gitlab安装与文件上传

    目前了解到的版本管理工具有三种:gitlab  GitHub 和 码云 个人感觉 gitlab 在公司用的较多 便于协同办公   GitHub各种资源有很多,适合个人使用   码云是中文版 便于入门 ...

  5. Jenkins持续集成git、gitlab、sonarqube(7.0)、nexus,自动化部署实战,附安装包,严禁转载!!!

    导读 之前用的都是SVN,由于工作需要用到Git,求人不如求己,技多不压身,多学一项技能,未来就少求别人一次,系统的学一遍,自己搭建一整套环境,自动化部署(自动发版),代码质量检测等等(为啥不用doc ...

  6. docker中建立私有git服务器[gitlab]

    现在使用git的很普遍,在开发内部如何建立个git服务器,本文以gitlab为例,让你分分钟就可以搭好一个环境[docker的威力非同一般] 首先在docker.com找到gitlab的下载源和信息, ...

  7. centos7下搭建git和gitlab版本库

    系统:centos7 安装依赖: yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-d ...

  8. git服务器gitlab之搭建和使用--灰常好的git服务器【转】

    转自:http://blog.csdn.net/zy416548283/article/details/38057925 git服务器比较有名的是gitosis和gitolite,这两个管理和使用起来 ...

  9. 安装git,gitlab和TortoiseGit

    全部都是默认配置安装 需注册用户:用户名尽量好认 测试用户: 注册成功: 生成密钥: 1.首先使用TortoiseGit自带的Puttygen创建本地的公/私钥对 2.点击Generate按钮,在窗口 ...

  10. Git和Gitlab在使用过程中所遇到的问题

    01-关于gitLab添加ssh key后,git clone还提示输入密码问题 本地用户连接远程仓库需要用 HTTP方式连接,SSH方式会出现提示输入密码 git clone http://.... ...

随机推荐

  1. jQuery下实现等待指定元素加载完毕

    先声明下这个方法的使用场合,以免误导大家..比如在博客园,我们没法修改他的源代码,那么只能想办法监视元素的出现了.所以下面方法是在修改不了源码的情况下使用,而非写自己的项目.. 今天在改博客几个样式的 ...

  2. bzoj3029 守卫者的挑战 (多维dp)

    题面: 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我,Nizem,是黑魔法圣殿的守卫者.如果你能通过我的挑 ...

  3. Madgwick IMU Filter

    论文链接:http://202.114.96.204/cache/13/03/x-io.co.uk/35c82431852f2aa7d0feede9dc138626/madgwick_internal ...

  4. python-super1

    一.问题的发现与提出 一般子类在继承父类后,若子类覆盖了父类,则只执行子类,不执行父类.如果没有,则执行父类代码. 发现使用super()后,子类,父类都会执行,比较疑惑,记录学习,super知识点 ...

  5. 20165230 2017-2018-2《Java程序设计》课程总结

    20165230 2017-2018-2<Java程序设计>课程总结 一.作业链接汇总 每周作业链接 预备作业1:我期望的师生关系 预备作业2:做中学learning by doing个人 ...

  6. 纠正几个NANDFLASH很容易犯的错误【转】

    转自:https://blog.csdn.net/pengrui18/article/details/32337297 今天在看别人如何根据物理地址计算NANDFLASH的列地址(column add ...

  7. 【Hadoop】搭建完全分布式的hadoop【转】

    转自:http://www.cnblogs.com/laov/p/3421479.html 下面博文已更新,请移步 ↑ 用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机.一个xp系统 ...

  8. 002_更新Nginx证书

    全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL 1.自行颁发不受浏览器信任的SSL证书: HTTPS的SSL证书可以自行颁发,Linux下的颁发步骤如下: openssl g ...

  9. 谈谈如何查看Android项目方法数

    我们都知道,Android App的方法数是有天花板的,在方法数达到65536时,就会出现打包异常,这个时候,我们需要去除一些不需要的三方工具包,或者采用多Dex技术分包,都能达到正常打包的效果. 可 ...

  10. [BZOJ2616]SPOJ PERIODNI 树形dp+组合数+逆元

    2616: SPOJ PERIODNI Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 128  Solved: 48[Submit][Status][ ...