Git
Git是一个免费、开源、分布式的版本控制系统。它是为了liunx内核的开发而设计使用的版本开发工具。由于linux内核开发项目本身的要求,对版本工具有快速高效、分布、跟踪能力、合并等等特性需求,所以Git的起初构建时就有这些的特点。
随着后来Git项目逐渐友好,并开始支持windows,这个开源的版本控制系统终于变得十分流行。
很多人都是用Git配合github来做自己的版本管理,对开源项目来说是一个天然的组合。不过对于私有项目又不愿意给github缴费的话,可以搭建一个自己的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 | $ 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 ,上传所有标签