Git服务器搭建

Git

Git是一个免费、开源、分布式的版本控制系统。它是为了liunx内核的开发而设计使用的版本开发工具。由于linux内核开发项目本身的要求,对版本工具有快速高效、分布、跟踪能力、合并等等特性需求,所以Git的起初构建时就有这些的特点。

随着后来Git项目逐渐友好,并开始支持windows,这个开源的版本控制系统终于变得十分流行。

很多人都是用Git配合github来做自己的版本管理,对开源项目来说是一个天然的组合。不过对于私有项目又不愿意给github缴费的话,可以搭建一个自己的Git服务器。

Git 服务器搭建

服务器搭建

既然需要搭建Git服务器那就是有一个团队要使用,我们以Ubuntu为例来看一下Git服务器的搭建:

  • 1.一般来说为了保证安全性和提高一些效率,会使用SSH协议,最常用的是开源的OpenSSH。先来安装一下:
    1
    $ sudo apt-get install openssh-server

安装完成后可以看一下:

1
$ ps –e|grep ssh

另外做一下设置:

1
$ sudo vi /etc/ssh/sshd_config

找到下面几行,去掉前面”#”注释,并设置:

StrictModes no –在用户名和其公钥文件名不匹配时将通过验证

RSAAuthentication yes –使用纯的RSA认证

PubkeyAuthentication yes –允许Public Key AuthorizedKeysFile %h/.ssh/authorized_keys

  • 2.创建一个Git用户组,方便以后管理。

    1
    2
    $su -r root  #切到root管理员权限
    root@gitServer:~$ groupadd git
  • 3.创建Git用户来使用Git服务。

1
2
3
4
5
6
7
8
# 添加一个名字叫git的用户
root@gitServer:~$ sudo adduser git #建个git用户。
root@gitServer:~$ passwd git #给git用户设置个密码。
root@gitServer:~$ usermod -G git git #将git用户加到git用户组。
# 添加一个名字叫tom的用户
root@gitServer:~$ sudo adduser tom #建个tom用户。
root@gitServer:~$ passwd tom #给tom用户设置个密码。
root@gitServer:~$ usermod -G git tom #将tom用户加到git用户组。
    1. 设置访问权限。
1
$ sudo vim /etc/sudoers

接下来进到vi编辑器,找到下面这行并添加git、tom用户:

# User privilege specification

root ALL=(ALL:ALL) ALL

git ALL=(ALL:ALL) ALL

tom ALL=(ALL:ALL) ALL

然后就可以切换到git用户下了:

1
root@gitServer:~$ su - git #切到git下工作。
  • 5.安装Git包。

    1
    git@gitServer:~$ sudo apt-get install git git-core
  • 6.建个空白的仓库。

    1
    git@gitServer:~$ git –-bare init demo.git
  • 7.把tom复制过来的的公钥加到密钥权限文件中。(对应客户端条件执行完第4步)

    1
    $ cat ~/tom_pub_key >>~/.ssh/authorized_keys
  • 8.重启ssh服务。

    1
    git@gitServer:~$ sudo /etc/init.d/ssh restart 
  • 9.出于安全考虑,配置彻底完成后设置git用户不允许登录shell,通过 vi打开编辑/etc/passwd文件,找到下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell。

客户端

  • 1.客户端也一样要安装OpenSSH、git、git-core。先来安装一下:
1
$ sudo apt-get install openssh-server、git、git-core
  • 2.添加用户tom。

    1
    2
    3
    root@gitServer:~$ sudo adduser tom  #建个tom用户。
    root@gitServer:~$ passwd tom #给tom用户设置个密码。
    root@gitServer:~$ su - tom #切到tom下工作。
  • 3.生成ssh密钥对。

    1
    2
    3
    tom@gitServer:~$ ssh-keygen -t rsa  #生成密钥对。
    tom@gitServer:~$ ls -al .ssh/ #查一下。
    tom@gitServer:~$ cat .ssh/id_rsa.pub #看看你的公钥值。
  • 4.假设服务器的ip是192.168.1.100,把公钥copy过去。

    1
    2
    tom@gitServer:~$ cd  .ssh
    tom@gitServer:~$ scp id_rsa.pub tom@192.168.1.100:tom_pub_key
  • 5.建立测试目录和测试文件。

    1
    2
    3
    tom@gitServer:~$ mkdir test
    tom@gitServer:~$ cd test
    tom@gitServer:~/test$ vi test.txt
  • 6.初始化git

    1
    2
    3
    tom@gitServer:~/test$ git init 
    tom@gitServer:~/test$ git add .
    tom@gitServer:~/test$ git commit -m '初始化测试。'
  • 7.提交一下试试。

    1
    2
    3
    4
    tom@gitServer:~/test$ git remote add origin tom@192.168.1.100:/home/git/demo.git
    tom@gitServer:~/test$ git config --global user.name tom
    tom@gitServer:~/test$ git config --global user.email tom@hubwiz.com
    tom@gitServer:~/test$ git push origin master

更多的Git使用学习内容大家可以看汇智网免费Git课程

如果团队人数很多就需要使用Gitosis来管理人员权限了,手动命令管理太麻烦了,也不好记。另外B/S架构的Git服务器,可以试试GitWeb、GitLab。

附Git基本操作:

  • 初始化操作
    • git config -global user.name ,设置提交者名字
    • git config -global user.email ,设置提交者邮箱
    • git config -global core.editor ,设置默认文本编辑器
    • git config -global merge.tool ,设置解决合并冲突时差异分析工具
    • git config -list ,检查已有的配置信息
  • 创建新版本库
    • git clone ,克隆远程版本库
    • git init ,初始化本地版本库
  • 修改和提交
    • git add . ,添加所有改动过的文件
    • git add ,添加指定的文件
    • git mv ,文件重命名
    • git rm ,删除文件
    • git rm -cached ,停止跟踪文件但不删除
    • git commit -m ,提交指定文件
    • git commit -m “commit message” ,提交所有更新过的文件
    • git commit -amend ,修改最后一次提交
    • git commit -C HEAD -a -amend ,增补提交(不会产生新的提交历史纪录)
  • 查看提交历史
    • git log ,查看提交历史
    • git log -p ,查看指定文件的提交历史
    • git blame ,以列表方式查看指定文件的提交历史
    • gitk ,查看当前分支历史纪录
    • gitk ,查看某分支历史纪录
    • gitk –all ,查看所有分支历史纪录
    • git branch -v ,每个分支最后的提交
    • git status ,查看当前状态
    • git diff ,查看变更内容
  • 撤消操作
    • git reset -hard HEAD ,撤消工作目录中所有未提交文件的修改内容
    • git checkout HEAD ,撤消指定的未提交文件的修改内容
    • git checkout HEAD. ,撤消所有文件
    • git revert ,撤消指定的提交
  • 分支与标签
    • git branch #显示所有本地分支
    • git checkout <branch/tagname> ,切换到指定分支或标签
    • git branch ,创建新分支
    • git branch -d ,删除本地分支
    • git tag ,列出所有本地标签
    • git tag ,基于最新提交创建标签
    • git tag -d ,删除标签
  • 合并与衍合
    • git merge ,合并指定分支到当前分支
    • git rebase ,衍合指定分支到当前分支
  • 远程操作
    • git remote -v ,查看远程版本库信息
    • git remote show ,查看指定远程版本库信息
    • git remote add ,添加远程版本库
    • git fetch ,从远程库获取代码
    • git pull ,下载代码及快速合并
    • git push ,上传代码及快速合并
    • git push : / ,删除远程分支或标签
    • git push -tags ,上传所有标签