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
2su -r root #切到root管理员权限
root@gitServer:~$ groupadd git3.创建Git用户来使用Git服务。
1 | 添加一个名字叫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
3root@gitServer:~$ sudo adduser tom #建个tom用户。
root@gitServer:~$ passwd tom #给tom用户设置个密码。
root@gitServer:~$ su - tom #切到tom下工作。3.生成ssh密钥对。
1
2
3tom@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
2tom@gitServer:~$ cd .ssh
tom@gitServer:~$ scp id_rsa.pub tom@192.168.1.100:tom_pub_key5.建立测试目录和测试文件。
1
2
3tom@gitServer:~$ mkdir test
tom@gitServer:~$ cd test
tom@gitServer:~/test$ vi test.txt6.初始化git
1
2
3tom@gitServer:~/test$ git init
tom@gitServer:~/test$ git add .
tom@gitServer:~/test$ git commit -m '初始化测试。'7.提交一下试试。
1
2
3
4tom@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 config -global user.name
- 创建新版本库
- git clone
,克隆远程版本库 - git init ,初始化本地版本库
- git clone
- 修改和提交
- 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 merge
- 远程操作
- git remote -v ,查看远程版本库信息
- git remote show
,查看指定远程版本库信息 - git remote add
,添加远程版本库 - git fetch
,从远程库获取代码 - git pull
,下载代码及快速合并 - git push
,上传代码及快速合并 - git push
: / ,删除远程分支或标签 - git push -tags ,上传所有标签