zoukankan      html  css  js  c++  java
  • 代码管理(一)git

    代码管理工具有很多

     主要的有两个  

    git  和  svn

    svn  衍生出来的软件有   cornerstone   smartSVN

    git  的图形界面工具有  Sourcetree

    前几年  svn 一般在国内开发比较常用,但是也有越来越多的人用上了 git

    git 免费的仓库  是开放的,如果想私有仓库  需要   花钱的。具体的花多少钱请自行去官网看。

    今天主要说说  git 

    ==============================================

    参考链接  http://www.cnblogs.com/oc-bowen/p/5263229.html

    一、简介

    什么是git?
    git是一款开源的分布式版本控制工具
    在世界上所有的分布式版本控制工具中,git是最快、最简单、最流行的
     
    git的起源
    作者是Linux之父:Linus Benedict Torvalds
    当初开发git仅仅是为了辅助Linux内核的开发(管理源代码)
     
    git的现状
    在国外已经非常普及,国内并未普及(在慢慢普及)
    越来越多的开源项目已经转移到git
     
    二、SVN 和 Git 对比
    速度
    在很多情况下,git的速度远远比SVN快
     
    结构
    SVN是集中式管理,git是分布式管理
     
    其他
    SVN使用分支比较笨拙,git可以轻松拥有无限个分支
    SVN必须联网才能正常工作,git支持本地版本控制工作
    旧版本的SVN会在每一个目录置放一个.svn,git只会在根目录拥有一个.git
     
    分布式和集中式的最大区别在于:在分布式下,开发者可以本地提交。每个开发者机器上都有一个服务器的数据库
     
     
    三、使用 Git
    跟SVN一样,你可以通过命令行敲指令或者图形界面客户端使用git

    在Mac上,比较好用的git图形界面客户端有

    SourceTree
     
    GitHub
    下载地址:https://mac.github.com
    不过它是专门为GitHub网站而设计的
     
    Xcode
     
    四、git常用指令
    git help :git指令帮助手册
    查看其他指令的做法:git help 其他指令
     
    git config :git的配置信息相关(修改的是.git/config文件)
    配置用户名:git config “user.name” 用户名(用于跟踪修改记录)
    配置邮箱:git config “user.email” 邮箱(用于多人开发间的沟通)
    查看配置信息:git config –l
    编辑配置信息:git config –e(用vim编辑,:wq是退出vim编辑器)
    设置指令的别名:git config alias.别名 原指令名称
    设置带参数指令的别名:git config alias.别名 “原指令名称 参数”
    将此设置应用到整个系统中:git config ––gloabal
     
    git status :查文件的状态
    查看某个文件的状态:git status 文件名
    查看当前路径所有文件的状态:git status
    git log :查看文件的修改日志
    查看某个文件的修改日志:git log 文件名
    查看当前路径所有文件的修改日志:git log
    用一行的方式查看简单的日志信息:git log ––pretty=oneline
    查看最近的N次修改:git log –N(N是一个整数)
     
    git diff :查看文件最新改动的地方
    查看某个文件的最新改动的地方:git diff 文件名
    查看当前路径所有文件最新改动的地方:git diff
     
    git init :初始化一个空的本地仓库,生成一个.git目录,用于维护版本信息
    在当前路径初始化仓库:git init
    在其他路径初始化仓库:git init 仓库路径
     
    git add :将工作区的文件保存到暂缓区
    保存某个文件到暂缓区:git add 文件名
    保存当前路径的所有文件到暂缓区:git add .(注意,最后是一个点 . )
     
    git commit :将暂缓区的文件提交到当前分支
    提交某个文件到分支:git commit -m ”注释” 文件名
    保存当前路径的所有文件到分支:git commit -m ”注释” 
     
    git reset :版本回退(建议加上––hard参数,git支持无限次后悔)
    回退到上一个版本:git reset ––hard HEAD^
    回退到上上一个版本:git reset ––hard HEAD^^
    回退到上N个版本:git reset ––hard HEAD~N(N是一个整数)
    回退到任意一个版本:git reset ––hard 版本号(版本号用7位即可)
     
    git reflog :查看分支引用记录(能够查看所有的版本号)
     
    git rm:删除文件(删完之后要进行commit操作,才能同步到版本库)
     
    git clone:下载远程仓库到本地
    下载远程仓库到当前路径:git clone 仓库的URL
    下载远程仓库到特定路径:git clone 仓库的URL 存放仓库的路径
     
    git pull:下载远程仓库的最新信息到本地仓库
     
    git push:将本地的仓库信息推送到远程仓库
     
    五、工作原理
    如果想了解git的工作原理,有几个核心概念必须知道
    工作区(Working Directory):仓库文件夹里除.git目录以外的内容
     
    版本库(Repository):.git目录,用于存储记录版本信息
    暂缓区(stage)
    分支(master):git自动创建的第一个分支
    HEAD指针:用于指向当前分支
     
    git add和git commit的原理
    git add :把文件修改添加到暂存区
    git commit :把暂存区的所有内容提交到当前分支
     
     
    六、远程仓库
    如果是多人团队开发,最好还是搭建一个远程仓库
     
    搭建远程仓库的途径
    自己搭建一个git服务器:费时费力
    在GitHub上托管项目:公开项目免费、私有项目收费,很多第三方开源项目
    在oschina上托管项目:完全免费,在国内访问速度快(推荐使用)
     
    七、搭建GitHub远程仓库 
    注册一个GitHub帐号:https://github.com
     
    打开“Account Settings”
     
    1.配置SSH Key 
     
    点击“SSH keys”
    配置Mac的SSH Key的公钥(用于限制提交)
      
     
    在Mac上生成SSH Key(在终端输入下面指令)
    cd ~/.ssh
    ssh-keygen -t rsa -C "你的邮箱地址”
    然后一直敲回车
     
    然后就会在~/.ssh目录下生成SSK Key的秘钥对
    id_rsa :私钥,不可泄露
    id_rsa.pub :公钥,可以公开(将这个文件的内容粘贴到GitHub上)
     
    利用cat指令可以查看文件的内容
    cat id_rsa.pub
     
    2.添加仓库
    拷贝仓库地址,用于下载到本地
     
    如果想删除仓库,也很简单
     
     
     
    笔记
    复制代码
      1 01. GIT简介(PPT)
      2 ================================================================================
      3 
      4 02. GIT命令行帮助
      5 ================================================================================
      6 $ svn help
      7 查看svn所有命令的帮助
      8 $ svn help 子命令
      9 
     10 # 要退出帮助信息,按"q"
     11 # 翻看下页,按"空格"
     12 # 翻看上页,按"CTRL+B"
     13 # 要搜索相关文字,按"/"然后输入"相关文字"
     14 
     15 03. 创建代码库 & 配置个人信息
     16 ================================================================================
     17 1>  创建代码仓库
     18 $ git init
     19 
     20 2>  配置用户名和邮箱
     21 $ git config user.name lnj
     22 $ git config user.email lnj@gmail.com
     23 
     24 * 以上两个命令会将用户信息保存在当前代码仓库中
     25 
     26 # 只有配置了用户和邮箱之后,git才能识别出操作的人员信息,通过钩子(hooks)程序可以设置一些动作
     27 # 例如单元测试发现问题后,自动给相关人员发送电子邮件
     28 * 注意 暂时不建议投入一毛钱精力
     29 
     30 3>  如果要一次性配置完成可以使用一下命令
     31 $ git config --global user.name lnj
     32 $ git config --global user.email lnj321@gmail.com
     33 
     34 * 以上两个命令会将用户信息保存在用户目录下的 .gitconfig 文件中
     35 
     36 4>  查看当前所有配置
     37 $ git config -l
     38 
     39 04. 实际开发
     40 ================================================================================
     41 1>  创建代码,开始开发
     42 $ touch main.c
     43 $ open main.c
     44 
     45 2>  将代码添加到代码库
     46 # 查看当前代码库状态
     47 $ git status
     48 # 将文件添加到代码库
     49 $ git add main.c
     50 # 将修改提交到代码库
     51 $ git commit -m "添加了main.c"
     52 
     53 提示:
     54 *   在此一定要使用 -m 参数指定修改的备注信息
     55 *   否则会进入 vim 编辑器,如果对vim不熟悉,会是很糟糕的事情
     56 
     57 # 将当前文件夹下的所有新建或修改的文件一次性添加到代码库
     58 $ git add .
     59 
     60 3>  添加多个文件
     61 $ touch Person.h Person.m
     62 $ git add .
     63 $ git commit -m "添加了Person类"
     64 $ open Person.h
     65 $ git add .
     66 $ git commit -m "增加Person类属性"
     67 
     68 * 注意 使用git时,每一次修改都需要添加再提交,这一点是与svn不一样的
     69 
     70 git 的重要概念及工作原理
     71 --------------------------------------------------------------------------------
     72 工作区
     73 暂存区(staged)
     74 分支(HEAD)
     75 
     76 05. 别名 & 日志
     77 ================================================================================
     78 $ git config alias.st status
     79 $ git config alias.ci "commit -m"
     80 
     81 个人建议:除非特殊原因,最好不要设置别名,否则换一台机器就不会用了
     82 
     83 # 查看所有版本库日志
     84 $ git log
     85 # 查看指定文件的版本库日志
     86 $ git log 文件名
     87 
     88 # 配置带颜色的log别名
     89 $ 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"
     90 
     91 提示:在git中,版本号是一个由SHA1生成的哈希值
     92 
     93 06. 版本号,让我们在任意版本之间穿梭
     94 ================================================================================
     95 # 回到当前版本,放弃所有没有提交的修改
     96 $ git reset --hard HEAD
     97 # 回到上一个版本
     98 $ git reset --hard HEAD^
     99 # 回到之前第3个修订版本
    100 $ git reset --hard HEAD~(3)
    101 # 回到指定版本号的版本
    102 $ git reset e695b67
    103 
    104 # 查看分支引用记录
    105 $ git reflog
    106 
    107 07. 单个文件的修改管理
    108 ================================================================================
    109 # 查看文件变化
    110 $ git diff
    111 # 撤销对文件做的修改
    112 $ git checkout Person.h
    113 # 从代码库(暂存区中删除文件)
    复制代码
    复制代码
     1 01. 建立代码仓库(专门用于团队开发的代码仓库)
     2 ================================================================================
     3 
     4 # 切换目录
     5 $ cd /Users/lnj/Desktop/git演练/公司/weibo
     6 # 建立空白代码库(专门用于团队开发)
     7 $ git init --bare
     8 
     9 02. 项目经理准备项目(前奏)
    10 ================================================================================
    11 
    12 # 切换目录
    13 $ cd /Users/lnj/Desktop/git演练/经理
    14 # "克隆"代码库到本地
    15 $ git clone /Users/lnj/Desktop/git演练/公司/weibo/
    16 
    17 # 个人信息配置(因为要演示一台机器上的多人协作,日常开发可以忽略)
    18 $ git config user.name manager
    19 $ git config user.email manager@163.com
    20 
    21 .gitignore
    22 --------------------------------------------------------------------------------
    23 .gitignore可以指定哪些文件不纳入版本库的管理
    24 
    25 参考网址:https://github.com/github/gitignore
    26 
    27 # 命令行中进入与.git同级的目录
    28 $ cd /Users/lnj/Desktop/git演练/经理/weibo
    29 
    30 将以下命令一次性粘贴到命令行中
    31 --------------------------------------------------------------------------------
    32 echo -e "# Xcode
    33 #
    34 build/
    35 *.pbxuser
    36 *.mode1v3
    37 *.mode2v3
    38 *.perspectivev3
    39 xcuserdata
    40 *.xccheckout
    41 *.moved-aside
    42 DerivedData
    43 *.hmap
    44 *.ipa
    45 *.xcuserstate
    46 # CocoaPods
    47 #
    48 # We recommend against adding the Pods directory to your .gitignore. However
    49 # you should judge for yourself, the pros and cons are mentioned at:
    50 # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
    51 #
    52 # Pods/" > .gitignore
    53 --------------------------------------------------------------------------------
    54 # 将.gitignore添加到代码库
    55 $ git add .gitignore
    56 
    57 03. 创建项目
    58 ================================================================================
    59 提交同时"push"到远程代码仓库
    60 
    61 04. 新人加入
    62 ================================================================================
    63 
    64 ...
    65 
    66 05. 分布式的代码库 - 仅供参考
    67 ================================================================================
    68 由于git是分布式的,任何一台计算机上都保留有完整的代码库的内容,因此可以把团队开发的代码库放在任何位置
    69 
    70 
    71 多个远程代码库之间的同步演练"提示,此演练仅供了解,具体的使用,需要一定的团队规模之后,才能够体会"
    72 
    73 
    74 06. 分支管理 - Tag
    75 ================================================================================
    76 # 查看当前标签
    77 $ git tag
    78 # 在本地代码库给项目打上一个标签
    79 $ git tag -a v1.0 -m 'Version 1.0'
    80 # 将标签添推送到远程代码库中
    81 $ git push origin v1.0
    82 
    83 # 使用tag,就能够将项目快速切换到某一个中间状态,例如产品开发线上的某一个稳定版本
    84 # 签出v1.0标签
    85 $ git checkout v1.0
    86 # 从签出状态创建v1.0bugfix分支
    87 $ git checkout -b bugfix1.0
    88 
    89 # 查看远程分支
    90 $ git branch -r
    91 # 删除远程分支
    92 $ git branch -r -d origin/bugfix1.0
    复制代码
    复制代码
     1 01. 分布式的代码库 - 仅供参考
     2 ================================================================================
     3 由于git是分布式的,任何一台计算机上都保留有完整的代码库的内容,因此可以把团队开发的代码库放在任何位置
     4 
     5 
     6 多个远程代码库之间的同步演练"提示,此演练仅供了解,具体的使用,需要一定的团队规模之后,才能够体会"
     7 
     8 
     9 02. 分支管理 - Tag
    10 ================================================================================
    11 # 查看当前标签
    12 $ git tag
    13 # 在本地代码库给项目打上一个标签
    14 $ git tag -a v1.0 -m 'Version 1.0'
    15 # 将标签添推送到远程代码库中
    16 $ git push origin v1.0
    17 
    18 # 使用tag,就能够将项目快速切换到某一个中间状态,例如产品开发线上的某一个稳定版本
    19 # 签出v1.0标签
    20 $ git checkout v1.0
    21 # 从签出状态创建v1.0bugfix分支
    22 $ git checkout -b bugfix1.0
    23 
    24 # 查看远程分支
    25 $ git branch -r
    26 # 删除远程分支
    27 $ git branch -r -d origin/bugfix1.0
    复制代码
    复制代码
     1 如何使用/学习第三方框架?
     2 
     3 优秀的第三方框架都在 github.com
     4 
     5 1> 搜索
     6 2> git clone 获得完整版本
     7 $ git clone https://github.com/AFNetworking/AFNetworking.git
     8 3> 获取最新版本 git pull
     9 * 进入clone的本地文件夹
    10 $ git pull
    11 
    12 4> 看github上的文档,优秀的第三方框架都有好的文档
    13 5> 编写测试程序,看运行结果
    14 6> 针对感兴趣的部分,看源代码
    15 
    16 7> 有问题去http://stackoverflow.com
  • 相关阅读:
    mysql 内联接、左联接、右联接、完全联接、交叉联接 区别
    JS 时间字符串与时间戳之间的转换
    MySQL性能优化的最佳20条经验
    ++i 与 i++ 的区别
    === 与 == 区别
    SC命令创建和删除windows服务
    杂记
    linux 文件编程
    u-boot 启动过程
    简单冒泡法
  • 原文地址:https://www.cnblogs.com/isItOk/p/7274087.html
Copyright © 2011-2022 走看看