设为首页 收藏本站
查看: 1385|回复: 0

[经验分享] 分布式代码管理系统Git

[复制链接]

尚未签到

发表于 2018-9-17 06:47:31 | 显示全部楼层 |阅读模式
  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"
DSC0000.png

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

  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仓库里,自定义描述
DSC0002.png

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

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

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

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

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

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

  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仓库的记录操作
DSC0009.png

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

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

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

  5. 撤销修改
  1)已修改或删除2.txt,还没有add,用checkout恢复到上一次提交时的状态
  git checkout -- 2.txt
  2)已修改或删除2.txt,已经add,但还没commit,先用reset HEAD,再用checkout恢复到上一次提交时的状态
  git  reset 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文件被删除了
DSC00013.png

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

  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"
DSC00015.png

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

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

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

  f. 克隆一个远程仓库
  A. cd /home
  git clone  git@github.com:aminglinux/lanmp.git   //克隆一个远程仓库至本地目录
  B. cd  lanmp
  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   //切换分支,星号标识
DSC00019.png

  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
DSC00020.png

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

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

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

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

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

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

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

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

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

DSC00031.png

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

  web端同步文件
DSC00033.png

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

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

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

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

DSC00038.png

  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  //可以对标签进行描述
DSC00039.png

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

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

DSC00042.png

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

  12. 巧用别名
  1) git commit 这个命令是不是有点长? 用别名可以提高我们的工作效率,可以在配置文件中修改/root/.gitconfig
  git config --global alias.ci commit
  git config --global alias.co  checkout
  git config --global alias.br  branch
  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"
DSC00044.png

  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
DSC00045.png

DSC00046.png

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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-587988-1-1.html 上篇帖子: Git系列六之备份迁移、升级恢复管理 下篇帖子: GIt的备份和恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表