Git详解及 github与gitlab使用

1.1 关于版本控制

1.1.1 本地版本控制

本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的 好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

1.1.2 集中化的版本控制系统

如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统(Centralized Version  Control Systems,简称 CVCS)应运而生。这类系统,诸如 CVS、Subversion 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

1.1.3 分布式版本控制系统

         在这类系统中,像Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

1.2 Git简介

 

    官网:https://git-scm.com

         git是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。

Git 官方中文手册 https://git-scm.com/book/zh/v2

1.2.1 Git历史

自2002年开始,林纳斯·托瓦兹决定使用BitKeeper作为Linux内核主要的版本控制系统用以维护代码。因为BitKeeper为专有软件,这个决定在社区中长期遭受质疑。在Linux社区中,特别是理查德·斯托曼与自由软件基金会的成员,主张应该使用开放源代码的软件来作为Linux核心的版本控制系统。林纳斯·托瓦兹曾考虑过采用现成软件作为版本控制系统(例如Monotone),但这些软件都存在一些问题,特别是性能不佳。现成的方案,如CVS的架构,受到林纳斯·托瓦兹的批评。

2005年,安德鲁·垂鸠写了一个简单程序,可以连接BitKeeper的存储库,BitKeeper著作权拥有者拉里·麦沃伊认为安德鲁·垂鸠对BitKeeper内部使用的协议进行逆向工程,决定收回无偿使用BitKeeper的授权。Linux内核开发团队与BitMover公司进行蹉商,但无法解决他们之间的歧见。林纳斯·托瓦兹决定自行开发版本控制系统替代BitKeeper,以十天的时间,编写出第一个git版本

1.3 安装git

1.3.1 环境说明

[root@gitlab ~]# rpm -qa centos-release
centos-release-7-4.1708.el7.centos.x86_64
[root@gitlab ~]# uname -a
Linux gitlab 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@gitlab ~]# getenforce
Disabled
[root@gitlab ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

# 本文使用的linux系统均为该系统

# 本文使用的windows系统为 Microsoft Windows [版本 10.0.15063]

1.3.2 Yum安装Git

# centos 自带git

[root@gitlab ~]# rpm -qa git
git-1.8.3.1-11.el7.x86_64

 # 安装方法

yum install git -y

1.3.3 编译安装

编译安装可以安装较新版本的git

Git下载地址: https://github.com/git/git/releases

# 安装依赖关系
yum install curl-devel expat-devel gettext-devel  openssl-devel zlib-devel
# 编译安装
tar -zxf git-2.0.0.tar.gz
cd git-2.0.0
make configure
./configure --prefix=/usr
make
make install  

1.4 初次运行 Git 前的配置

1.4.1 配置git

命令集

git config --global user.name "clsn"  #配置git使用用户
git config --global user.email "admin@znix.top"  #配置git使用邮箱
git config --global color.ui true  #语法高亮
git config --list # 查看全局配置

配置过程

[root@gitlab ~]# git config --global user.name "clsn"  #配置git使用用户
[root@gitlab ~]# git config --global user.email "admin@znix.top"  #配置git使用邮箱
[root@gitlab ~]# git config --global color.ui true  #语法高亮
[root@gitlab ~]# git config --list # 查看全局配置
user.name=clsn
user.email=admin@znix.top
color.ui=true

生成的配置文件

[root@gitlab ~]# cat .gitconfig
[user]
    name = clsn
    email = admin@znix.top
[color]
    ui = true

1.4.2 获取帮助

使用Git时需要获取帮助,有三种方法可以找到Git命令的使用手册:

git help <verb>
git <verb> --help
man git-<verb>

例如,要想获得配置命令的手册,执行

git help config

1.5 获取 Git 仓库(初始化仓库)

# 创建目录
mkdir git_data
# 进入目录
cd git_data/
# 初始化
git init
# 查看工作区状态
git status

操作过程

[root@gitlab ~]# mkdir git_data
[root@gitlab ~]# cd git_data/
[root@gitlab git_data]# git init
初始化空的 Git 版本库于 /root/git_data/.git/
[root@gitlab git_data]# git status
# 位于分支 master
#
# 初始提交
#
无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)

1.6 Git命令常规操作

常用命令说明


命令


命令说明


add    


添加文件内容至索引


bisect 


通过二分查找定位引入 bug 的变更


branch 


列出、创建或删除分支


checkout


检出一个分支或路径到工作区


clone  


克隆一个版本库到一个新目录


commit 


记录变更到版本库


diff   


显示提交之间、提交和工作区之间等的差异


fetch  


从另外一个版本库下载对象和引用


grep   


输出和模式匹配的行


init   


创建一个空的


Git    


版本库或重新初始化一个已存在的版本库


log    


显示提交日志


merge  


合并两个或更多开发历史


mv     


移动或重命名一个文件、目录或符号链接


pull   


获取并合并另外的版本库或一个本地分支


push   


更新远程引用和相关的对象


rebase 


本地提交转移至更新后的上游分支中


reset  


重置当前HEAD到指定状态


rm     


从工作区和索引中删除文件


show   


显示各种类型的对象


status 


显示工作区状态


tag


创建、列出、删除或校验一个GPG签名的 tag 对象

常用操作示意图

文件的状态变化周期

1.6.1 创建文件

[root@gitlab git_data]# touch README
[root@gitlab git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#    README
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

 

添加文件跟踪

[root@gitlab git_data]# git add ./*
[root@gitlab git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached <file>..." 撤出暂存区)
#
#    新文件:    README
#

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

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

由工作区提交到本地仓库

[root@gitlab git_data]# git commit  -m 'first commit'
[master(根提交) bb963eb] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README

查看git的状态

[root@gitlab git_data]# git status
# 位于分支 master
无文件要提交,干净的工作区

提交后的git目录状态

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

1.6.2 添加新文件

git add  * 添加到暂存区域
git commit  提交git仓库 -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看

修改或删除原有文件

常规方法

git add  *
git commit

简便方法

git commit -a  -m "注释信息"

-a 表示直接提交

Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are
not affected.

1.6.3 删除git内的文件

命令说明:

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

• 已经添加到暂存区数据:

git rm --cached database 

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

git rm -f database

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

命令实践:

# 创建新文件
[root@gitlab git_data]# touch 123
[root@gitlab git_data]# git status
# 位于分支 master
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#    123
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

# 将文件添加到暂存区域

[root@gitlab git_data]# git add 123
[root@gitlab git_data]# git status
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#    新文件:    123

#  删除文件

[root@gitlab git_data]# rm 123 -f
[root@gitlab git_data]# ls
[root@gitlab git_data]# git status
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#    新文件:    123
#
# 尚未暂存以备提交的变更:
#   (使用 "git add/rm <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#    删除:      123
# 
[root@gitlab git_data]# git reset HEAD  ./*
[root@gitlab git_data]# git status
# 位于分支 master
无文件要提交,干净的工作区

1.6.4 重命名暂存区数据

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

• 已经添加到暂存区数据:

git mv README NOTICE

1.6.5 查看历史记录

• git log   #→查看提交历史记录

• git log -2   #→查看最近几条记录

• git log -p -1  #→-p显示每次提交的内容差异,例如仅查看最近一次差异

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

• git log --pretty=oneline #→--pretty根据不同的格式展示提交的历史信息

• git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录

• git log --pretty=fomat:"%h %cn"  #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。

使用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


作者的修订时间。

命令实践

[root@gitlab git_data]# git log
commit a409fc46f792228a8119705e9cc97c2a013534ab
Author: clsn <admin@znix.top>
Date:   Wed Nov 29 11:44:14 2017 +0800

    test

commit bb963eb32ad93a72d9ce93e4bb55105087f1227d
Author: clsn <admin@znix.top>
Date:   Wed Nov 29 10:57:02 2017 +0800

    first commit

1.6.6 还原历史数据

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

git reset --hard   hash

git reset --hard HEAD^  #→还原历史提交版本上一次

git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统

会自动匹配)

测试命令

[root@gitlab git_data]# git log
commit a409fc46f792228a8119705e9cc97c2a013534ab
Author: clsn <13835544305@163.com>
Date:   Wed Nov 29 11:44:14 2017 +0800

    test

commit bb963eb32ad93a72d9ce93e4bb55105087f1227d
Author: clsn <13835544305@163.com>
Date:   Wed Nov 29 10:57:02 2017 +0800

    first commit

         还原数据

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

1.6.7 还原未来数据

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

git reflog #→查看未来历史更新点

测试命令

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

1.6.8 标签使用

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

git tag v1.0   #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。

git tag          #→查看当前所有的标签

git show v1.0   #→查看当前1.0版本的详细信息

git tag v1.2 -m "version 1.2 release is test"  #→创建带有说明的标签,-a指定标签名字,-m指定说明文字

git tag -d v1.0   #→我们为同一个提交版本设置了两次标签,删除之前的v1.0

测试命令

[root@gitlab 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@gitlab git_data]# git tag  v20171129
[root@gitlab git_data]# git tag
v20171129

1.6.9 对比数据

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

后,再把它提交到仓库就放⼼多了。

git diff README

1.7 分支结构

在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。

那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。所以团队的合作分支看起来会像下图那样。

1.7.1 分支切换

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

在linux分支进行修改

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

回到master分支

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

        123

合并代码

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

1.7.2 合并失败解决

模拟冲突,在文件的同一行做不同修改

在master 分支进行修改

[root@gitlab git_data]# cat README
2017年11月30日
[root@gitlab git_data]# echo  "clsn in master">> README
[root@gitlab git_data]# git commit -a -m "clsn 2017年11月30日 09点20分 "
[master 7ab71d4] clsn 2017年11月30日 09点20分
 1 file changed, 1 insertion(+)

切换到linux分支

[root@gitlab git_data]# git checkout linux
切换到分支 'linux'
[root@gitlab git_data]# cat README
2017年11月30日
[root@gitlab git_data]# echo "clsn in linux" >> README
[root@gitlab git_data]# git commit -a -m "2017年11月30日 03"
[linux 20f1a13] 2017年11月30日 03
 1 file changed, 1 insertion(+)

回到master分区,进行合并,出现冲突

[root@gitlab git_data]# git checkout master
切换到分支 'master'
[root@gitlab git_data]# git merge linux
自动合并 README
冲突(内容):合并冲突于 README
自动合并失败,修正冲突然后提交修正的结果。

解决冲突

[root@gitlab git_data]# vim README
2017年11月30日
clsn in master
clsn in linux

# 手工解决冲突

[root@gitlab git_data]# git commit -a -m "2017年11月30日 03"
[master b6a097f] 2017年11月30日 03

1.7.3 删除分支

因为之前已经合并了linux分支,所以现在看到它在列表中。 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。

查看所有包含未合并工作的分支,可以运行 git branch --no-merged

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 选项强制删除它。

1.8 windwos上Git的使用

windows 上git软件网站 https://git-for-windows.github.io

    软件下载地址:https://github.com/git-for-windows/git/releases/download/v2.15.1.windows.2/Git-2.15.1.2-64-bit.exe

         软件安装默认即可。

1.8.1 软件使用

创建新的仓库

         定义仓库的路径

         添加用户信息(在 git bash中)

default@Hzs-Desktop MINGW64 /i/git_data (master)
$ git config  --global user.email "admin@znix.top"

default@Hzs-Desktop MINGW64 /i/git_data (master)
$ git config  --global user.name "clsn"

         在git Gui 中添加用户信息,添加一次就可

         在页面中将数据配置好即可使用

         查看历史数据

1.9 gitlab的使用

前面我们已经知道Git人人都是中心,那他们怎么交互数据呢?

• 使用GitHub或者码云等公共代码仓库

• 使用GitLab私有仓库

1.9.1 安装配置gitlab

官方安装文档   https://about.gitlab.com/installation/

国内软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

安装

[root@gitlab ~]# yum localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm

初始化

[root@gitlab ~]# gitlab-ctl reconfigure

状态

[root@gitlab ~]#  gitlab-ctl status
run: gitaly: (pid 4491) 48s; run: log: (pid 4087) 279s
run: gitlab-monitor: (pid 4539) 44s; run: log: (pid 4251) 207s
run: gitlab-workhorse: (pid 4501) 47s; run: log: (pid 4099) 273s
run: logrotate: (pid 4125) 265s; run: log: (pid 4124) 265s
run: nginx: (pid 4112) 271s; run: log: (pid 4111) 271s
run: node-exporter: (pid 4175) 243s; run: log: (pid 4174) 243s
run: postgres-exporter: (pid 4528) 45s; run: log: (pid 4223) 219s
run: postgresql: (pid 3933) 343s; run: log: (pid 3932) 343s
run: prometheus: (pid 4514) 46s; run: log: (pid 4156) 259s
run: redis: (pid 3876) 355s; run: log: (pid 3875) 355s
run: redis-exporter: (pid 4186) 237s; run: log: (pid 4185) 237s
run: sidekiq: (pid 4078) 281s; run: log: (pid 4077) 281s
run: unicorn: (pid 4047) 287s; run: log: (pid 4046) 287s

检查端口

[root@gitlab ~]# netstat -lntup|grep 80
tcp        0      0 127.0.0.1:8080      0.0.0.0:*    LISTEN     4073/unicorn master
tcp        0      0 0.0.0.0:80      0.0.0.0:*         LISTEN      4112/nginx: master
tcp        0      0 0.0.0.0:8060       0.0.0.0:*      LISTEN      4112/nginx: master  

1.9.2 使用浏览器访问,进行web界面操作

第一次访问,创建密码

         进行登陆,用户名为root,密码为12345678

创建一个新的项目

         定义项目的名称

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

         在服务器上创建ssh密钥 使用ssh-ketgen 命令

[root@gitlab ~]# 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:n/V2kCiwwm2UfBsnQLm17eXUCBiBByyPbefmz5oQvfU root@gitlab
The key's randomart image is:
+---[RSA 2048]----+
|       o++o+     |
|      ..+o+ .    |
|       ==++o.. o |
|     ..o==o=..+..|
|      o.So+.++o  |
|       o oo*.o.. |
|        .o+   E .|
|         ..o . . |
|          ooo    |
+----[SHA256]-----+
[root@gitlab .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSVdBypha/ALMmvIiZGXxYGz7FJ5TC+hYWo7QGBJ+J6JVinp9yH851fwxln5TWGBrtEousoVHXTTJfFRy8LV+Ho7OfaksYt+5TPxEjf5XX53Z3ZX70PYH3DQFmgzl0QpWw1PYIjrD7kBeLhUg+R/ZePS+HzPvbRCb6gOlkdx46vX4Olr7YbAO5lzAarhaZcE2Q702kPXGeuZbR7KcwVhtoiueyHwyj94bccMfKq7qSskXGbpWuCwcaKQ6uqGap1rP5Viqqv0xeO7Vq0dIZ/YnPL2vPDUvNa36nHosiZGkn4thpPh63KjXaFIfKOuPemLzvDZY0A+88P8gwmAYiPoxp root@gitlab

         将密钥添加到web界面的用户中

gitlab自带的命令集

Command line instructions
Git global setup
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
Create a new repository
git clone git@gitlab.example.com:root/clsn.git
cd clsn
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
Existing folder
cd existing_folder
git init
git remote add origin git@gitlab.example.com:root/clsn.git
git add .
git commit -m "Initial commit"
git push -u origin master
Existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin git@gitlab.example.com:root/clsn.git
git push -u origin --all
git push -u origin --tags

创建行的git仓库

[root@gitlab ~]# git clone git@gitlab:root/Test1.git
正克隆到 'Test1'...
The authenticity of host 'gitlab (10.0.0.63)' can't be established.
ECDSA key fingerprint is SHA256:yOrzs0W+R//s8VDEN9nko6r6wW+8gwJl3Ut7ac0i5SY.
ECDSA key fingerprint is MD5:21:33:dd:4d:01:00:eb:71:a4:4e:2d:2b:bf:37:48:ed.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab' (ECDSA) to the list of known hosts.
warning: 您似乎克隆了一个空版本库。

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

[root@gitlab Test1]# echo "clsn" >> clsn
[root@gitlab Test1]# git push -u origin master
分支 master 设置为跟踪来自 origin 的远程分支 master。
Everything up-to-date

         推送完成后能够在web界面中查看

# md 语法的使用方法

http://www.zyops.com/markdown-syntax

至此gitlab的使用结束了

1.10 GitHub托管服务

Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,Github不仅可以托管各种Git版本仓库,还拥有了更美观的Web界面,您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,当然也可以付费购买私有库,这样高性价比的私有库真的是帮助到了很多团队和企业。

1.10.1 注册GitHub

浏览器访问github官网 : https://github.com/ ,点击Sign up 进行注册

         填写个人信息,进行注册

选择仓库类型,默认免费,点击底下Continue注册

         描述一下你自己,当然,这一步可以跳过

         用户创建完成,可以创建新的项目

注意:创建新的项目之前要现验证邮箱

1.10.2 添加密钥

在github上添加一个新的ssh密钥

 

获取主机(linux)上的密钥

[root@gitlab ~]# 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:n/V2kCiwwm2UfBsnQLm17eXUCBiBByyPbefmz5oQvfU root@gitlab
The key's randomart image is:
+---[RSA 2048]----+
|       o++o+     |
|      ..+o+ .    |
|       ==++o.. o |
|     ..o==o=..+..|
|      o.So+.++o  |
|       o oo*.o.. |
|        .o+   E .|
|         ..o . . |
|          ooo    |
+----[SHA256]-----+
[root@gitlab ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmv4aEEEpbUyzv1r6SN0JqOfeyQ7sZZbXxWFv4xflIJeK/rl8cF7UYCzjLEvwJlrkIjKSs5uW1x0zWEcZFiv5tGCiO7DeMR6pKUAn7NzNjKiCcElCXiqHVew84iTbxX4MWKlbFoJYO9/wQ1NlrQfqcSgZwJTLKBMVoMXvTWPPGXf6AwdSp68guFwwGDIV8BiHZiy61bKiWYSVKSDP47Y7VUV/bdwGaxG7tAfalWVpe6xXXRtsj58sENyIWbRI7/9XWqs+eV+CgI74YjOanMvHnHFlfg0tb+MewRb4tFGVmroFBRsvfI3Sl2fez2zHG0qh3f34/0KF1kitlWkgcBJqN root@gitlab

windwos上获得密钥的方法(需要安装git for windows)

default@Hzs-Desktop MINGW64 /i/Desktop
$ ssh-keygen.exe
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/default.DESKTOP-U9D5JP4/.ssh/id_rs                                                                                                                                  a):
Created directory '/c/Users/default.DESKTOP-U9D5JP4/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/default.DESKTOP-U9D5JP4/.ssh/id_r                                                                                                                                  sa.
Your public key has been saved in /c/Users/default.DESKTOP-U9D5JP4/.ssh/id_rsa.p                                                                                                                                  ub.
The key fingerprint is:
SHA256:aqnHq/xNn159jBX4o2L2ZJdtiwu4ietvKRT2fL9igZo default@Hzs-Desktop
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|              .  |
|             . . |
|       o      . .|
|      . S .    o.|
|       + +.o ..++|
|     .= +.o=++oo=|
|   . ooE.+==*.oo.|
|    +++=*== .=o. |
+----[SHA256]-----+

default@Hzs-Desktop MINGW64 /i/Desktop
$

default@Hzs-Desktop MINGW64 /i/Desktop
$ cat /c/Users/default.DESKTOP-U9D5JP4/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC15+1oQBzvgzQP3p0Lb9FsTKFfIIws9WxGBVl2B9d2                                                                                                                                  qT2eKFgXoEDNCF/OrhhXvbMDhORxXHf9RG0Aqj+/vJddbaQpCawHhP6VUG1X885xhY4OohDOkFQiWD1s                                                                                                                                  DCMkX7OHNW5ake6P8AdNwI6eSpKYKYCxRMGkRiBa1KDRtG8CvsG8VN0iTSW0UZ3s4Ps+S31pBYlNjOMv                                                                                                                                  Lp0HRAMVhYimLLi0Wz2mBffPOeNjPX1FfJdr+hO7TIRNdyAEGIhSbckkAnVEIASAhI0Re/19v1RnSkk2                                                                                                                                  VtBvc5rVeGxFMNuEIl9WDMSTcedhEGXyRlW2N9TtXlvF1eNflzUg2BtCaCFZ default@Hzs-Desktop

         密钥创建完成后进行添加

         密钥添加成功

 

1.10.3 创建仓库

准备工作已经完毕,右上角点击创建一个新的仓库

         创建仓库,输入个人信息

         根据上面的提示,创建一个代码仓库

         在个人主机上进行推送测试

[root@gitlab ~]# mkdir -p clsn
[root@gitlab ~]# cd clsn/
[root@gitlab clsn]# echo "# test" >> README.md
[root@gitlab clsn]# git init
初始化空的 Git 版本库于 /root/clsn/.git/
[root@gitlab clsn]# git add README.md
[root@gitlab clsn]# git commit -m "first commit"
[master(根提交) 089ae47] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
[root@gitlab clsn]# git remote add origin git@github.com:clsn-git/test.git
[root@gitlab clsn]# git push -u origin master
The authenticity of host 'github.com (192.30.255.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.113' (RSA) to the list of known hosts.
Counting objects: 3, done.
Writing objects: 100% (3/3), 212 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:clsn-git/test.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

         推送完成,刷新界面就可以发现,推送上去的README.md文件

         创建新文件,进行拉取测试

         创建好后点击下面的commit即可

         github添加成功,进行拉取测试

 

1.10.4 拉取文件测试

查看目录内容

[root@gitlab clsn]# ls
README.md

进行拉取

[root@gitlab clsn]# git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
来自 github.com:clsn-git/test
   089ae47..a16be65  master     -> origin/master
更新 089ae47..a16be65
Fast-forward
 clsn.txt | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 clsn.txt 

         检查文件

[root@gitlab clsn]# ls
clsn.txt  README.md
[root@gitlab clsn]# cat clsn.txt
# 这是惨绿少年的文档
# clsn blog  : http://blog.znix.top
# 惨绿少年的博客为 : http://blog.znix.top

至此github的使用就介绍完了

1.11 JetBrains PyCharm 使用github

PyCharm 下载: http://www.jetbrains.com/pycharm/download/#section=windows

1.11.1 PyCharm 上github设置

         选择github进行连接

         用户密码准确后会生产token

         然后点击ok即可

1.11.2 推送代码

现确保有之前安装的windwos端git,测试路径

         共享代码

         输入信息,进行共享

         代码发布成功 https://github.com/clsn-git/test1

至此pycharm使用github就完成了

1.12 pycharm使用gitlab

使用pycharm是的vcs,现在git

         输入gitlab地址

然后输入用户名及密码

         添加一些注释信息

         在gitlab的界面中就能查看到长传的代码

至此pycharm使用gitlab就结束了

1.13 参考文档

猴子都能懂的GIT https://backlog.com/git-tutorial/cn/

Pro Git书籍    https://git-scm.com/book/zh/v2

  本文出自“惨绿少年”,欢迎转载,转载请注明出处!http://blog.znix.top

时间: 2024-09-26 20:22:09

Git详解及 github与gitlab使用的相关文章

Git详解之一:Git起步

原文:http://blog.jobbole.com/25775/ 起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git 会如此流行,为什么你应该立即开始使用它.(查看Git详解系列的全部文章) 1.1 关于版本控制 什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.在本书所展示的例子中,我们仅对保存

Git详解之六 Git工具(转)

Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力. 接下来你将领略到一些 Git 可以实现的非常强大的功能,这些功能你可能并不会在日常操作中使用,但在某些时候你也许会需要.   6.1  修订版本(Revision)选择 Git 允许你通过几种方法来指明特定的或者一定范围内的提交.了解它们并不是必需的,但是了解一下总没坏处. 单个修订版本 显然你可以使用给出

Git详解之六:Git工具

原文地址:http://blog.jobbole.com/26112/ 原文:<Pro Git> Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力.(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读) 接下来你将领略到一些 Git 可以实现的非常强大的功能,这些功能你可能并不会在日常操作中使用,但在某些时候你也许会需要. 6.1 

Git详解之五:分布式Git

原文链接:http://blog.jobbole.com/25660/ 原文:<Pro Git> 为了便于项目中的所有开发者分享代码,我们准备好了一台服务器存放远程 Git 仓库.经过前面几章的学习,我们已经学会了一些基本的本地工作流程中所需用到的命令.接下来,我们要学习下如何利用 Git 来组织和完成分布式工作流程.(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读) 特别是,当作为项目贡献者时,我们该怎么做才能方便维护者采纳更新:或者作为项目维护者时,又该怎样有效管

Git详解之四:服务器上的Git

原文链接:http://blog.jobbole.com/25944/ 原文:<Pro Git> 服务器上的 Git 到目前为止,你应该已经学会了使用 Git 来完成日常工作.然而,如果想与他人合作,还需要一个远程的 Git 仓库.尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做,因为一不留心就很容易弄混其他人的进度.另外,你也一定希望合作者们即使在 自己不开机的时候也能从仓库获取数据 - 拥有一个更稳定的公共仓库十分有用.因此,更好的合作方式是建立一个大家都可以访问的共享仓

Git详解之三:Git分支

原文链接:http://blog.jobbole.com/25877/ 原文:<Pro Git> Git 分支 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间.(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读) 有人把 Git 的分支模型称为"必杀技特性",而正是因为它,将

Git详解之二:Git基础

原文地址:http://blog.jobbole.com/25808/ 原文:<Pro Git> Git 基础 读完本章你就能上手使用 Git 了(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读).本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置:开始或停止跟踪某些文件:暂存或提交某些更 新.我们还会展示如何让 Git 忽略某些文件,或是名称符合特定模式的文件:如何既快

Git详解之九:Git内部原理

原文链接:http://blog.jobbole.com/26209/ 原文:<Pro Git> Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认为这些内容对于初学者来说可能难以理解且过于复杂.正因如此我把这部分内容放在最后一章,你在学习过程中可以先阅 读这部分,也可以晚点阅读这部分,这完全取决于你自己.(伯乐在线注:如果你对Git

Git详解之七:自定义Git

原文链接:http://blog.jobbole.com/26131/ 原文:<Pro Git> 自定义 Git 到目前为止,我阐述了 Git 基本的运作机制和使用方式,介绍了 Git 提供的许多工具来帮助你简单且有效地使用它. 在本章,我将会介绍 Git 的一些重要的配置方法和钩子机制以满足自定义的要求.通过这些工具,它会和你和公司或团队配合得天衣无缝.(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读) 7.1  配置 Git 如第一章所言,用git config配