svn 和 git 是现在最普遍使用的两个代码管理工具,svn 的全称是 subversion,是一个开源版本控制系统。git 是 Linux 创始人 Linus 发起的,最初目的是更好的管理 Linux 内核代码。两者之间的区别就是 git 不需要依赖服务端就可以工作,即 git 是分布式的。至于 GitHub 和 gitlab,GitHub 是基于 git 的在线 web 页面代码托管平台,gitlab 可以认为是一个开源的 GitHub,两者没有直接关系。
# yum install -y subversion
# makdir -p /data/svnroot/myproject //安装版本库,即配置文件。。。
# svnadmin create /data/svnroot/myproject
# cd /data/svnroot/myproject/conf
# vim authz //配置权限配置文件
[内容如下]
[groups]
admins = username1,username2 //admins 组包含 user1,user2用户
[/]
@admins = rw //设置组权限
* = r //其他组的权限是 可读
[myproject:/] //针对项目设置权限
user1 = rw
[精致的结尾]
# vim passwd //设置用户的密码
[内容如下]
[users]
lsk=lsk000
user1=user1000
user2=user2000
[精致的结尾]
#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 //启动 svn
# cd /opt/
# svn checkout url --username= //拉取项目,即将远端的项目下载到本地
[关于url] 如果远端是浏览器,则直接在浏览器复制。远端是 Linux 则格 式为 svn://IP/project_name
① 向项目中增加一个文件
cp /root/1.txt . //将要增加的文件复制到项目目录下
svn add 1.txt //在本地增加这个文件
svn commit -m "add new file 1.txt" //向服务器提交改动的说名
svn up //更新版本,有时候版本更新不及时
② 在项目中删除一个文件
# svn delete 1.txt //在本地删除
# svn commit -m "delete a file 1.txt" //向服务器提交操作
③ 查看变更日志
# svn log //查看变更日志
① 下载及配置
# yum install -y git
# git config --global user.name "lsk" //配置基本信息
# git config --global user.email "[email protected]"
# mkdir /data/gitroot //创建仓库
# cd /data/gitroot
# git init //初始化仓库
② 增加文件
# git add 1.txt
# git commit -m"add new file 1.txt" //基本和 svn 一样
[错误fatal: Not a git repository (...): .git]
重新 git init 即可。
③ 更改文件
# echo "hello world2" >> 1.txt
# git add 1.txt
# git commit -m"version 2"
[只需要在重新增加和提交即可]
④ 版本回溯
# git log //获取回溯版本的“乱码”,如dc72730
# git reset --hard dc72730 //即可恢复到原来的版本
[关于 git log]
git log --pretty=oneline //每个版本信息只占一行,简洁
git reflog //显示所有的版本
⑤ 撤销修改
# rm -f 1.txt //不小心删除了 1.txt
# git checkout -- 1.txt //恢复了 1.txt
⑥ 删除文件
# git rm 1.txt
# git commit -m"delete a file 1.txt"
① 在 GitHub 上注册账号
② 点击 new
③ 名字自定义,例如gitroot,然后选中“Public”,点击“Createrepository”按钮
④ 添加key:单击右上角自己的头像,在下拉菜单中选择“settings”选项。
⑤ 在跳转的页面中左侧菜单栏选择SSH and GPG keys,右侧单击“New SSH key”按钮,把Linux机器上的/root/.ssh/id_rsa.pub内容粘贴到这里。
# ssh-keygen //生成密钥
⑥ 将本地仓库推送到远程仓库
# git remote add origin url //url 是在GitHub上复制的
# git push -u origin master //将本地仓库推送到远程仓库
# cd /opt/
# git clone url //将远程仓库克隆到本地
[在本地仓库操作完数据后,需要 git push 才能和远程同步!!]
① 分支操作
# git branch //查看分支
* master //星号代表当前在那个分支位置
#git branch lsk //创建分支
#git checkout lsk //切换到了lsk分支下
② 分支的合并
# git checkout master //合并分支之前,先切换到目标分支
# git merge lsk //把lsk分支合并到了master
[注意事项]
如果两个分支有同名的文件,但是内容不一样,就会造成分支冲突,这时就不能合并分支了。
③ 分支删除
# git branch -d lsk //删除分支
# git branch -D lsk //如果分支没有合并,就不能删除,该命令强制删除
④ 对于分支的应用,建议大家以这样的原则来:
master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上。
创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master。
开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己PC上)里面开发代码,然后合并到dev分支。
⑤ 远程分支
# git ls-remote origin //查看远程分支
# git push origin branch-name //将本地的特定分支推送到远程
# git pull //如果 push 失败,可以试试这个,然后再 push
# git checkout -b branch-name origin/branch-name //git clone 的时候,默认只把 master 分支克隆下来。如果想,要克隆其他分支,用这个命令。
标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态。也可以随时恢复到该状态。
# git tag v1.o //建立一个名为 v1.o 的标签,在 master 分支上
# git show v1.o // 查看标签的详细信息
# git tag //查看所有的标签名
# git log --pretty=oneline --abbrev-commit //查看历史 commit
# git tag tag-name max-code //针对历史 commit 打标签
# git tag -a tag-name -m "expression" //对标签进行描述
# git tag -d tag-name //删除标签
# git push origin tag-name //推送指定标签到远程
# git push --tag origin //推送所有标签
既要删除本地标签又要删除远程标签
# git tag tag-name -d
# git push origin :refs/tags/tag-name
# git config --global alias.ci commit //将 commit 改名为 ci
# git config --list | grep alias //查看已设别名
# git config --global --unset alias.ci //取消 ci 别名
**查询 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
# yum install git
# git config --global user.name "lsk" //配置基本信息
#git config --global user.email "[email protected]"
//添加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
# ll /home/git/.ssh/authorized_keys
-rw-------. 1 git git 1226 Aug 5 07:03 /home/git/.ssh/authorized_keys
//定好存储Git仓库的目录,比如 /data/gitpub
# mkdir /data/gitpub
# cd /data/gitpub
# git init --bare sample.git //会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾
# chown -R git.git sample.git
# ll
total 4
drwxr-xr-x. 7 git git 4096 Aug 5 10:01 sample.git
【客户端的操作如下】
//首先要把客户端上的公钥放到git服务器/home/git/.ssh/authorized_keys文件里
//在客户端上克隆远程仓库
# git clone git@ip:/data/gitpub/sample.git
# 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 start
//浏览器访问GitLab,输入IP即可
//默认管理员root,无密码,它会让我们去定义一个密码,至少8位数
//GitLab常用命令 https://www.cnyunwei.cc/archives/1204
//GitLab备份
# gitlab-rake gitlab:backup:create //创建备份压缩包
//备份目录在/var/opt/gitlab/backups
# ls /var/opt/gitlab/backups/
# gitlab-ctl stop unicorn ; gitlab-ctl stop sidekiq
# gitlab-rake gitlab:backup:restore BACKUP=xxxxx //(这里是一个编号,即备份文件的前缀) //恢复备份