skypaladin 发表于 2018-9-17 06:47:31

分布式代码管理系统Git

  1. centos上安装git
  yum install -y epel-release
  yum install -y git
  设置用户标识,否则初始使用该命令会提示
  git config --global user.name "silen"
  git config --global user.email "silen@huanglearn.cn"

  2. 创建版本库
  mkdir/home/gitroot
  cd /home/gitroot
  git init   //用这个命令初始化,让这个目录变成git可以管理的仓库,配置等文件在.git目录下

  3. 提交文件到仓库
  1)echo -e "123\naaa\n456\nbbb" > 2.txt//创建一个文件 2.txt
  2)git add 2.txt//把2.txt添加到仓库中
  3)git commit -m "add new file 2.txt"   //add完了必须要commit才算真正把文件提交到git仓库里,自定义描述

  1)echo -e "ccc\nddd">>2.txt//先更改一下2.txt
  2)git status   //查看当前仓库中的状态,比如是否有改动的文件

  3)git diff 2.txt//可以对比2.txt本次修改了什么内容,相比较仓库里面的版本,a是线上;b是本地

  4)git status//修改了2.txt文件之后,查看状态;提示可以提交或者放弃更改

  5)git checkout -- 2.txt   //放弃修改或恢复删除,再次查看内容不发生改变

  6)git add 2.txt   //再次commit之前,也可以撤销

  7)git reset HEAD 2.txt//撤销,回到了上一步

  4. 结合日志版本回退
  1)echo -e "eee\nfff">>2.txt    //修改多提交第一次
  git add 2.txt
  git commit -m "change once 2.txt"
  2)echo -e "ggg\nhhh">>2.txt    //修改多提交第二次
  git add 2.txt
  git commit -m "change twice 2.txt"
  3)git log   //可以查看所有提交git仓库的记录操作

  4)git log --pretty=oneline   //一行显示,更清楚

  5)git reset --hard b0b97   //根据这个log,我们可以指定回退第一个版本,后面跟的字符串可以简写。

  6)git reflog//当回退到某版本后,再git log 则之后的版本不再显示了,用该命令显示所有的版本,以供继续恢复

  5. 撤销修改
  1)已修改或删除2.txt,还没有add,用checkout恢复到上一次提交时的状态
  git checkout -- 2.txt
  2)已修改或删除2.txt,已经add,但还没commit,先用reset HEAD,再用checkout恢复到上一次提交时的状态
  gitreset HEAD 2.txt
  git checkout -- 2.txt
  3)既已add,也已commit,用版本回退方法恢复到上一次提交时的状态
  6. 删除
  1)cp 2.txt 3.txt   //创建一个新文件,提交
  git add 3.txt
  git commit -m "add a new file 3.txt"
  2)rm -f 2.txt//删除版本库中的文件
  git status //可以看到,提示2.txt文件被删除了

  3)gitcheckout -- 3.txt//如果要想恢复,直接用
  4)git rm 3.txt    //在git仓库里删除,此步可以用 reset HEAD 撤销
  git commit -m "delete 3.txt"    //彻底删除3.txt

  7. 做一个远程仓库(github)
  1)https://github.com 注册一个账号,创建自己的git
  点repositories--> new(名字自定义,比如叫studygit)->选择public,点create repository
  2)添加key:
  右上角点自己头像,选择settings,左侧选择SSH and GPG keys
  右上角点New SSH key,把linux机器上的 /root/.ssh/id_rsa.pub内容粘贴到这里(生成公钥命令 ssh-keygen)
  3)把本地参考推送到远程仓库
  a. mkdir /home/studygit
  cd /home/studygit
  git init    //初始化
  git remote add origin git@github.com:huangzp-silen/studygit.git//本地的study仓库和远程study联系在一起
  b. echo "test,test,test">test.txt    //在本地仓库目录中创建一个文件并提交
  git add test.txt
  git commit -m "create a new file test.txt"

  c. git push -u origin master//远程推送,第一次连接需要验证提示;下一次就可以直接 git push

  d. github中查看,已推送成功

  e. 编辑test.txt,在本地仓库提交之后,再远程推送git push

  f. 克隆一个远程仓库
  A. cd /home
  git clonegit@github.com:aminglinux/lanmp.git   //克隆一个远程仓库至本地目录
  B. cdlanmp
  vi lanmp.sh//编辑克隆下来的文件
  rm -rf ./git    //删除配置文件
  git init          //重新初始化配置文件
  C. git add lanmp.sh   //提交至本地仓库
  git commit -m "change lanmp.sh"
  D. 登录github,创建一个lanmp项目
  git remote add origin git@github.com:huangzp-silen/lanmp.git//同步关联
  git push -u origin master   //然后再推送到远程服务端
  8. 分支管理
  说明:master分支基本不动(即不修改文件,只做合并),只有测试完成才合并至master,平时一般使用开发分支,错了也没关系
  1)git branch//查看分支
  git branch silen//创建分支
  git checkout silen   //切换分支,星号标识

  2)在silen分支下 ,编辑2.txt,并提交到新分支
  echo "silen">silen.txt
  git add silen.txt
  git commit -m "create a new file silen.txt"
  git checkout master   //切换回master分支,查看文件,并没发现silen.txt

  3)合并分支,开发过程中,经常需要将多人的分支合并
  git checkout master   //先换到需要合并的目标分支上去,如master
  git merge silen          //把silen分支合并到了master,只更新源分支(silen)文件的内容,目标分支(master)就算改动了也不会变,一般不会更改master分支

  注:master分支和silen分支都对silen.txt进行了编辑,当合并时会提示冲突,方法:在master分支下,编辑silen.txt,改为silen分支里面silen.txt的内容,然后提交silen.txt,再合并silen分支(或者反过来)。合并分支有一个原则,最新的分支合并到旧的分支
  4)删除分支
  gitbranch -d aming   //若分支没有合并,删除之前会提示合并
  git branch -D aming   //强制删除分支,即删除前不合并内容,会丢失数据

  5)分支应用原则
  master分支非常重要,线上发布代码用这个分支,平时开发代码不要在这个分支上,而是创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master。开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己pc上)里面开发代码,然后合并到dev分支

  9. git stash 保留现场
  当我们在silen分支,编辑了一个新的文件4.txt,这时候我们需要到其他分支去修复一个bug,所以需要保留现场,如果不这么做,每次(可能是其他同事)提交该分支,会有4.txt需提交的提示
  1)git add 4.txt//提交一下,但是不commit
  2)gitstash       //保存一下现场,该文件影藏掉

  3)切换到另外分支去修复bug,修复完bug后,再回到silen分支
  git stash list       //查看保存过的现场
  git stash apply   //恢复现场,文件显示回来
  git stash apply stash@{1}   //可以指定恢复

  10. 远程分支
  1)在web上,可以进行分支的创建、切换、删除、恢复等操作

  2)查看远程库信息,使用git remote -v,查看到origin名字, 本地新建的分支如果不推送到远程,对其他人就是不可见的

  通过名字origin命令,查看远程分支git ls-remote origin

  3)从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交


  4)给远程master分支推送文件

  web端同步文件

  5) 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
  cat .git/config   //查看配置文件,得出远程URL,以供克隆使用

  rm -rf studygit/
  git clone git@github.com:huangzp-silen/studygit.git

  web上创建dev2分支,本地同步
  git checkout -b dev2 origin/dev2

  6) 从远程抓取分支,使用git pull
  11. 标签管理
  标签类似于快照功能,我们可以给版本库打一个标签,记录某个时刻库的状态。我们可以随时恢复到该状态
  1)git checkout master   //先切到master分支上
  git tag v1.0   // 给master打一个标签v1.0
  git tag   //查看所有的标签
  git show v1.0   //显示详细信息


  2)tag是针对commit来打标签的,所以可以针对历史的commit来打tag
  git log --pretty=oneline --abbrev-commit
  git tag v0.9 46d3c1a
  git tag -a v0.8 -m "tag just v1.1 and so on"5aacaf4//可以对标签进行描述

  3)git tag -d v0.8   //删除标签

  4)git push origin v1.0   //推送指定标签到远程
  git push --tag origin   //推送所有标签


  5)如果本地删除了一个标签,远程也想要删除需要这样操作:
  git tag v1.0 -d
  git push origin :refs/tags/v1.0

  12. 巧用别名
  1) git commit 这个命令是不是有点长? 用别名可以提高我们的工作效率,可以在配置文件中修改/root/.gitconfig
  git config --global alias.ci commit
  git config --global alias.cocheckout
  git config --global alias.brbranch
  2) 查看git别名使用命令
  git config --list |grep alias
  3) 查询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"

  4) 取消别名
  git config --global --unset alias.br
  13. 搭建git服务器
  github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的
  1)yum install -y epel-reales
  yum install -y git      //安装git
  useradd -s /usr/bin/git-shell git   //添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆,如果要登录,则usermod -s /bin/bash git
  2) cd /home/git
  mkdir .ssh
  touch .ssh/authorized_keys//存放客户机的公钥
  chown -R git.git .ssh
  chmod 700 .ssh/authorized_keys
  3)定好存储git仓库的目录,比如 /data/gitroot
  mkdir /data/gitroot
  cd /data/gitroot
  git init --bare sample.git // 会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾
  chown -R git.git sample.git
  客户端上(自己pc)克隆远程仓库
  以上操作是在git服务器上做的,平时git服务器是不需要开发人员登录修改代码的,它仅仅是充当着一个服务器的角色,就像github一样,平时操作都是在我们自己的pc上做的。
  1)把客户端上的公钥放到git服务器上/home/git/.ssh/authorized_keys文件里
  2)git clone git@ip:/data/gitroot/sample.git


  此时就可以在当前目录下生成一个sample的目录,这个就是我们克隆的远程仓库了。进入到这里面,可以开发一些代码,然后push到远程;还需结合git lab图形化一起使用

页: [1]
查看完整版本: 分布式代码管理系统Git