Git服务器搭建与使用

2020.9

系统

  • Ubuntu/Centos

Git服务器搭建

  1. 安装Git(指服务器端)

    # ubuntu
    sudo apt-get install git
    # centos
    yum install -y git
  2. 创建一个git用户组和用户,用来运行git服务(指服务器端)

    # 创建用户组,名称为git
    groupadd git
    # 在git用户组下创建git用户
    useradd git -g git

    tips:

    # 查看所有用户组
    cat /etc/group
    # 查看用户
    cat /etc/passwd
  3. 创建证书登陆(添加密钥,省去反复输入密码,可省略)(指服务器端)

    # 以下目录或文件不存在的话自行新建即可
    # mkdir /home/git
    # mkdir /home/git/.ssh
    # touch /home/git/.ssh/authorized_keys
    cd /home/git/.ssh
    chmod 755 .ssh
    chmod 644 ./authorized_keys

    将所有需要登录的用户的公钥复制到authorized_keys中,多个的话回车换行即可。

    # (以下指客户端)
    # 查看ubuntu下本地密钥(若无密钥,则生成密钥)
    cat ~/.ssh/id_rsa.pub 
    
    # 生成密钥
    ssh-keygen -t rsa -C "your_email@example.com"
    # 之后一路回车,就生成了
    # Ubuntu/Mac 按上述命令查看密钥,Win一般会生成密钥之时告诉你文件保存在哪
  4. 初始化git仓库(指服务器端)

    cd /home/
    mkdir $your_object_dir
    # 修改文件夹所有者为git群组下的git用户
    chown git:git $your_object_dir
    cd $your_object_dir
    git init --bare $your_repositories.git
    # 修改仓库所有者
    chown -R git:git $your_repositories.git
    # 修改git用户密码(这个即git上传或者下载的密码,初始化git用户时一定记得修改密码)
    passwd git

Git服务器使用

  1. 将公钥复制到服务器端的authorized_keys中(免去多次输密码过程,可以跳过这步)

    # 查看ubuntu下本地密钥(若无密钥,则生成密钥)
    cat ~/.ssh/id_rsa.pub 
    
    # ubuntu/mac/win 生成密钥
    ssh-keygen -t rsa -C "$your_email@example.com"
    # 之后一路回车,就生成了
    # Ubuntu/Mac 按上述命令查看密钥,Win一般会生成密钥之时告诉你文件保存在哪
  2. Git 使用

    git clone git@$server_ip:/home/$your_object_dir/$your_repositories.git

    比如:

    git clone git@222.20.1.1:/home/hustgit/project_1.git
    password:$passwd
    • 推荐使用sourcetree,支持windows&mac,界面如图所示:

    • 现将常用部分进行简单介绍:

      • 文件状态:

        展示了当前分支下被修改的文件(已被暂存和未被暂存的文件)。将需要提交的未暂存文件打钩即可暂存,将已暂存的文件进行提交,即完成了本地的提交。提交信息一般为所提交内容的简介,建议使用如下格式:

        add : 新提交的文件或者新增加的功能
        modify : 修改某个功能
        fix : 修复某个bug
        ……
      • 历史:

        展示了各个分支修改的历史版本,这里可以看到本地和远程分支的所有历史记录,同一颜色的线表示某个分支的修改记录以及提交信息。双击某个节点即可切换到相应的版本。

      • 分支:

        展示了本地上的所有分支。双击分支名字,即可切换到对应的分支,后续修改以及提交,都将在所选分支上进行。初次协作开发项目时,建议新增一个本地分支,如:gaojunbin_branch 新建分支时,需要选择基于哪个分支,即选择分支进行检出新的分支,在所选分支上进行自己的开发,当然后续开发完成后也可以将自己的分支合并到其他分支(如master分支上)。值得说明的是,mater分支一般为主分支,应该是相对稳定,可以发行的版本。一般先在dev分支或者个人分支上开发完成且经过测试无误后,合并到master分支。

      • 标签

        一般用作发行版本,如将master发布成V1.0.0版本等

      • 远端

        展示了远程分支(即服务器上已经存在或上传的分支)。初次建立本地新分之后,或者在某个分支上修改完成后,及时点击推送(push)到服务器端,这样别人在克隆(clone)或者拉取(pull)的时候才可以看到你的修改。

      • 关于分支的合并,以及拉取(pull)与抓取(fetch)的区别

        一般情况下,某个分支如果开发完成某个新的功能,需要合并到master分支上时,如果没有文件存在冲突,那么会直接合并成功。如果存在冲突文件,那么需要进行手动筛选具体保留的内容。而git pull和git fetch的区别就在这里,fetch从远程获取最新版本到本地,但不会自动merge,但是pull相当于从远程获取最新版本并merge到本地,在实际使用中,git fetch更安全一些,因为在merge之前,我们可以查看更新情况,然后再决定是否合并。

      • 关于gitigore取消对文件的追踪,见参考资料【4】

      • ……

参考资料

【1】https://www.liaoxuefeng.com/wiki/896043488029600/899998870925664

【2】https://www.runoob.com/git/git-server.html

【3】https://blog.csdn.net/jincheng_921/article/details/80882282

【4】https://www.liaoxuefeng.com/wiki/896043488029600/1317161920364578

【5】https://www.cnblogs.com/sxy370921/p/11734628.html

【6】https://blog.csdn.net/jincheng_921/article/details/80882282

【7】https://blog.csdn.net/u012564117/article/details/90218092

Last updated