zoukankan      html  css  js  c++  java
  • centos上搭建git服务--4

      Git是目前世界上最先进的分布式版本控制系统(没有之一)。使用Svn的请参考《版本控制-svn服务器搭建和常用命令(centos 6.3)》,下面介绍Git的常用命令

    常用命令

      简单版

      升级版

      其他

    服务器搭建

      本地服务器搭建

      Gitolite搭建

      


      一、简单版

      1、创建版本库

    git init

      2、新增修改,新增文件到缓存区

    git add

      3、比较文件的差异

    git diff

      4、查看仓库状态

    git status

      5、从缓存区提交修改(新增)到版本库

    git commit -m 'add a.txt'

      6、查看提交日志

    git log (--pretty=oneline)

      7、HEAD表示当前版本,HEAD^表示上个版本,HEAD^^上上个版本,HEAD~100表示网上100个版本

      8、更新到指定版本(没有撤销本地修改)

    git reset --hard HEAD^
    git reset --hard 3628164  # 能区分一个版本的commit id即可

      9、查看每一次命令

    git reflog

      10、撤销工作区的修改

    git checkout --file  

    假设错误修改了readme.txt,并且git add到了缓存区

    git reset HEAD readme.txt   # 回到最新版本,撤销缓存区的修改
    git checkout --readme.txt   #  撤销本地修改

      11、删除文件

    删除本地文件直接rm

    删除版本库文件

    git rm a.txt 
    git commit -m‘rm a.txt’

    删除暂存区文件

    git rm --cache a.txt
    
    git checkout HEAD(a.txt)  # 会清除工作区和暂存区的修改

      二、升级版

      1、从github添加远程仓库(origin是远程库默认名称,可以更改)

    git remote add origin git@github.com:***/learngit.git

      2、把本地的所有修改推送到远程库(push是用本地的master分支,-u是表示第一次将远程库的master和本地的master关联)

    git push (-u) origin master

      3、克隆一个仓库(支持ssh和https协议,ssh原生且最快)

    git clone git@github.com:***/gitskills.git

      4、创建一个分支并切换到该分支(git鼓励使用分支)

    git checkout -b dev

    等于两个命令

    git branch dev
    git checkout dev

      5、分支命令

    复制代码
    查看分支:git branch
    创建分支:git branch <name>
    切换分支:git checkout <name>
    创建+切换分支:git checkout -b <name>
    合并某分支到当前分支:git merge <name>
    删除分支:git branch –d(D) <name>
    删除远程分支:git push origin :serverfix
    复制代码

      6、查看分支合并情况日志

    git log –graph
    
    git log --graph --pretty=oneline --abbrev-commit

      7、分支管理策略

    master是稳定版本,开发的在其他分支上,稳定后合并到master。

    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward(默认)合并就看不出来曾经做过合并

    git merge --no-ff -m "merge with no-ff" dev
    git log --graph --pretty=oneline --abbrev-commit

      8、挂起工作场景

    git stash    # 挂起
    git stash list   # 查看
    
    git stash pop  # 恢复并删除
    等于 
    git stash apply && git stash drop

      9、多人协作

    用下面命令推送自己的修改

    git push origin branch-name

    如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用下面命令推送就能成功

    git push origin branch-name

    如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令

    git branch --set-upstream branch-name origin/branch-name

      10、标签操作

    复制代码
    git tag <name>    # 新建标签,默认为HEAD,可以指定commit id
    git tag -a <tagname> -m "blablabla..."    # 指定标签信息
    git tag -s <tagname> -m "blablabla..."    # 用PGP签名标签名
    git tag # 查看所有标签
    git show <tagname> # 看到说明
    git tag -d <tagname> # 本地删除标签
    git push origin <tagname> # 推送标签到远程仓库
    git push origin --tags # 一次性推送所有标签到远程仓库
    复制代码

    PGP签名的标签是不可伪造的,因为可以验证PGP签名。验证签名的方法比较复杂

    要删除远程仓库的标签需要使用

    git tag -d <tagname>
    git push origin :refs/tags/<tagname>

      三、其他

      1、忽略文件

    在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。我们并不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

      2、配置别名

    git config --global alias.co checkout
    git config --global alias.ci commit
    git config --global alias.br branch

    每个仓库的Git配置文件都放在.git/config文件中

      四、搭建本地Git服务器

    详情可参考廖雪峰官方网站 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

      1、安装git

    yum install git -y
    
    [root@master git]# git version
    git version 1.7.1

      2、新建git账号

    [root@master git]# useradd git
    
    [root@master git]# passwd git
    
    [root@master git]# mkdir /data1/git

      3、生成ssh key

    复制代码
    [root@master git]# su - git
    
    [git@master ~]$ ssh-keygen -t rsa
    
    [git@master .ssh]$ cd ~/.ssh/
    
    [git@master .ssh]$ touch authorized_keys
    
    [git@master .ssh]$ chmod 600 authorized_keys 
    复制代码

    收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。  

      4、初始化git仓库

    复制代码
    切回Root账户
    
    [root@master ~]# cd /data1/git/
    
    [root@master git]# git init --bare project.git
    Initialized empty Git repository in /data1/git/project.git/
    
    [root@master git]# chown -R git: /data1/git/
    复制代码

      5、禁用shell登陆

    处于安全考虑一般禁用git账户被远程登陆shell。修改/etc/passwd

    [root@master git]# vim /etc/passwd
    
    将 git:x:502:502::/home/git:/bin/bash  修改为
    git:x:502:502::/home/git:/usr/bin/git-shell
    [root@master git]# su - git
    fatal: What do you think I am? A shell?

      6、其他地方克隆仓库

    现将公钥添加到 authorized_keys文件中

    git clone ssh://git@master:322/data1/git/project.git

    管理公钥可以使用 Gitosis ,因为authorized_keys文件大了很难管理。管理权限请参考下面

      五、Gitolite搭建教程

    参考官网 https://git-scm.com/book/zh/v1/服务器上的-Git-Gitolite

      1、前期准备

    git服务器git@10.16.4.14,git admin机器git@10.16.4.15

    复制代码
    root@10.16.4.14$ useradd git
    root@10.16.4.14$ passwd git
    root@10.16.4.14$ su - git
    
    admin git@10.16.4.15
    root@10.16.4.15$ useradd git
    root@10.16.4.15$ passwd git
    root@10.16.4.15$ su - git
    root@10.16.4.15$ ssh-keygen -t -P ''
    复制代码

    send git.pub to git@10.16.4.14:322/home

      2、Admin使用

    git clone

    git@10.16.4.15 git clone ssh://git@10.16.4.14:322/gitolite-admin

    add user

    1)获取用户的public ssh key,例如test@10.1.32.164.pub
    2)将`1`的pub存放到git@10.16.4.15 /home/git/gitolite-admin/keydir 文件夹下
    3)修改/home/git/gitolite-admin/conf/gitolite.conf,赋予`1`用户的仓库权限
    4)git add && git commit -m 'add user test...' && git push origin master
    5)登陆test@10.1.32.164,git clone `3`中的仓库

      3、权限控制

    参考 https://git-scm.com/book/zh/v1/服务器上的-Git-Gitolite

    参考 http://perthcharles.github.io/2015/08/24/setup-gitolite-service-git-1

      4、解决密码过期问题

    复制代码
    [git@Dev_10_16_4_15 gitolite-admin]$ git push origin master 
    WARNING: Your password has expired.
    Password change required but no TTY available.
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.
    复制代码

    解决命令

    [root@Dev_10_16_4_14 ~]# chage -M 999 git
  • 相关阅读:
    Leetcode: Longest Absolute File Path
    Leetcode: Mini Parser
    Leetcode: First Unique Character in a String
    Leetcode: Lexicographical Numbers
    Leetcode: Shuffle an Array
    Leetcode: Ransom Note
    Leetcode: Linked List Random Node
    Socket网络编程--聊天程序(7)
    Socket网络编程--聊天程序(6)
    Socket网络编程--聊天程序(5)
  • 原文地址:https://www.cnblogs.com/VseYoung/p/git4.html
Copyright © 2011-2022 走看看