美文网首页
源代码管理

源代码管理

作者: 小盒盒 | 来源:发表于2016-02-01 21:46 被阅读78次

    git

    ==========Wh.少爷===========

    显⽰示隐藏⽂文件
    defaults write com.apple.finder AppleShowAllFiles -bool true

    1.git简介

    • 什么是 git?
      -- git 是一款开源的分布式版本控制工具
      -- 在世界上所有的分布式版本控制工具中,git 是最快、最简单、最流行的
    • git的起源
      -- 作者是Linux之父:Linus Benedict Torvalds
      -- 当初开发git仅仅是为了辅助Linux内核的开发(管理源代码)
    • git的现状
      -- 在国外已经非常普及,国内并未普及(在慢慢普及)
      -- 越来越多的开源项目已经转移到git

    2.git 和 svn的区别

    • 速度
      -- 在很多情况下,git的速度远远比SVN快
    • 结构
      -- SVN是集中式管理,git是分布式管理
    • 其他
      -- SVN使用分支比较笨拙,git可以轻松拥有无限个分支
      -- SVN必须联网才能正常工作,git支持本地版本控制工作
      -- 旧版本的SVN会在每一个目录置放一个.svn,git只会在根目录拥有一个.git

    3.git 工作流程

    分布式和集中式的最大区别在于:在分布式下
    开发者可以本地提交
    每个开发者机器上都有一个服务器的数据库
    
    Paste_Image.png

    分布式管理


    Paste_Image.png

    4.git 的基本使用

    • git 的重要概念及工作原理

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

      • 版本库(Repository):.git目录,用于存储记录版本信息

        • 暂缓区(stage)
        • 分支(master):git自动创建的第一个分支
        • HEAD指针:用于指向当前分支
      git add和git commit的原理
      git add :把文件修改添加到暂存区
      git commit :把暂存区的所有内容提交到当前分支
      
    • 学习git指令:

      • 学习git指令和SVN指令的学习其实是一样的, 只不过展现的方式不太一样, git是通过使用指南的方式告诉我们某一个指令如何使用
      • 这个指南其实是一个不可编辑的vim
      $ git help
      查看svn所有命令的帮助
      $ git help 子命
      
    . 要退出帮助信息,按"q"
    
    . 翻看下页,按"空格"
    
    . 翻看上页,按"CTRL+B"
    
    . 要搜索相关文字,按"/"然后输"相关文字"
    
    • git常规指令:
      • git status 查看文件状态

      • git add 添加文件到“暂存区”

        • 添加之前的颜色
          红色 代表在”工作区“
        • 添加到暂存区之后的颜色
          绿色 代码在”暂存区“
      • git commit 文件名称 添加文件到”本地仓库“

        • 注意:如果没有在commit后面加上 -m说明修改了什么, 会自动进入vim界面,要求我们输入修改信息,按键盘上的i代表开始输入内容
          输入完毕之后按 esc 然后按 :wq
          所以:如果以后在终端中提交最好在后面加上-m

        • 注意:git中的add和SVN中的add不太一样, SVN中只需要add一次,而git中每次新建或者修改之后都需要重新add

      • 查看log
        查看所有版本库日志$ git log
        查看指定文件的版本库日志git log 文件名
        git reflog 查看所有修改信息(所有版本)

        • 注意: GIt中的版本号是一个”40位“的哈希值, 而SVN中的版本号是一个递增的整数
       配置带颜色的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 alias.st status
    $ git config alias.ci "commit -m"
    ```
    

    个人建议:除非特殊原因,最好不要设置别名,否则换一台机器就不会用了

     . 注意: git默认没有简写指令
    
     . 注意: 一般情况下不建议自定义简写指令
    
     . git中的简写称之为起别名
    
    • 版本号,让我们在任意版本之间穿梭

         git reset —hard 版本号(只需要写前7位)
         其中—hard代表强制重置
         回到当前版本,放弃所有没有提交的修改
         $ git reset --hard HEAD
         回到上一个版本
         $ git reset --hard HEAD^
         回到之前第3个修订版本
         $ git reset --hard HEAD~(3)
         回到指定版本号的版本
         $ git reset e695b67
         查看分支引用记录
         $ git reflog
      
    ```
    
       - 已经提交
       
       ```
        git reset —hard HEAD^ 返回上一个版本
        其中—hard代表强制重置
        git reset —hard 版本号(只需要写前7位)
       ```
       - 未提交
       
       ```
        git checkout 文件名 回退到上一次提交的版本
        git reset —hard HEAD  回退到上一次提交的版, 注意HEAD后面没有尖号^
       ```      
    
    • 单个文件的修改管理

       查看文件变化
       $ git diff
       如果显示绿色代表新增
       如果显示红色代表删除
       撤销对文件做的修改
       $ git checkout Person.h
       从代码库(暂存区中删除文件)
      

    a.本地操作

    • 1.创建代码库 & 配置个人信息

      • 1> 进入工作目录中,新建一个“本地仓库”
         $ cd 进入工作目录
         $ git init
      
      • 2> 告诉git你是谁
        告诉git怎么联系你
       $ git config user.name lnj
       $ git config user.email lnj@itcast.cn
      

      》上面一种配置方式是一次性的配置, 会配置到被管理文件的。git文件夹下的config 中

      》下面一种配置方式是一劳永逸的方式:
      两个命令会将用户信息保存在用户目录下的 .gitconfig 文件中

       $ git config --global user.name lmj
       $ git config --global user.email lmj@itcast.cn
      
      • 3> 查看当前所有配置
       $ git config -l
      
    • 2.实际开发

      • 1> 创建代码,开始开发
         $ touch main.c
         $ open main.c
      
      • 2> 将代码添加到代码库
       查看当前代码库状态
       $ git status
       将文件添加到代码库
       $ git add main.c
       将修改提交到代码库
       $ git commit -m "添加了main.c"      
      

      提示:

      在此一定要使用 -m 参数指定修改的备注信息

      否则会进入 vim 编辑器,如果对vim不熟悉,会是很糟糕的事情

      将当前文件夹下的所有新建或修改的文件一次性添加到代码库
      $ git add .

      • 3> 添加多个文件
       $ touch Person.h Person.m
       $ git add .
       $ git commit -m "添加了Person类"
       $ open Person.h
       $ git add .
       $ git commit -m "增加Person类属性"
      

    b.团队开发

    远程仓库(专门用于团队开发的代码仓库

    SVN需要一个单独的服务器

    Git不需要: 文件中、U盘中、云上、github、OSChina...

    1.新建git远程仓库,这个仓库仅仅是用于管理代码,不参与开发

      ```
      # 切换目录
      $ cd /Users/lnj/Desktop/git演练/公司/weibo
      # 建立空白代码库(专门用于团队开发)
      $ git init --bare
      ```
    

    2.项目经理初始化项目

     - 切换目录
     
     ```
      $ cd /Users/lnj/Desktop/git演练/经理
     ```
     - "克隆"代码库到本地
     
     ```
      $ git clone /Users/lnj/Desktop/git演练/公司/weibo/
     ```
     - 忽略不需要加入版本控制器的文件以及文件夹.gitignore
     
     ```
     touch .gitignore
     open .gitignore
     
     ```
     
     - 要忽略的⽂文件 可以去https://github.com/github/gitignore/blob/master/Objective-C.gitignore查看OC需要忽略 的内容,将内容填写到. gitignore中,.gitignore一定要在和.git隐藏文件夹同一级的目录下
    
    
        - 生成好.gitignore文件之后, 还需要将.gitignore文件添加到版本控制
        
     ```  
        git add  .gitignore
        git commit .gitignore -m”将.gitignore文件添加到版本控制”
     ```
     
       - 新建项目,初始化项目在.git同目录下      
      
     ```
       source conrol—>commit  将代码提交到本地仓库
       source conrol—>push 将代码提交到远程仓库
     ```
    

    3.新人加入
    - git clone 共享代码库的地址
    - 修改代码—>git commit —>git push

    4.分支管理

    ```  
     # 查看当前标签
     $ git tag
     在本地代码库给项目打上一个标签
     $ git tag -a v1.0 -m 'Version 1.0'
     将标签添推送到远程代码库中
     $ git push origin v1.0
    
     使用tag,就能够将项目快速切换到某一个中间状态,例如产品开发线上的某一个稳     定版本
     签出v1.0标签
     $ git checkout v1.0
     从签出状态创建v1.0bugfix分支
     $ git checkout -b bugfix1.0
    
     查看远程分支
     $ git branch -r
     删除远程分支
     $ git branch -r -d origin/bugfix1.0
     
     $ git merge v1.0
     
    ``` 
    

    5.注意
    - git中默认就会创建一个分支, 这个分支叫做origin/master, 相当于svn中的trunk
    - 专业人员只需要在git仓库的hooks文件夹中写一些指令, 就可以完成自动测试(压力测试、自动测试、集成测试、冒烟测试、。。。)
    - 和SVN一样, 如果服务器仓库的代码被修改了, 我们再提交代码也会报错。
    fetch first == out of data

     **要先从服务器`pull`之后再提交***
    
    
     - 总结:
       git和svn最大的区别
       
         1.git每次修改新增都需要add 
                 
         2.git每台电脑都有一个仓库
         
         3.git是先提交到本地仓库, 再提交到远程仓库
    

    c.新人服务器的搭建

    1.新建一个新人服务器
    cd /Users/lnj/Desktop/... 新人服务器
    2.初始化仓库
    git init --bare

    3.添加一个新的远程仓库
    source control —> master —>config —>remotes —>add —> add remote


    Snip20160126_4.png

    4.将经理最新的代码提交到新人服务器
    xcode -> source control -> push


    Snip20160126_5.png
    5.经理分配新人服务器的地址给新人

    c.分支 —bug 修复

    1.开发

    2.发布

     ```
     # 查看当前标签
     $ git tag
     在本地代码库给项目打上一个标签
     $ git tag -a v1.0 -m 'Version 1.0'
     将标签添推送到远程代码库中
     $ git push origin v1.0 
     ```  
    

    3.保存稳定版本

    4.继续开发

    5.出现bug

    6.分配员工到分支上修复bug

         ```
         >员工从服务器下载最新代码
         $git clone /Users/lnj/Desktop/。。。
         》员工利用git checkout v1.0指令快速切换到1.0版本
         》根据提示:开启一个新的分支开始修复代码
         $git checkout -b 1.0bug_fix
         》修复完成之后再打个标签
         $ git tag -a v1.1 -m 'Version 1.1'
         $ git push origin v1.0  将标签添推送到远程代码库中
         ```
    

    7.合并修复后的代码到主线

     在修复bug 的代码中
       ![Snip20160126_6.png](https://img.haomeiwen.com/i1482869/c551aa564d9a484e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

    8.备份稳定版本
    d.如何使用/学习第三方框架
    优秀的第三方框架都在 github.com

    1> 搜索
    2> git clone 获得完整版本
    $ git clone https://github.com/AFNetworking/AFNetworking.git
    3> 获取最新版本 git pull

    • 进入clone的本地文件夹
      $ git pull

    4> 看github上的文档,优秀的第三方框架都有好的文档
    5> 编写测试程序,看运行结果
    6> 针对感兴趣的部分,看源代码

    7> 有问题去http://stackoverflow.com

    e.通过Xcode将代码提交到github上

    1.注册一个 github账号

    2.新建远程仓库


    Snip20160126_9.png
    Snip20160126_12.png

    3.复制远程仓库地址


    Snip20160126_15.png

    4.添加远程仓库

      - a-
     ![Snip20160126_14.png](https://img.haomeiwen.com/i1482869/be0d032e0b29b0ab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      ![Snip20160126_17.png](https://img.haomeiwen.com/i1482869/6c6540bc4331f2ad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      
     ![Snip20160126_18.png](https://img.haomeiwen.com/i1482869/9f14a056141ef826.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)     
     ![Snip20160126_20.png](https://img.haomeiwen.com/i1482869/1fcf716895f09d83.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      ![Snip20160126_22.png](https://img.haomeiwen.com/i1482869/20dffd907faae958.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
      - b-
    通过 git clone  远程仓库地址
    

    5.在代码仓库创建工程,提交 SourceControl -> commit -> push
    push 成功之后,github上 就有了代码仓库。

    6.配置SSH Keys
    - 点击昵称来到个人主页
    - 点击主页中的设置(setting)
    - 点击SSH Keys
    - 点击 generating SSH keys

      - 1.检查本地的ssh keys
        在“用户目录”下 ls -al ~/.ssh
      - 2.如果文件夹不存在需要手动创建一个  mkdir .ssh(可不要)
      - 3.根据github的提示2生成ssh keys
       在.ssh目录下执行 
       `$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"`
       输入完成之后连续按下回车, 知道出现牛逼的图形位置
      - 4.生成完公钥和私钥之后输入
       ls -la查看是否生成成功   id_rsa(私钥) id_rsa.pub(公钥)
      - 5.根据提示3获得公钥
       pbcopy < ~/.ssh/id_rsa.pub
       打开id_rsa.pub文件拷贝里面的内容
      - 6.点击 setting —》 ssh key —>add ssh key
        将刚才获取到得公钥添加进去
        ![Snip20160126_24.png](https://img.haomeiwen.com/i1482869/55a83561ebc199e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
        ![Snip20160126_25.png](https://img.haomeiwen.com/i1482869/57686487cdf35778.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      - 7.更具github第4步提示, 验证公钥
        验证成功网页上的灰色圆点会变成绿色
      - 8.拷贝到公钥之后打开github主页      
       》点击仓库(Repositories)
       》再点击new来到github创建仓库界面
       
      - 9.通过github提供的地址下载一个空得仓库到本地
      
       》创建一个新的项目到本地仓库文件夹中
       
       》利用Xcode提交代码到github
       
       》注意:要求输入用户名密码时候,输入的是github上显示的昵称而不是登录账号
     
      ```
    

    6.删除代码仓库

    Snip20160126_26.png Snip20160126_27.png

    7.怎么把别人的代码仓库弄到自己的代码仓库


    Snip20160126_28.png

    相关文章

      网友评论

          本文标题:源代码管理

          本文链接:https://www.haomeiwen.com/subject/khhdkttx.html