你要了解的常识html
版本控制,记录若干文件内容变化,以便未来查阅特定版本修订状况
版本管理工具发展简史,cvs svn git 参考http://luckypoem14.github.io/test/2012/04/24/scm-history/
svn全称subversion,是一个开源版本控制系统,始于2000年
git是linux创始人linus发起的,2005年发布,最初目的是更好管理linux内核代码
git和svn不一样在于git不须要依赖服务端就能够工做,即git是分布式的
关于git和svn的比较你们参考http://blog.lishiming.net/?p=305
github是基于git的在线web页面代码托管平台,能够选择付费服务
gitlab能够认为是一个开源的github,二者没有直接关系linux
安装svngit
yum install -y subversion
建立版本库
mkdir -p /data/svnroot/myproject
svnadmin create /data/svnroot/myproject
cd !$/conf #authz为权限配置文件,passwd为密码文件
vim authz//配置文件改成以下
[groups]
admins = aming,user1
[/]
@admins = rw
*= r
[myproject:/]
user1 = rwgithub
vim passwd//加入以下内容
[users]
aming = aming!(*$123
user1 = user1^^^123
user2 = user2-***123
vim svnserver.conf//更改或增长以下内容
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = /data/svnroot/myproject
svnserve -d -r /data/svnroot //这样就启动了web
客户端上使用svn(linux)shell
yum install -y subversion
svn checkout svn://192.168.133.130/myproject --username=aming
cd myproject ; ls -la
cp /etc/fstab .
svn add . //添加到版本控制中心
svn commit -m “add file” //把文件上传到服务器
svn delete filename //在本地删除
svn commit -m “delete filename” //在服务器上删除
svn update //把当前目录下的文件都更新到最新版
svn log //查看变动日志vim
客户端上使用svn(windows)windows
官网 https://tortoisesvn.net/index.zh.html
下载TortoiseSVN 并安装
简明教程 http://www.jianshu.com/p/6b3b7b915332centos
单机上使用git浏览器
版本回退
多更改几回1.txt,而后add,commit
git log//查看全部提交记录
git log --pretty=oneline//一行显示
git reset --hard f7c8e9//回退版本,其中后面跟的字符串是简写
撤销修改
rm -f 1.txt//不当心删除了1.txt
git checkout -- 1.txt//恢复1.txt
若是1.txt文件修改,add后但没有commit,再想回退到上一次提交的状态,可使用git reset HEAD 1.txt,再执行git checkout -- 1.txt
git reflog //查看全部历史版本
删除文件
echo -e "11111111111\n2222222222" > 2.txt
git rm 2.txt
git commit -m "rm 2.txt"
创建远程仓库
首先到 https://github.com 注册一个帐号,建立本身的git,点repositories 再点new
名字自定义,好比叫studygit 选择public 点 create repository
添加key:右上角点本身头像,选择settings,左侧选择SSH and GPG keys
左侧点New SSH key,把linux机器上的~/.ssh/id_rsa.pub内容粘贴到这里
把本地仓库推送到远程仓库 git remote add origin git@github.com:aminglinux/studygit.git //这一步是在远程建立一个新的仓库studygit,名字尽可能和本地的一致
git push -u origin master //而后把本地的studygit仓库推送到远程的studygit
下一次再推送,就能够直接 git push
克隆远程仓库
cd /home
git clone git@github.com:aminglinux/lanmp.git
它提示,会在当前目录下初始化一个仓库,并建立一个.git的目录,以下
Initialized empty Git repository in /home/lanmp/.
git/完成后,ls能够看到一个lanmp的目录
cd lanmp
vi lanmp.sh 编辑一下文件,而后提交
git add lanmp.sh
git commit -m "sdlfasdf"
而后再推送到远程服务端
git push
分支
git branch //查看分支
git branch aming //建立分支
git checkout aming //切换到了aming分支下
再用git branch查看,会看到有两个分支master和aming,当前使用的分支前面会有一个*在aming分支下 ,编辑2.txt,并提交到新分支
echo "askdfjlksadjflk" > 2.txt
git add 2.txt
git commit -m "laksjdflksjdklfj"
切换回master分支
git checkout master //此时cat 2.txt发现并无更改内容
分支的合并
git checkout master //合并分支以前,先切换到目标分支
git merge aming //把aming分支合并到了master
若是master分支和aming分支都对2.txt进行了编辑,当合并时会提示冲突,须要先解决冲突才能够继续合并。
解决冲突的方法是在master分支下,编辑2.txt,改成aming分支里面2.txt的内容。 而后提交2.txt,再合并aming分支。
可是这样有一个问题,万一master分支更改的内容是咱们想要的呢? 能够编辑2.txt内容,改成想要的,而后提交。切换到aming分支,而后合并master分支到aming分支便可(倒着合并)。合并分支有一个原则,那就是要把最新的分支合并到旧的分支。也就是说merge后面跟的分支名字必定是最新的分支。
git branch -d aming //删除分支
若是分支没有合并,删除以前会提示,那就不合并,强制删除
git branch -D aming
使用分支的原则
对于分支的应用,建议你们以这样的原则来:
master分支是很是重要的,线上发布代码用这个分支,平时咱们开发代码不要在这个分支上。
建立一个dev分支,专门用做开发,只有当发布到线上以前,才会把dev分支合并到master
开发人员应该在dev的基础上再分支成我的分支,我的分支(在本身pc上)里面开发代码,而后合并到dev分支
dev分支合并bob分支的命令是:
git checkout dev //先切换到dev分支,而后
git merge bob
远程分支
本地新建的分支若是不推送到远程,对其余人就是不可见的
查看远程分支 git ls-remote origin,能够看到全部分支
对于git push分支分两种状况
当本地分支和远程分支一致时
git push会把全部本地分支的变动一同推送到远程,若是想只推送一个分支,使用git push origin branch-name
当本地分支比远程分支多,默认git push 只推送本地和远程一致的分支,想要把多出来的本地分支推送到远程时,使用git push origin branch-name 若是推送失败,先用git pull抓取远程的新提交
git clone的时候默认只把master分支克隆下来,若是想把全部分支都克隆下来,须要手动建立,在本地建立和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称要一致
标签管理
标签相似于快照功能,能够给版本库打一个标签,记录某个时刻库的状态。也能够随时恢复到该状态。
git checkout master 先切到master分支上
git tag v1.0 给master打一个标签v1.0
git show v1.0 查看标签信息
git tag 能够查看全部的标签
tag是针对commit来打标签的,因此能够针对历史的commit来打tag
git log --pretty=oneline --abbrev-commit //先查看历史的commit
git tag v0.9 46d3c1a //针对历史commit打标签
git tag -a v0.8 -m "tag just v1.1 and so on" 5aacaf4 //能够对标签进行描述
git tag -d v0.8 //删除标签
git push origin v1.0 //推送指定标签到远程
git push --tag origin //推送全部标签
若是本地删除了一个标签,远程也想要删除须要这样操做:
git tag v1.0 -d //删除本地标签
git push origin :refs/tags/v1.0 //删除远程标签
git别名
git commit 这个命令是否是有点长? 用别名能够提升咱们的工做效率
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
查看git别名使用命令
git config --list |grep alias
查询log小技巧:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
取消别名
git config --global --unset alias.br
搭建git服务器
github毕竟是公开的,而私有仓库又得花钱买。因此咱们能够想办法搭建一个私有的,只本身公司使用的。Gitlab是个不错的选择。在介绍它以前,先讲述一下命令行的git服务器
找一台服务器,首先要安装git,yum install git
添加git用户,而且设置shell为/usr/bin/git-shell,目的是为了避免让git用户远程登录
useradd -s /usr/bin/git-shell git
cd /home/git
建立authorized_keys文件,并更改属主、属组和权限,用来存客户端机器上的公钥
mkdir .ssh
touch .ssh/authorized_keys
chown -R git.git .ssh
chmod 600 .ssh/authorized_keys
定好存储git仓库的目录,好比 /data/gitroot
mkdir /data/gitroot
cd /data/gitroot
git init --bare sample.git // 会建立一个裸仓库,裸仓库没有工做区,由于服务器上的Git仓库纯粹是为了共享,因此不让用户直接登陆到服务器上去改工做区,而且服务器上的Git仓库一般都以.git结尾
chown -R git.git sample.git
以上操做是在git服务器上作的,平时git服务器是不须要开发人员登陆修改代码的,它仅仅是充当着一个服务器的角色,就像github同样,平时操做都是在咱们本身的pc上作的
首先要把客户端上的公钥放到git服务器上/home/git/.ssh/authorized_keys文件里
在客户端上(本身pc)克隆远程仓库
git clone git@ip:/data/gitroot/sample.git
此时就能够在当前目录下生成一个sample的目录,这个就是咱们克隆的远程仓库了。进入到这里面,能够开发一些代码,而后push到远程。
使用gitlab
gitlab官网 https://about.gitlab.com/gitlab-com/
官方安装文档 https://about.gitlab.com/installation/?version=ce#centos-7 (ce/ee)
要求服务器内存很多于2g
vim /etc/yum.repos.d/gitlab.repo//加入以下内容
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
yum install -y gitlab-ce
gitlab-ctl reconfigure
netstat -lnpt //查看监听端口
gitlab-ctl stop/restart/start/status
浏览器访问gitlab,输入ip便可
默认管理员root,无密码,它会让咱们去定义一个密码
gitlab经常使用命令 https://www.cnyunwei.cc/archives/1204gitlab备份 gitlab-rake gitlab:backup:create备份目录在/var/opt/gitlab/backupsgitlab 恢复 先停服务 gitlab-ctl stop unicorn ; gitlab-ctl stop sidekiqgitlab-rake gitlab:backup:restore BACKUP=xxxxx (这里是一个编号,即备份文件的前缀)再启动服务 gitlab-ctl start