您的位置:首页 > 运维架构 > Linux

Git入门:安装环境 版本回退 仓库实战 搭建git服务端

2016-10-28 04:58 519 查看
备份MBR:dd if=/dev/sda of=/data/mbr.dump bs=512 count=1

恢复MBR:dd if=/data/mbr.dump of=/dev/sda bs=446 count=1 --- 小 Q
---------------------------------------------------------------------------------------------------
Git:Linus开发分布式版本控制系统,和Linux文件系统完美结合,win需要cygwin才可完美工作;

1、优秀案例,github.com,作为仓库,实验起来很顺手;
2、开发者可以git到线上仓库至本地,操作更改上传很是方便;
3、功能的使用,命令操作很简单。目前趋势来说:git是版本管理系统的潮流方向。

【搭建环境】

1、安装并初始化仓库
Centos:yum install -y epel-release ; yum install -y git
Ubuntu:sudo apt-get install git
windows:https://git-for-windows.github.io

mkdir /home/gitroot
cd /home/gitroot
git init //初始化为git仓库,生成.git目录

2、提交文件到仓库
echo -e "123\naaa\n456\nbbb" > 1.txt
git add 1.txt //把1.txt添加到仓库中
git status //查看本地库的状态
git commit -m "add new file 1.txt" //把1.txt提交到仓库,-m添加文件描述

初始使用该命令会提示:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
这是要让我们设置用户邮箱和用户名。根据它提示设置一下即可:
git config --global user.email "你的邮箱"
git config --global user.name "要使用的名字"

echo -e "111111\n2222222222" >> 1.txt //先更改一下1.txt
git status //查看当前仓库中的状态,比如是否有改动的文件
git diff 1.txt //可以对比1.txt本次修改了什么内容,相比较仓库里面的版本

到此为止,一些简单常用的命令,也就熟悉了一些。



【版本回退】

实验版本回退功能,首先要多提交几次仓库更新内容,即变动仓库,执行add 和 commit。
查看日志:git log
显示所有:git reflog

逐行查看:git log --pretty=oneline




指定版本回退:git reset --hard e261f7e15 //在对文件commit提交后,想要撤回的操作

add之后回退:git reset HEAD 1.txt //在对1.txt更改并add后,想要撤回的操作

add之前回退:git checkout -- 1.txt //只更改了文件,还未add,想要撤回的操作

提交后删除仓库的文件:
echo "5555555555" >> 3.txt
git add 3.txt
git commit -m "add new file 3.txt"
rm -f 3.txt
git rm 3.txt
git commit -m "delect file 3.txt"

【仓库实战】

1、连接远程仓库

如今用的最多的是https://github.com ,我们也先登录注册一个账号,之后创建一个仓库,





我们在下载克隆仓库的时候,都会指定路径,如右上有两种可选方式http和ssh,如果用http需要关闭防火墙等,一般我们比较推荐ssh方式,既然是ssh协议,就要把客户端公钥复制过来;
右上角点自己头像,选settings,选SSH and GPG keys,选New SSH key,将公钥粘贴在这。

把本地的仓库推送到远程仓库:
mkdir /home/test
cd /home/test
git init
git remote add origin https://github.com/Shanwn-git/test.git //建立连接
echo "564646" > 1.txt
git add 1.txt
git commit -m "add 1.txt"
git push -u origin master //把本地库推送到远程服务端,第二次可直接使用 git push
error:The requested URL returned error: 403 Forbidden while accessing https://github.com/Shanwn-git/test.git/info/refs 解决:vim .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
#       url =    #将访问换为ssh协议地址即可
url = git@github.com:Shanwn-git/test.git
fetch = +refs/heads/*:refs/remotes/origin/*
此时即可在github服务端查看test仓库中已经存在了1.txt文件
error:failed to push some refs to ......................
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the 'Note about
解决:git push -f //强制推上去,覆盖原内容,原因:git中已有部分代码,不允许覆盖

或:git fetch && git merge //===git pull




扩展:有时我们看懂了别人的仓库有好东西,想克隆到本地,之后是上传到自己的仓库,如下:
git clone git://xxxxx
git push -u origin master //错误:git://xxxx是以只读方式获取代码,无法直接进行push
git clone git@xxxx
git push -u origin master //正确:不过这种方式需要输入git仓库的密码

2、分支管理

分支是版本管理很重要的概念,用法:

创建分支:git branch teng
查看分支:git branch

切换分支:git checkout teng

删除分支:git branch -d teng // git branch -D teng
合并分支:git merge test //把test分支内容,合并到了master主支

注:如果master和test分支同时编辑了文件1,合并时冲突了,则需要先处理冲突再合并;
主分支贯穿所有分支,主分支操作可实时同步至分支,但分支却不能实时更新至主分支和其他分支。

原则上:master分支不可操作,创建dev分支专门用作开发,在dev创建bob分支派给各开发人员。

git checkout dev //先切换到dev分支
git merge bob //将bob分支合到dev分支
查看远程库信息:git remote -v

查看远程分支:git ls-remote origin //origin由远程库信息得到

连接远程分支:git checkout -b branch1 origin/branch1 //服务端建立分支,名字最好对应

拉取远程分支:git pull
下图是分支的创建删除和切换,以及github创建分支:







3、标签管理

标签类似于快照功能,我们可以给版本库打一个标签,记录版本库状态,便于恢复。
切换分支:git checkout master
打标签:git tag v1.0
查标签:git show v1.0
看标签:git tag //tag是针对commit来打标签的,so可针对历史commit打tag
版本日志:git log --pretty=oneline --abbrev-commit

针对日志打标签:git tag v1.1 46dc8r1da
对标签进行描述:git tag -a v1.2 -m "this is a tag v1.3" 46dc8r1da
删除标签:git tag -d v1.3
推送标签:git push origin v1.0
推送所有:git push --tag origin
如果本地的标签删除了,也想把远程服务端标签删除,执行如下;
git tag v1.3 -d
git push origin :refs/tags/v1.3
4、git 别名

类似于Linux的别名alias,用来提高工作效率,可写到文件,随时拷贝到所用机器:
checkout:git config --global alias.co checkout

commit:git config --global alias.ci commit
branch:git config --global alias.br branch
取消别名:git config --global --unset alias br
查看别名: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"
5、保留现场
这个功能不太常用,简单说一下:当你正进行一个项目时,突然运营找了过来,说线上有个东西bug了,需要马上处理,你又不想提交进行了一半的工作,若不提交,就会一直保留一个git状态,看起来很不舒服。此时我们就需要保留现场

保留现场:git stash
恢复现场:git stash apply
查看现场:git stash list

指定恢复:git stash apply stash@{1}




【搭建git服务器】

虽然github很强大,但终归公开的,私有仓库又要花钱买,所以可以的话搭建属于公司的私有仓库。
服务器端:

yum install -y git

useradd -s /usr/bin/git-shell git //添加git用户,并不让git用户远程登录
cd /home/git
mkdir .ssh
touch .ssh/suthorized_keys
chown -R git.git .ssh
chmod 600 .ssh/authorized_keys
//然后将客户端的公钥放进去,测试登陆一下,会出现A shell字样,实在不放心可以先改git用户权限
//usermod -s /bin/bash,然后登陆试试
选择作为仓库的目录
mkdir /data/git
cd /data/git
git init --bare sample.git //创建裸仓库,没有工作区,只为共享。大家可以实验比较区别

chown -R git.git sample.git

客户端:
首先要将公钥拷贝到服务端keys文件;
克隆仓库:git clone git@ip:/data/git/sample.git

//之后就和服务端仓库建立连接,开始上传版本等。
---------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息