首页 > 代码库 > 分布式代码管理系统Git

分布式代码管理系统Git

1. centos上安装git

yum install -y epel-release

yum install -y git

设置用户标识,否则初始使用该命令会提示

git config --global user.name "silen"

git config --global user.email "silen@huanglearn.cn"

技术分享


2. 创建版本库

mkdir  /home/gitroot

cd /home/gitroot

git init   //用这个命令初始化,让这个目录变成git可以管理的仓库,配置等文件在.git目录下

技术分享


3. 提交文件到仓库

1)echo -e "123\naaa\n456\nbbb" > 2.txt  //创建一个文件 2.txt


2)git add 2.txt  //把2.txt添加到仓库中


3)git commit -m "add new file 2.txt"   //add完了必须要commit才算真正把文件提交到git仓库里,自定义描述

技术分享


1)echo -e "ccc\nddd">>2.txt  //先更改一下2.txt


2)git status   //查看当前仓库中的状态,比如是否有改动的文件

技术分享


3)git diff 2.txt  //可以对比2.txt本次修改了什么内容,相比较仓库里面的版本,a是线上;b是本地

技术分享

4)git status  //修改了2.txt文件之后,查看状态;提示可以提交或者放弃更改

技术分享


5)git checkout -- 2.txt   //放弃修改或恢复删除,再次查看内容不发生改变

技术分享


6)git add 2.txt   //再次commit之前,也可以撤销

技术分享

7)git reset HEAD 2.txt  //撤销,回到了上一步

技术分享


4. 结合日志版本回退

1)echo -e "eee\nfff">>2.txt    //修改多提交第一次

git add 2.txt

git commit -m "change once 2.txt"


2)echo -e "ggg\nhhh">>2.txt    //修改多提交第二次

git add 2.txt

git commit -m "change twice 2.txt"


3)git log   //可以查看所有提交git仓库的记录操作

技术分享


4)git log --pretty=oneline   //一行显示,更清楚

技术分享


5)git reset --hard b0b97     //根据这个log,我们可以指定回退第一个版本,后面跟的字符串可以简写。

技术分享


6)git reflog  //当回退到某版本后,再git log 则之后的版本不再显示了,用该命令显示所有的版本,以供继续恢复

技术分享


5. 撤销修改

1)已修改或删除2.txt,还没有add,用checkout恢复到上一次提交时的状态

git checkout -- 2.txt 


2)已修改或删除2.txt,已经add,但还没commit,先用reset HEAD,再用checkout恢复到上一次提交时的状态

git  reset HEAD 2.txt

git checkout -- 2.txt


3)既已add,也已commit,用版本回退方法恢复到上一次提交时的状态



6. 删除

1)cp 2.txt 3.txt   //创建一个新文件,提交

git add 3.txt

git commit -m "add a new file 3.txt" 


2)rm -f 2.txt  //删除版本库中的文件

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

技术分享


3)git  checkout -- 3.txt  //如果要想恢复,直接用  


4)git rm 3.txt    //在git仓库里删除,此步可以用 reset HEAD 撤销

git commit -m "delete 3.txt"    //彻底删除3.txt

技术分享



7. 做一个远程仓库(github)

1)https://github.com 注册一个账号,创建自己的git

点repositories  --> new(名字自定义,比如叫studygit)->选择public,点create repository


2)添加key:

右上角点自己头像,选择settings,左侧选择SSH and GPG keys

右上角点New SSH key,把linux机器上的 /root/.ssh/id_rsa.pub内容粘贴到这里(生成公钥命令 ssh-keygen)


3)把本地参考推送到远程仓库


a. mkdir /home/studygit

cd /home/studygit

git init    //初始化

git remote add origin git@github.com:huangzp-silen/studygit.git  //本地的study仓库和远程study联系在一起


b. echo "test,test,test">test.txt    //在本地仓库目录中创建一个文件并提交

git add test.txt

git commit -m "create a new file test.txt"

技术分享


c. git push -u origin master  //远程推送,第一次连接需要验证提示;下一次就可以直接 git push 

技术分享


d. github中查看,已推送成功

技术分享


e. 编辑test.txt,在本地仓库提交之后,再远程推送git push

技术分享


f. 克隆一个远程仓库

A. cd /home

git clone  git@github.com:aminglinux/lanmp.git   //克隆一个远程仓库至本地目录

B. cd  lanmp

vi lanmp.sh  //编辑克隆下来的文件

rm -rf ./git    //删除配置文件

git init          //重新初始化配置文件


C. git add lanmp.sh   //提交至本地仓库

git commit -m "change lanmp.sh" 


D. 登录github,创建一个lanmp项目

git remote add origin git@github.com:huangzp-silen/lanmp.git  //同步关联

git push -u origin master   //然后再推送到远程服务端



8. 分支管理

说明:master分支基本不动(即不修改文件,只做合并),只有测试完成才合并至master,平时一般使用开发分支,错了也没关系

1)git branch  //查看分支

git branch silen  //创建分支

git checkout silen   //切换分支,星号标识

技术分享


2)在silen分支下 ,编辑2.txt,并提交到新分支

echo "silen">silen.txt

git add silen.txt

git commit -m "create a new file silen.txt"

git checkout master   //切换回master分支,查看文件,并没发现silen.txt

技术分享


3)合并分支,开发过程中,经常需要将多人的分支合并

git checkout master   //先换到需要合并的目标分支上去,如master

git merge silen          //把silen分支合并到了master,只更新源分支(silen)文件的内容,目标分支(master)就算改动了也不会变,一般不会更改master分支

技术分享


注:master分支和silen分支都对silen.txt进行了编辑,当合并时会提示冲突,方法:在master分支下,编辑silen.txt,改为silen分支里面silen.txt的内容,然后提交silen.txt,再合并silen分支(或者反过来)。合并分支有一个原则,最新的分支合并到旧的分支


4)删除分支

git  branch -d aming   //若分支没有合并,删除之前会提示合并

git branch -D aming   //强制删除分支,即删除前不合并内容,会丢失数据

技术分享


5)分支应用原则

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

技术分享


9. git stash 保留现场

当我们在silen分支,编辑了一个新的文件4.txt,这时候我们需要到其他分支去修复一个bug,所以需要保留现场,如果不这么做,每次(可能是其他同事)提交该分支,会有4.txt需提交的提示

1)git add 4.txt  //提交一下,但是不commit


2)  git  stash       //保存一下现场,该文件影藏掉

技术分享


3)切换到另外分支去修复bug,修复完bug后,再回到silen分支

    git stash list       //查看保存过的现场

    git stash apply   //恢复现场,文件显示回来

    git stash apply stash@{1}   //可以指定恢复

技术分享


10. 远程分支

1)在web上,可以进行分支的创建、切换、删除、恢复等操作

技术分享技术分享

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

技术分享


通过名字origin命令,查看远程分支  git ls-remote origin

技术分享


3)从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交

技术分享

技术分享

4)给远程master分支推送文件

技术分享


web端同步文件

技术分享


5) 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致

cat .git/config   //查看配置文件,得出远程URL,以供克隆使用

技术分享


rm -rf studygit/

git clone git@github.com:huangzp-silen/studygit.git

技术分享


web上创建dev2分支,本地同步

git checkout -b dev2 origin/dev2

技术分享


6) 从远程抓取分支,使用git pull



11. 标签管理

标签类似于快照功能,我们可以给版本库打一个标签,记录某个时刻库的状态。我们可以随时恢复到该状态

1)git checkout master   //先切到master分支上

git tag v1.0   // 给master打一个标签v1.0

git tag     //查看所有的标签

git show v1.0   //显示详细信息

技术分享

技术分享

2)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  //可以对标签进行描述

技术分享


3)git tag -d v0.8   //删除标签

技术分享


4)git push origin v1.0   //推送指定标签到远程

git push --tag origin   //推送所有标签

技术分享

技术分享

5)如果本地删除了一个标签,远程也想要删除需要这样操作:

git tag v1.0 -d

git push origin :refs/tags/v1.0

技术分享


12. 巧用别名

1) git commit 这个命令是不是有点长? 用别名可以提高我们的工作效率,可以在配置文件中修改/root/.gitconfig

git config --global alias.ci commit 

git config --global alias.co  checkout

git config --global alias.br  branch


2) 查看git别名使用命令

git config --list |grep alias


3) 查询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"

技术分享


4) 取消别名

git config --global --unset alias.br



13. 搭建git服务器

github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的

1)yum install -y epel-reales

yum install -y git        //安装git

useradd -s /usr/bin/git-shell git   //添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆,如果要登录,则usermod -s /bin/bash git


2) cd /home/git

mkdir .ssh

touch .ssh/authorized_keys  //存放客户机的公钥

chown -R git.git .ssh

chmod 700 .ssh/authorized_keys


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

mkdir /data/gitroot

cd /data/gitroot

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

chown -R git.git sample.git



客户端上(自己pc)克隆远程仓库

以上操作是在git服务器上做的,平时git服务器是不需要开发人员登录修改代码的,它仅仅是充当着一个服务器的角色,就像github一样,平时操作都是在我们自己的pc上做的。

1)把客户端上的公钥放到git服务器上/home/git/.ssh/authorized_keys文件里


2)git clone git@ip:/data/gitroot/sample.git

技术分享

技术分享

此时就可以在当前目录下生成一个sample的目录,这个就是我们克隆的远程仓库了。进入到这里面,可以开发一些代码,然后push到远程;还需结合git lab图形化一起使用


本文出自 “一马踏平川” 博客,转载请与作者联系!

分布式代码管理系统Git