版本控制

2016年1月4日 17:23:45,和git有关的链接保存了很多,统一在这篇笔记里整理一下。

Git

  1. 廖雪峰的官方网站之 Git教程

  2. git@osc 官方推荐的 ProGit(中文版)

    首先推荐!其中对于 Git 的工作原理、工作特性的讲解是很到位的,恰到好处,既不深入以免让读者陷入原理的泥潭,毕竟大多只是把 Git 当做一种工具在用,但对于掌握 Git 的操作又非常有价值。如果熟悉一些 Git 的日常操作,想进一步理解 Git 的工作原理,推荐重点章节 1.3 Git 基础、2.2 记录每次更新到仓库的图2-1、3.1 何谓分支、3.2 分支的新建与合并【后续待定……因为暂时只看到这里】

Git 学习笔记

最近想学点小知识,翻出了很久之前收藏的一篇链接-有哪些实用的计算机相关技能,可以在一天内学会?

第一篇是关于 Git 的。虽然我也用 Git,但一直以来都是 TortoiseGit,图形界面的东东,想通过这篇入门级的交互式教程,了解常用的 Git 命令。严格来说这不是学习笔记,只是在老老实实学完+实践完整个教程之后的几句总结,很少的几点。

  1. 刚看前几节的时候,对一个问题比较困惑——“什么状态会是 unstaged 的呢?”

    后来了解了 git add -A./git add/git rm/git reset /git commit…/git checkout – / 命令,才明白长期使用图形界面,直接右击“提交”屏蔽了添加到 staging area 的细节。严格来说,每次 commit 之前都需要使用 add/rm 命令将修改提交到 staging area,也可以直接使用 commit -a(-all)。

  2. 在 11 节中提到了 hooks,对此充满了探知的欲望。联想到以前见过的一篇关于 Code Review 的帖子。

  3. 关于 git diff 命令知之甚少啊。在 kindle 上对此进行了标注,抽空看。

  4. 切换和检出:git checkout branch_namegit checkout -- file_name,双横杠的就是为了万一有文件名和分支名相同的情况,使用双横杠保证检出文件,而非切换分支。

  5. 在比较旧的系统上使用 git 时,因为无法使用 git 的较新版本,加之系统方面的某些默认配置,使用起来有诸多不便。不便之处及其解决方法,罗列如下:

    1
    2
    3
    4
    5
    6
    7
    # [使用 git log、git diff 命令时出现 ESC[33 和 ESC[m 乱码的解决办法][ref1]
    git config --global core.pager "less -r"
    # [让 git输出颜色变成彩色的方法][ref2]
    git config --global color.status auto
    git config --global color.diff auto
    git config --global color.branch auto
    git config --global color.interactive auto

    使用 git loggit diff 命令时出现 ESC[33ESC[m 乱码的解决办法让 git输出颜色变成彩色的方法

  6. 如何列出已经跟踪的文件?git ls-files

  7. git merge –squash 合并分支时需要手动提交,给你修改 commit message 的机会(有时候开发分支上提交时非常随意)git merge –squash介绍

GitHub

  1. github 简单使用教程

  2. GitHub 详细教程

  3. 学生和教育人士可免费申请 Github 私有仓库

    链接:GitHubEducation

Git@OSC

在实际生产中碰到的问题:

想用 GitHub,在大陆这样的环境却感觉爱不起。可以两个都喜欢: 将项目同时托管到 Github 和 Git@OSC

Git 对比 SVN

git 和 svn 有什么不同?写于 2015年12月18日 16:58:27

背景介绍

老东家其实是个很没意思的公司,是做测控的,跟软件唯一说得上的关联就是使用 NI 公司的 labview、labwindows/cvi 工具,因为用的对方的 pci、pxi 板卡、工控机等。和 c++ 无关,和 Java 无关,和互联网更是八竿子都擦不上个边。

就上面提到的两个开发的工具,还是个别人员在用,反正我没用。关于做软件,身边没有环境,没有团队,井底之蛙,好好的科班出身,差点就废了。也亏了学校的背景,在两年的“空”软件开发工作经验之后,依然能够有幸找到一家做软件的公司,linux 下的 c++ 开发。

两年里无人引路,自学自用了 git,开始时困于 windows 下 git 服务搭建,后来开始使用网上的版本管理网站,比如 github(不怎么用)、bitbucket(已不再用)、oschina(主要在用)。操作的话使用 tortoise 替代原生的命令操作,也很方便。

新公司用的 svn,目前用的很形式化,也就是说做版本管理大体上是个面子工程,领导让用所以就应付着上传代码,能应付过去就 ok 了。

如果要介绍两者的区别,除了使用者的立场,还应该考虑公司的出发点。

个人使用选择 git,还是 svn?为什么?

——我选git,因为个人习惯,更因为 svn 不联网居然不能提交,不能做版本管理。svn 单机也可以做版本管理,参考:不安装 SVN 服务器,使用 TortoiseSVN 创建单机版的 SVN,其实还是个 c/s 结构,在本机上建立个服务目录。

——所以呀,没有明显区别、明显优势的情况下,就是个使用习惯的问题。手头的技能能用、够用,大多数人不愿意花时间、精力去 get 新技能的。

网上百度一下,出现频率最多的应该就是这篇了《Git 和 SVN 之间的五个基本区别》

  1. GIT 是分布式的,SVN 不是;
  2. GIT 把内容按元数据方式存储,而 SVN 是按文件;
  3. GIT 分支和 SVN 的分支不同;
  4. GIT 没有一个全局的版本号,而 SVN 有;
  5. GIT 的内容完整性要优于 SVN;

另外,个人想卸载掉 TortoiseGit,练习以熟悉 git 的命令行模式,有一点担心的地方在于 差异对比的可视化方面图形界面显然比命令行好很多。

公司选择git,还是svn?又是为什么?

这方面找到蒋鑫的一篇,《蒋鑫:为什么 Git 比 SVN 好》,主要企业用户对 SVN 的迷信和对 Git 的误解,当年刚接触 git 时看的就是他写的关于 git 的一本书。

还有一篇是说 svn 的,《SVN 有任何胜过 git 的地方吗?》,作者力证虽然 git 比svn好,但是 svn 也不是一无是处的,怎么感觉怪怪的…

GitSVN

当 Git SVN 混用(比如终端开发使用 git 管理,但公司要求提交到中心仓库 svn)时,不要使用 git submodule 特性,不要使用 svn external 特性。另外,删除 submodule 不易。

over