plumrx 的博客

Plumrx

代码管理-SVN GIT

代码管理

SVN - 集中式

1.特点

  1. 代码一致性高,每个人都可以看到其他人在项目中做什么,管理员可以掌握每个开发者的权限。
  2. 必须联网,中央服务器不可靠,易出现单点故障。
  3. 版本号连续,可以预判下一个版本号。
  4. 每个子目录都维护.svn目录,记录该目录中文件的修改情况,以及与服务端仓库的对应关系。可以checkout 部分路径下的内容,不用整个版本库或分支。每个子目录下都有单独的.svn目录。

2.实现

分支和标签都来自目录拷贝,通常约定是拷贝在branchs/和tags/目录下。所谓分支、tag 都只是仓库中不同路径的一个对象或索引。

3.优缺点

  1. 管理方便,逻辑明确
  2. 集中式服务器更能保证安全性
  3. 代码一致性高
  4. 服务器压力大。数据库容量暴增
  5. 必须链接服务器才能工作

4.适用场景

适合开发人数不多,非开源的项目。

GIT - 分布式

1.特点

  1. 每个人根据权限不同,不可以看到其他人做的所有事情。
  2. 没有统一的“中央服务器”,每个人都是一个完整的版本库,意味着任何一处协同用的服务器故障,都可以从其他机器恢复。
  3. 采用40位哈希值作为版本号,不重复。
  4. 没有部分检出,本地仓库信息完全维护在project根目录的.git目录下。

2.实现

分支世纪上近视一个包含所指对象校验和哈希值的文件,git的分支是完全隔离的,一个提交一般只能发生在一个分支中。

3.优缺点

  1. 公共服务器压力和数据量都不会太大
  2. 速度快、灵活、可以离线工作
  3. 任意两个开发这之间冲突解决较为简单
  4. 学习周期相对较长
  5. 代码保密性差,clone 可以完全公开所有代码和版本信息

4.适用场景

适合分布式团队多人协作,敏捷开发。

5.版本库和工作区

Git的版本库和工作区在同一个目录下,’.git’。他是用来保存元数据和对象数据库的地方。每次clone 镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

  • config:存放当前项目配置信息
  • objects:提交信息的对象,每次提交的版本号,取版本号前两位为文件夹,文件以后38位组成。
  • HEAD:当前分支的指向,一般为master。
  • index:暂存区,add
  • hooks:脚本,log信息,加密过

6. 4个区 – 核心

  1. Workspace:工作区,为电脑实际目录
  2. Index/Stage:暂存区,临时保存你的改动
  3. Local Repository:仓库区(本地仓库),在.git下
  4. Remote Repository:远端仓库

7. 3个步骤 – 核心

  1. 把所有文件,从工作区放进暂存区

    git add .

  2. 把所有文件从暂存区提交到本地仓库

    git commit

  3. 把所有文件从本地仓库推送至远端仓库

    git push

8. 5种状态

  1. Origin:未修改,原始文档
  2. Modified / Untracked:已修改未添加暂存
  3. Staged:已修改已添加至暂存区
  4. Committed:已提交至本地仓库
  5. Pushed:已推送至远端仓库

9. 两种通信协议方式

  1. HTTPS URLs
    GitHub 官方推荐采用该方式,适用面更广,即使在有防火墙或者代理的情况下依旧适用,使用更方便,配置更简单。

  2. SSH URLs
    采用该方式之前,需要先在本地计算机生成密钥对。

10. git clone 都做了什么?

  1. 新建文件夹,默认取url中,‘.git’前一个单词;

    mkdir blog

  2. 初始化 git;

    git init

  3. 新增远端,默认名称为‘origin’;

    git remote add origin url

  4. 从远端获取代码库

    git fetch

  5. 切换分支

    git checkout -b oringin/master