zoukankan      html  css  js  c++  java
  • git如何使用

    简介
    git是一款开源的分布式版本管理工具,git的诞生也是相当传奇的,由Linux之父-Linus Benedict Torvalds开发而来,当初Linus Benedict Torvalds仅仅是为了辅助Linux内核的开发才一并开发了这个至今为止世界上最快的、最简单的版本管理工具。关于这个传奇的故事,笔者就不在此赘述。

    目前,git虽然很流行,但也仅仅是在国外。在国内,多数公司还在使用svn进行版本控制,不过不用担心,据笔者所知,已经有很多大公司(像BAT这样的互联网公司)开始由svn转向git。并且,越来越多的开源项目已经转移到git,很多开源网站上的代码就是git来管理的,所以git取代svn是大势所趋的。

    可以概括出分布式和集中式的区别:像BAT这样的大公司,员工层级架构比较复杂,每个技术部门都设有技术负责人(CTO),而每个部门内部又根据分工设有技术经理、主管、组长等等,一般情况下,员工只需要向自己的直属上级汇报工作即可,这样工作起来,效率比较高。而像笔者这样的初创型小公司,部门内部角色就没有那么复杂了,技术部门每个员工都可以向CTO直接反应问题,CTO要处理来自N个技术人员反应的问题,效率比较低。BAT这样的大公司的员工各层级架构就像是分布式一样,而后者就像是集中式一样。

    从图(2)可以看出,集中式管理系统的代码统一的由一台服务器集中管理。其他系统如果想得到代码,必须从这一台服务器上拷贝。同样,其他系统想要提交代码,也只能向这台服务器提交。这台服务器起到了一个集中管理所有代码的作用,当然如果svn服务器出现故障,那么后果不开设想。

    从图(1)可以看出,分布式管理系统的代码可以由自己本地服务器来管理。因为每个系统本地都有一个本地代码仓库(相当于远程代码仓库在本地的备份),本地系统可以先把代码提交到本地代码仓库,然后再由本地代码仓库提交到共享版本库(在这里,共享版本库相当于集中式管理系统的远程代码仓库)这样在本地系统和共享版本库之间添加了一层本地代码仓库,开发人员直接和本地代码仓库打交道,减轻了对共享版本库的压力,并且也降低了开发人员因为误操作而导致对远程代码仓库的污染。

    正是因为二者的这个差别,通过分布式,我们可以在没有网络的情况下,先把代码提交到本地代码仓库,速度之快不言而喻,待到有网络时再提交到共享版本库。而如果通过集中式,我们不能够在没有网络的情况下把代码提交到远程代码仓库,即便是有网络,频繁的传输对svn的压力比较大,并且每次传输都要受限于网络速度。

    git工作原理
    git的工作原理还是比较简单的,当我们创建了本地代码仓库后,会在本地代码仓库的根目录中生成一个.git的隐藏文件。.git为一个文件目录,又叫做版本库。在本地代码仓库文件夹中,除.git目录之外的所有与.git同级的目录及其子目录都叫做工作区。

    工作区(Working Directory):仓库文件夹里除.git目录以外的内容

    版本库(Repository):.git目录,用于存储记录版本信息
       暂缓区(stage)
       分支(master):git自动创建的第一个分支
       HEAD指针:用于指向当前分支
    复制代码
    git add和git commit的原理
    git add :把文件修改或者新添加的文件添加到暂存区
    git commit :把暂存区的所有内容提交到当前分支
    下面一幅神图就可以解释git add 和 git commit的原理:

    我们修改或者新添加的文件起初是处于工作区,通过git add命令可以把工作区的文件移动到版本库中的暂缓区(stage)。

    处在暂缓区(stage)的代码可以通过git commit -m “提交的注释” 提交到版本库中的分支(master)。

    处在分支(master)中的代码可以通过git push命令push到共享版本库。

    注意:只有分支中的文件才可以push到共享版本库。

    git常用命令
    复制代码
    1.初始化一个代码仓库
    git init
    2.如果使用git必须给git配置一个用户名和邮箱
    给当前的git仓库配置一个用户名和邮箱
    git config user.name “ws”
    git config user.email “ws@163.com”
    配置一个全局的用户名和邮箱
    git config --global user.name “ws”
    git config --global user.email “ws@163.com”
    3.初始化项目
    touch main.m : 创建了main.m
    git add main.m : 将新添加的文件或者修改的文件添加到暂存区
    git commit -m “初始化项目”
    git add . : 将所有没有被添加到暂存区或者代码仓库的文件添加到暂存区
    注意:无论是新添加的文件或者修改的文件,都需要先通过add命令添加到暂存区中,之后再通过commit命令添加到本地仓库中
    4.查看文件的状态 git status
    红色 : 新创建的文件或者被修改的文件,没有被添加到暂存区
    绿色 : 表示文件在暂存区,但是没有被添加到本地仓库中
    5.给命令起别名
    git config alias.t “status”
    git config aliast “commit -m”
    git config --global alisa.st “status”
    6.git删除文件
    git rm 文件名
    7.查看版本号
    git log
    git reflog
    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 lg
    8.git的版本号是由sha1算法生成40位的哈希值
    9.版本回退
    git reset --hard HEAD : 回退到当前的版本
    git reset --hard HEAD^ : 回退到上一个版本
    git reset --hard HEAD^^ : 回退到上上个版本
    git reset --hard HEAD~100 : 回退到前100版本
    git reset --hard 版本号(前5位)
    复制代码

    用户名和邮箱地址的作用

    用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变。

    每次commit都会用用户名和邮箱纪录。

    github的contributions统计就是按邮箱来统计的。

    查看用户名和邮箱地址:

    $ git config user,name

    $ git config user.email
    修改用户名和邮箱地址:

    $ git config --global user.name “username”

    $ git config --global user.email “email”
    每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录.
    用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
    初始化共享版本库
    真实的git服务器的搭建是非常繁琐且复杂的,并且git服务器只能搭建在Linux系统上。笔者对git服务器的搭建不做介绍,日后有时间再加以补充。在此仅对共享版本库的搭建进行详细介绍。

    文件夹作为共享版本库
    复制代码
    1.创建共享版本库文件夹,然后终端进入该文件夹下执行以下命令创建一个空的共享版本库
    git init --bare
    2.项目经理将共享版本库的内容先下载下来,命令后面的地址即为共享版本库所在服务器的地址+路径
    git clone 地址
    3.添加需要忽略的文件
    touch .gitignore
    去github上搜索.gitignore->Objective-C,把Objective-C中的内容粘贴到创建的.gitignore文件中(或者直接把github中的Objective-C文件下载到该目录下)。然后执行以下命令
    git add .gitignore
    git commit -m “添加了需要忽略的文件”
    4.项目经理初始化项目
    git commit -m “初始化项目”—>提交到本地代码仓库
    5.将项目push远程仓库中
    git push origin
    6.当源代码管理是使用git,并且在Xcode进行多人开发的操作
    注意:当使用git,项目中用到了静态库就不需要通过命令行进行添加

    git版本备份
    复制代码
    1.1.0版本开发完成,之后对1.0版本进行备份
    git tag -a weibo1.0 -m “这个是1.0版本” : 给某一个版本打上标签(weibo1.0是标签名称)
    git tag : 查看所有的标签
    2.需要将1.0版本的标签,push到服务器
    git push origin weibo1.0
    3.继续开发2.0版本
    4.发现1.0版本有bug,从标签里面clone 1.0版本,从标签创建一个fixbug分支,在分支中修复bug
    git clone 共享版本库
    git checkout weibo1.0(标签的名称)
    git checkout -b weibo1.1fixbug(分支名称)
    5.修复后的版本上传AppStore/将1.0fixbug进行备份/将1.0fixbug版本和2.0版本进行合并
    git tag -a weibo1.1 -m “这个是修复了1.0版本bug的1.1版本”
    git tag
    git push origin weibo1.1
    将子分支中代码合并到主分支,pull—>weibo1.1fixbug—>push master—>其它同事更新
    6.删除分支
    git branch -r(r是远程仓库的意思,这个命令可以查看远程仓库中的分支)
    git branch -r -d 分支名称

  • 相关阅读:
    系统集成项目管理工程师计算题(成本管理计算)
    系统集成项目管理工程师计算题(进度管理计算)
    系统集成项目管理工程师计算题(期望值)
    系统集成项目管理工程师计算题(三点估算)
    系统集成项目管理工程师计算题(沟通渠道)
    Asp.net core web Api 应用Jwt 验证
    Linux vmstat命令
    关于Java集合的小抄
    @Resource和@Autowire
    Servlet是线程安全的吗?
  • 原文地址:https://www.cnblogs.com/jasonwan/p/10735936.html
Copyright © 2011-2022 走看看