美文网首页
Git与Gitlab

Git与Gitlab

作者: Zhang21 | 来源:发表于2017-11-07 19:42 被阅读35次

    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
    

    相关文章

      网友评论

          本文标题:Git与Gitlab

          本文链接:https://www.haomeiwen.com/subject/vexsmxtx.html