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>..." 以包含要提交的内容)
#
#
提交为空,但是存在尚未跟踪的文件(使用 "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 语法的使用方法
至此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
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
Git详解及 github与gitlab使用的更多相关文章
- Git详解及github与gitlab使用
第一章 关于版本控制 第二章 GIT简介 第三章 GIT安装 第四章 初次运行GIT前配置 第五章 初始化仓库 第六章 GIT命令操作 第七章 GIT分支结构
- Git详解和Github的使用
Git和Github的概念: Git是分布式版本管理系统,简单说就是一个软件,用于记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的软件. Github是一个为用户提供Git服务的网站,简单说 ...
- Git详解及github的使用
1.Devops介绍 1.Devops是什么 开发 development 运维 operations 2.Devops能干嘛 提高产品质量 1 自动化测试 2 持续集成 3 代码质量管理工具 4 程 ...
- 【转】Git详解之一:Git起步
原文网址:http://blog.jobbole.com/25775/ 原文:<Pro Git> 起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后 ...
- Git详解之一:Git起步
起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...
- 一文详解Hexo+Github小白建站
作者:玩世不恭的Coder时间:2020-03-08说明:本文为原创文章,未经允许不可转载,转载前请联系作者 一文详解Hexo+Github小白建站 前言 GitHub是一个面向开源及私有软件项目的托 ...
- windows 安装Git详解
windows 安装Git详解 一.Git简介 Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Lin ...
- Git详解之一 Git实战
Git详解之一 Git实战 入门 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章 ...
- git原理,git命令使用详解,github使用 --有此图文并茂原来如此简单
一.Git分布式控制系统原理:git有三个区,被管理的代码或文件是从:工作区-->暂存区-->本地版本库. 二.GitHub创建线上仓库GitHub是一个面向开源及私有软件项目的托管平台, ...
随机推荐
- 张高兴的 Xamarin.Android 学习笔记:(二)“Hello World”
完成环境配置后开始第一个简单项目.打开 Visual Studio 新建一个 Xamarin.Android 项目 "HelloAndroid".(GitHub:https://g ...
- 【转】漫谈linux文件IO--io流程讲的很清楚
[转]漫谈linux文件IO--io流程讲的很清楚 这篇文章写的比较全面,也浅显易懂,备份下.转载自:http://blog.chinaunix.net/uid-27105712-id-3270102 ...
- LINUX 笔记-文件属性相关命令
chgrp:该命令用于改变文件所属用户组 chown:该命令用于改变文件的所有者 chmod:该命令用于改变文件的权限 -R:进行递归的持续更改,即连同子目录下的所有文件都会更改
- 走近 Python (类比 JS)
Python 是一门运用很广泛的语言,自动化脚本.爬虫,甚至在深度学习领域也都有 Python 的身影.作为一名前端开发者,也了解 ES6 中的很多特性借鉴自 Python (比如默认参数.解构赋值. ...
- Windows 安装 python2.7
Windows 安装 python2.7 python2.7下载地址: https://www.python.org/downloads/release/python-2714/ 安装过程: 设置系统 ...
- js中的路由匹配
routie插件:http://projects.jga.me/routie/ /** * 路由 * @example * routie( * { * '/':function(){ }, * '/m ...
- Linux系列教程(十七)——Linux权限管理之文件系统系统属性chattr权限和sudo命令
上篇博客我们介绍了权限管理的ACL权限,通过设定 ACL 权限,我们为某个用户指定某个文件的特定权限.这篇博客我们将介绍权限管理中用的比较多的两个命令 chattr 和 sudo . 1.设定文件系统 ...
- Container With Most Water 容器最大水容量
描述 Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai ...
- Ubuntu & Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践
相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...
- 基于Cef内核的多店铺登录器(含源码)
公司是做电商的,在速卖通平台上开了若干店铺,每天都需要登录店铺打理,如:发货提交.获取运单号等.多个店铺的情况下,同时使用浏览器就会非常繁琐,如:要记住帐户名和密码,还要在不同店铺间切换.如果能够制作 ...