Git与Gitlab

Git介绍

git(/ɡɪt/)是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。Git是免费的。

林纳斯·托瓦兹自嘲地取了这个名字“git”,该词源自英国俚语,意思大约是“混账”。




集中式与分布式

集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
集中式版本控制系统最大的毛病就是必须联网才能工作。
常用集中式版本控制系统有:CVS、SVN。

分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
常用分布式版本控制系统有:Git。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。


Git常用命令

yum install git -y

#--global全局配置
git config --global user.name "Username"
git config --globla user.email "Email"

#创建版本库
mkdir gitest&&cd gitest
#init, Create an empty Git repository or reinitialize an existing one
git init    #目录下多了一个.git目录

echo "First Git test" > README

#add,把文件添加到仓库
git add README
#git add file1 file2...

#commit,把文件提交到仓库
git commit -m "Readme"

#为什么Git添加文件需要add,commit一共两步呢?
#因为commit可以一次提交很多文件,所以你可以多次add不同的文件。

#status,查看状态
git status

#diff,Show changes between commits, commit and working tree, etc
git diff

#版本回退,如果文件误删,还可以从commit中恢复
#log,查看提交记录,能看到Commit ID(sha1sum散列值)
#在Git中,用HEAD表示当前版本,也就是最新的Commit ID

#reset, Reset current HEAD to the specified state
git reset --hard HEAD^  #回退到上一版本

#也可以利用commit id回退
#用git log可以查看提交历史,以便确定要回退到哪个版本
git reset --hard $commit_id #回退到之前某个版本

#reflog,记录每一个命令
#用git reflog查看命令历史,以便确定要回到未来的哪个版本
git reflog

#checkout,  Checkout a branch or paths to the working tree
#当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
git checkout --file #把file在工作区的修改全部撤销
git checkout --README
#当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步。
#第一步用命令git reset HEAD file,就回到了场景1,第二步git checkout --file。
git reset HEAD file && git checkout --file

#rm,Remove files from the working tree and from the index
#确实要从版本库中删除该文件
#如果一个文件已经被提交到版本库,那么你永远不用担心误删
git rm README


#或者误删某文件,需要恢复
git checkout -- README


版本库(Repository)

隐藏目录.git是Git的版本库。
Git版本库里面存放了很多东西,其中最重要的就是 stage(或index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

git add把文件添加进去,实际是把文件添加到暂存区;
git commit提交更改,实际是把暂存区的所有内容提交到当前分支。默认git commit就是往master上提交更改。


远程仓库

在Github免费获得Git远程仓库。

  1. 创建SSH-Key
#把你的github邮箱地址
ssh-keygen -t rsa -C "email@example.com"
#会生成 ~/.ssh,包含 私钥:id_rsa,公钥:id_rsa.pub
  1. 将公钥写入Github
    在Github--Account settings--SSH Keys--Add SSH Key里面,添加你的id_rsa.pub公钥文件。
    当然,你可以添加多个Key哦,毕竟可能你有多台登陆设备。
    这个就相当于SSH无密钥认证。


添加远程仓库

你想将Github的仓库同本地仓库之间同步。

git remote add origin  git@github.com:username/repo_name.git

#push,把本地仓库内容推送到远程
#-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
git push -u origin master
git push origin master

#克隆远程仓库,clone
git clone URL


分支管理

git默认创建的是master主分支,当然我们也可以创建需要的branch

首先,master分支是应该稳定的,也就是仅用来发布新版本,平时不能在上面干活。
干活可以新建一个dev分支,也就是说,dev分支是不稳定的。到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master发布1.0版本。

你和你的小伙伴每个人都在dev分支上干活,每个人都有自己的分支,时不时往'dev'分支上合并就行了。

#创建新分支, branch
git branch test
git checkout test   #切换到test分支
#快捷: git checkout -b test

#查看分支
git branch  #*号表示当前分支

#在test分支下修改
echo "2nd Git" >> README
git add README
git commit -m "branch test"

#切回其他分支
git checkout master

#merge,合并指定分支到当前分支
#将test分支合并到master
git merge test  #现在修改后的README内容就在master中

#删除分支
git brach -d test
git branch  #查看分支

#查看分支合并图
git log --graph

#--no-ff,普通模式合并
#合并后有历史分支,能看出曾经做过合并
git merge --no-ff -m "no-ff-merge" test

#fast forward,看不出来曾经做过合并


#Bug分支
#stash,把当前工作现场”储藏“起来,等以后恢复后继续工作
#在处理bug上挺适合
git checkout -b iss001
修改bug
git add file
git commit -m "fix bug-001"

#bug修复完成后切换并合并
git checkout master
git merge --no-ff -m "merge bug-001"

#查看工作现场储藏到哪去了
git stash list

#删除工作现场
git stash drop
#恢复并删除
git stash pop


标签管理

发布一个新版本时,通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。
将来无论什么时候,取某个表全的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

tag其实是指向 commit id的。
git有commit,为什么还要引入tag? commit id 是一串散列值,并不简单明了。但是tag,我可以写为"v1.0","v1.2"...
tag,"v1.0"指向对应的commit id,很方便明了。

#首先切换到需要打tag的分支上
git brach test

#创建tag
git tag tag-name
git tag v1.0
#默认tag是打在最新提交的commit上

#查看所有tag
git tag

#指定tag对应的commit
git tag $tag-name $commit_id
git tag v1.0 65432ba

#标签不是按时间顺序列出的,而是按照字母排序
git show $tag-name
git show v1.0

#创建带有说明的标签,-a tag-name;-m 说明
git tag -a $tag-name -m "v1.1 released" $commit-id
git tag -a v1.1 -m "V1.1" 6543bb

#用私钥签名一个标签
git tag -s $tag-name -m "pri-key" $commit-id
git tag -s v1.2 -m "pri-key v1.2" 6543bc

#删除标签
git tag -d $tag-name
git tag -d v1.2

#推送某个标签到远程
git pust origin $tag-name
git push origin v1.0

#推送全部标签
git push origin --tags





GitLab基本操作

GitLab常用命令:

#载入配置文件
gitlab-ctl reconfigure

#启动,关闭,重启服务
gitlab-ctl start | stop | restart

#检查服务日志信息
gitlab-ctl tail redis
gitlab-ctl tail postgresql
gitlab-ctl tail gitlab-workhorse
gitlab-ctl tail logrotate
gitlab-ctl tail nginx
gitlab-ctl tail sidekiq
gitlab-ctl tail unicorn
gitlab-ctl status
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 声明:这篇文章来源于廖雪峰老师的官方网站,我仅仅是作为学习之用 Git简介 Git是什么? Git是目前世界上最先...
    横渡阅读 3,941评论 3 27
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,647评论 4 54
  • 作者/Author:苏近之 地点/Address:浙江省杭州市浙江交通职业技术学院 时间/Time:2015年06...
    IYANYU阅读 304评论 0 2
  • 迷鹿mirror阅读 475评论 0 1
  • 同龄人之中,我结婚的不算早也称不上晚,刚毕业两年就结婚了!婆家位于稠木岭,有一座几代人居住的老房子和刚刚修葺好没几...
    忆莲阅读 334评论 0 0