lipeng 发表于 2018-9-17 09:16:32

Git入门:安装环境 版本回退 仓库实战 搭建git服务端

  备份MBR:ddif=/dev/sda of=/data/mbr.dump bs=512 count=1
  恢复MBR:ddif=/data/mbr.dump of=/dev/sda bs=446 count=1      --- 小 Q
  ---------------------------------------------------------------------------------------------------
  Git:Linus开发分布式版本控制系统,和Linux文件系统完美结合,win需要cygwin才可完美工作;
  1、优秀案例,github.com,作为仓库,实验起来很顺手;
  2、开发者可以git到线上仓库至本地,操作更改上传很是方便;
  3、功能的使用,命令操作很简单。目前趋势来说:git是版本管理系统的潮流方向。
  【搭建环境】
  1、安装并初始化仓库
  Centos:yum install -y epel-release ; yum install -y git
  Ubuntu:sudo apt-get install git
  windows:https://git-for-windows.github.io
  mkdir/home/gitroot
  cd/home/gitroot
  git init   //初始化为git仓库,生成.git目录
  2、提交文件到仓库
  echo -e "123\naaa\n456\nbbb" > 1.txt
  gitadd 1.txt//把1.txt添加到仓库中
  gitstatus    //查看本地库的状态
  gitcommit -m "add new file 1.txt"   //把1.txt提交到仓库,-m添加文件描述
初始使用该命令会提示:  
*** Please tell me who you are.
  
Run
  
git config --global user.email "you@example.com"
  
git config --global user.name "Your Name"
  
to set your account's default identity.
  
Omit --global to set the identity only in this repository.
  这是要让我们设置用户邮箱和用户名。根据它提示设置一下即可:
  gitconfig --global user.email "你的邮箱"
  gitconfig --global user.name "要使用的名字"
  echo -e "111111\n2222222222" >> 1.txt//先更改一下1.txt
  gitstatus    //查看当前仓库中的状态,比如是否有改动的文件
  gitdiff1.txt//可以对比1.txt本次修改了什么内容,相比较仓库里面的版本
  到此为止,一些简单常用的命令,也就熟悉了一些。

  【版本回退】
  实验版本回退功能,首先要多提交几次仓库更新内容,即变动仓库,执行add 和 commit。
  查看日志:gitlog
  显示所有:gitreflog
  逐行查看:gitlog --pretty=oneline

  指定版本回退:git reset --hard e261f7e15   //在对文件commit提交后,想要撤回的操作
  add之后回退:git reset HEAD 1.txt   //在对1.txt更改并add后,想要撤回的操作
  add之前回退:git checkout -- 1.txt//只更改了文件,还未add,想要撤回的操作
  提交后删除仓库的文件:
  echo"5555555555">> 3.txt
  gitadd3.txt
  gitcommit-m"add new file 3.txt"
  rm-f3.txt
  gitrm3.txt
  gitcommit-m"delect file 3.txt"
  【仓库实战】
  1、连接远程仓库
  如今用的最多的是https://github.com ,我们也先登录注册一个账号,之后创建一个仓库,

  我们在下载克隆仓库的时候,都会指定路径,如右上有两种可选方式http和ssh,如果用http需要关闭防火墙等,一般我们比较推荐ssh方式,既然是ssh协议,就要把客户端公钥复制过来;
  右上角点自己头像,选settings,选SSH and GPG keys,选New SSH key,将公钥粘贴在这。
  把本地的仓库推送到远程仓库:
  mkdir/home/test
  cd/home/test
  gitinit
  gitremote add origin https://github.com/Shanwn-git/test.git//建立连接
  echo "564646" > 1.txt
  gitadd 1.txt
  gitcommit -m "add 1.txt"
  gitpush -u origin master//把本地库推送到远程服务端,第二次可直接使用 git push
  error:The requested URL returned error: 403 Forbidden while accessing https://github.com/Shanwn-git/test.git/info/refs
  解决:vim.git/config
  
      repositoryformatversion = 0
  
      filemode = true
  
      bare = false
  
      logallrefupdates = true
  

  
#       url =    #将访问换为ssh协议地址即可
  
      url = git@github.com:Shanwn-git/test.git
  
      fetch = +refs/heads/*:refs/remotes/origin/*
  此时即可在github服务端查看test仓库中已经存在了1.txt文件
  error:failed to push some refs to ......................
  To prevent you from losing history, non-fast-forward updates were rejected
  Merge the remote changes before pushing again.See the 'Note about
  解决:git push -f   //强制推上去,覆盖原内容,原因:git中已有部分代码,不允许覆盖
  或:git fetch&&git merge   //===gitpull

  扩展:有时我们看懂了别人的仓库有好东西,想克隆到本地,之后是上传到自己的仓库,如下:
  gitclonegit://xxxxx
  gitpush-u origin master//错误:git://xxxx是以只读方式获取代码,无法直接进行push
  gitclonegit@xxxx
  gitpush-u origin master//正确:不过这种方式需要输入git仓库的密码
  2、分支管理
  分支是版本管理很重要的概念,用法:
  创建分支:gitbranchteng
  查看分支:gitbranch
  切换分支:gitcheckoutteng
  删除分支:gitbranch-dteng // git branch -D teng
  合并分支:gitmergetest//把test分支内容,合并到了master主支
  注:如果master和test分支同时编辑了文件1,合并时冲突了,则需要先处理冲突再合并;
  主分支贯穿所有分支,主分支操作可实时同步至分支,但分支却不能实时更新至主分支和其他分支。
  原则上:master分支不可操作,创建dev分支专门用作开发,在dev创建bob分支派给各开发人员。
  gitcheckoutdev//先切换到dev分支
  gitmergebob//将bob分支合到dev分支
  查看远程库信息:git remote -v
  查看远程分支:gitls-remoteorigin//origin由远程库信息得到
  连接远程分支:gitcheckout-b branch1origin/branch1 //服务端建立分支,名字最好对应
  拉取远程分支:gitpull
  下图是分支的创建删除和切换,以及github创建分支:


  3、标签管理
  标签类似于快照功能,我们可以给版本库打一个标签,记录版本库状态,便于恢复。
  切换分支:gitcheckoutmaster
  打标签:gittagv1.0
  查标签:gitshowv1.0
  看标签:gittag   //tag是针对commit来打标签的,so可针对历史commit打tag
  版本日志:gitlog --pretty=oneline--abbrev-commit
  针对日志打标签:gittagv1.146dc8r1da
  对标签进行描述:gittag-a v1.2-m "this is a tag v1.3"   46dc8r1da
  删除标签:gittag -dv1.3
  推送标签:gitpush origin v1.0
  推送所有:gitpush --tagorigin
  如果本地的标签删除了,也想把远程服务端标签删除,执行如下;
  gittagv1.3-d
  gitpushorigin:refs/tags/v1.3
  4、git 别名
  类似于Linux的别名alias,用来提高工作效率,可写到文件,随时拷贝到所用机器:
  checkout:gitconfig --global alias.co checkout
  commit:gitconfig --global alias.ci commit
  branch:gitconfig --global alias.br branch
  取消别名:gitconfig --global --unset alias br
  查看别名:gitconfig --list |grep alias
  查询log小技巧:
  git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%Creset' --abbrev-commit"
  5、保留现场
  这个功能不太常用,简单说一下:当你正进行一个项目时,突然运营找了过来,说线上有个东西bug了,需要马上处理,你又不想提交进行了一半的工作,若不提交,就会一直保留一个git状态,看起来很不舒服。此时我们就需要保留现场
  保留现场:gitstash
  恢复现场:gitstashapply
  查看现场:gitstashlist
  指定恢复:gitstashapplystash@{1}

  【搭建git服务器】
  虽然github很强大,但终归公开的,私有仓库又要花钱买,所以可以的话搭建属于公司的私有仓库。
  服务器端:
  yum install -y git
  useradd -s /usr/bin/git-shellgit   //添加git用户,并不让git用户远程登录
  cd/home/git
  mkdir.ssh
  touch.ssh/suthorized_keys
  chown-R git.git .ssh
  chmod600 .ssh/authorized_keys
  //然后将客户端的公钥放进去,测试登陆一下,会出现A shell字样,实在不放心可以先改git用户权限
  //usermod -s/bin/bash,然后登陆试试
  选择作为仓库的目录
  mkdir/data/git
  cd/data/git
  git init --bare sample.git//创建裸仓库,没有工作区,只为共享。大家可以实验比较区别
  chown -Rgit.git sample.git
  客户端:
  首先要将公钥拷贝到服务端keys文件;
  克隆仓库:gitclonegit@ip:/data/git/sample.git
  //之后就和服务端仓库建立连接,开始上传版本等。
  ---------------------------------------------------------------------------------------------------


页: [1]
查看完整版本: Git入门:安装环境 版本回退 仓库实战 搭建git服务端