分布式代码管理工具Git安装和使用(linux)

目录

分布式代码管理工具Git安装和使用(linux)

一 、 版本管理介绍

1.git介绍

二 、 git安装

  1. 安装git
    centos上
yum install -y epel-release
yum install -y git

三 、 git的命令与使用

  1. 创建版本库
mkdir  /home/gitroot
cd /home/gitroot
git init   //用这个命令初始化,让这个目录变成git可以管理的仓库
  1. 提交文件到仓库
    创建一个文件 1.txt
echo -e "123\naaa\n456\nbbb" > 1.txt
git add 1.txt  //把1.txt添加到仓库中
git commit -m "add new file 1.txt"   //add完了必须要commit才算真正把文件提交到git仓库里

初始使用该命令会提示:
* 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 "xingcheng@qq.com"

git config --global user.name "xingcheng"


echo -e "111111\n2222222222" >> 1.txt  //先更改一下1.txt
git status   //查看当前仓库中的状态,比如是否有改动的文件
git diff 1.txt  //可以对比1.txt本次修改了什么内容,相比较仓库里面的版本
  1. 版本回退
    多更改几次1.txt,并进行 git add, git commit操作
git log  //可以查看所有提交git仓库的记录操作
git log --pretty=oneline  //一行显示,更清楚 

通过git log我们可以查看到过去提交的所有版本,所以根据这个log,我们可以指定回退某个版本
比如,结果如下
git log –pretty=oneline
142dde7c32cf8c2e4b59b6fafae468dedbb72ff9 change 1.txt
0ff5ab178ea2207e71fbe935c57a8ef1c30f63d7 change 1.txt
5aacaf4341484186802faed7d2db87840b2adc66 new file 2.txt
73235a8549b7e9cfa171d632e1a8f0d91cd0a0d5 new file

git reset –hard 0ff5ab1 //可以回退到第二行的这个版本,这里后面跟的字符串可以简写。
当回退到该版本后,再 git log 则最上面的版本不再显示了,那如果想再倒回退到第一行那个版本怎么办?
git reflog //可以显示所有的版本

  1. 撤销修改
    修改1.txt,发现改的不对,想恢复到上一次提交时的状态。或者1.txt不小心给删除掉了。可以使用
git checkout -- 1.txt  //恢复到上一次提交时的状态

如果1.txt修改完了,保存后,git add 1.txt了,但没有commit,再想回退到上一次提交时的状态。可以使用

git  reset HEAD 1.txt

然后再

git checkout -- 1.txt

那如果不仅add也commit了,那就用第4版本回退的方法。

  1. 删除
touch  2.txt
echo "22222222222222" > 2.txt
git add 2.txt
git commit -m "add new file 2.txt" 

上面的操作,我们在git仓库里提交了一个新的文件2.txt,下面删除它

rm -f 2.txt
git status //可以看到,提示2.txt文件被删除了

如果要想恢复,直接用 git checkout – 2.txt
现在是,我们想在git仓库里删除

git rm 2.txt
git commit -m "delete 2.txt" 

这样就彻底删除了2.txt

rm -rf 1.txt  ——  git rm 
  1. 做一个远程仓库(github)
    首先到 https://github.com 注册一个账号,创建自己的git。
    点击 new repository

名字自定义,比如叫studygit
选择public 点 create repository

添加key:
右上角点自己头像 –> settings –> SSH and GPG keys
右上角点New SSH key,把linux机器上的 /root/.ssh/id_rsa.pub内容粘贴到这里(如果目标文件不存在,可以使用命令ssh-keygen生成)

把本地仓库推送到远程仓库

mkdir studygit
cd studygit
git init
git remote add origin git@github.com:XingCheng1996/studygit.git
git push -u origin master --> yes  (第一次建立连接的时候需要输入yes)

下一次再推送,就可以直接 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         (这里你们push不会成功,因为你们的公钥没有放在我的项目里)
  1. 分支管理
    查看分支
git branch

创建分支

cd ../studygit/  切换到studygit仓库
git branch xingcheng
git checkout xingcheng

再使用git branch
查看,会看到有两个分支master和xingcheng,当前使用的分支前面会有一个*

在xingcheng分支下 ,编辑linux.txt,并提交到新分支

echo -e "ughukh\nhjygfjyghjy\n" > linux.txt
git add linux.txt
git commit -m "add new linux.txt" 

切换回master分支(在某分支下发生更改后,发生更改的内容在别的分支下内容是不显示的,这就是分支的作用)
git checkout master

# ls
2.txt  xc.txt

合并分支

git merge xingcheng   //把xingcheng分支合并到了master,合并A分支到B分支时,需要先切换到B分支。

如果master分支和xingcheng分支都对2.txt进行了编辑,当合并时会提示冲突,需要先解决冲突才可以继续合并。
解决冲突的方法是在master分支下,编辑2.txt,改为xingcheng分支里面2.txt的内容。 然后提交2.txt,再合并xingcheng分支。
但是这样有一个问题,万一master分支更改的内容是我们想要的呢? 我们可以编辑2.txt内容,改为我们想要的,然后提交。切换到xingcheng分支,然后合并master分支到xingcheng分支即可。(倒着合并)
合并分支有一个原则,那就是要把最新的分支合并到旧的分支。也就是说merge后面跟的分支名字一定是最新的分支。

删除分支

git  branch -d aming

如果分支没有合并,删除之前会提示,那我们就不想合并,强制删除

git branch -D aming

merge和rebase的区别
http://www.cnblogs.com/xueweihan/p/5743327.html

对于分支的应用,建议大家以这样的原则来:
master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上。
创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master
开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己pc上)里面开发代码,然后合并到dev分支

—————— master
—————– dev
—————— michoel
—————– bob

在dev分支合并bob分支的命令是:

git checkout dev   //先切换到dev分支,然后
git merge bob
  1. git stash 保留现场
    当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。

比如我们在aming分支,编辑了一个新的文件3.txt
这时候我们需要到其他分支去修复一个bug,所以需要先git add 3.txt
然后 git stash 保存一下现场
再切换到另外分支去修复bug,修复完bug后,再回到aming分支
git stash list 可以看到我们保存过的现场
stash@{0}: WIP on xingcheng: b777108 Merge branch ‘xingcheng’
stash@{1}: WIP on xingcheng: b777108 Merge branch ‘xingcheng’
用 git stash apply 恢复现场
也可以指定stash:
git stash apply stash@{1}

  1. 远程分支
    查看远程库信息,使用git remote -v (本地新建的分支如果不推送到远程,对其他人就是不可见的)

查看远程分支 git ls-remote origin
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的重新提交
在本地创建和远程分支对应的分支(把远程分分支到checkout本地),使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

Git fetch和git pull的区别
https://zhidao.baidu.com/question/200204875340723965.html

  1. 标签管理
    标签类似于快照功能,我们可以给版本库打一个标签,记录某个时刻库的状态。我们可以随时恢复到该状态。
    git checkout master 先切到master分支上
    git tag v1.0 给master打一个标签v1.0

git tag 可以查看所有的标签

tag是针对commit来打标签的,所以可以针对历史的commit来打tag

git log --pretty=oneline --abbrev-commit
git tag v0.9 46d3c1a
git tag -a v0.8 -m "tag just v1.1 and so on"  5aacaf4  //可以对标签进行描述

git show v0.8  //查看标签详情
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 //删除远程标签

  1. 巧用别名
    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

查看git的相关配置

cat /root/.gitconfig 

查询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
  1. 搭建git服务器
    github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的。
yum install git //安装git
useradd -s /usr/bin/git-shell git   //添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆
cd /home/git
mkdir .ssh
touch .ssh/authorized_keys

chown -R git.git .ssh
chmod 600 .ssh/authorized_keys  或者 chmod 700 .ssh

定好存储git仓库的目录,比如 /data/gitroot

mkdir /data/gitroot
cd /data/gitroot
git init --bare sample.git // --base会创建一个名为sample.git的裸仓库。裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾
chown -R git.git sample.git

在客户端上(自己pc)克隆远程仓库
以上操作是在git服务器上做的,平时git服务器是不需要开发人员登录修改代码的,它仅仅是充当着一个服务器的角色,就像github一样,平时操作都是在我们自己的pc上做的。
首先要把客户端上的公钥/root/.ssh/id_rsa.pub放到git服务器上/home/git/.ssh/authorized_keys文件里
git clone git@ip:/data/gitroot/sample.git

此时就可以在当前目录下生成一个sample的目录,这个就是我们克隆的远程仓库了。进入到这里面,可以开发一些代码,然后push到远程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值