版本控制
2016年1月4日 17:23:45,和git有关的链接保存了很多,统一在这篇笔记里整理一下。
Git
廖雪峰的官方网站之 Git教程
git@osc 官方推荐的 ProGit(中文版)
首先推荐!其中对于 Git 的工作原理、工作特性的讲解是很到位的,恰到好处,既不深入以免让读者陷入原理的泥潭,毕竟大多只是把 Git 当做一种工具在用,但对于掌握 Git 的操作又非常有价值。如果熟悉一些 Git 的日常操作,想进一步理解 Git 的工作原理,推荐重点章节 1.3 Git 基础、2.2 记录每次更新到仓库的图2-1、3.1 何谓分支、3.2 分支的新建与合并【后续待定……因为暂时只看到这里】
Git 学习笔记
最近想学点小知识,翻出了很久之前收藏的一篇链接-有哪些实用的计算机相关技能,可以在一天内学会?。
第一篇是关于 Git 的。虽然我也用 Git,但一直以来都是 TortoiseGit,图形界面的东东,想通过这篇入门级的交互式教程,了解常用的 Git 命令。严格来说这不是学习笔记,只是在老老实实学完+实践完整个教程之后的几句总结,很少的几点。
刚看前几节的时候,对一个问题比较困惑——“什么状态会是 unstaged 的呢?”
后来了解了 git add -A./git add/git rm/git reset
/git commit…/git checkout – / 命令,才明白长期使用图形界面,直接右击“提交”屏蔽了添加到 staging area 的细节。严格来说,每次 commit 之前都需要使用 add/rm 命令将修改提交到 staging area,也可以直接使用 commit -a(-all)。 在 11 节中提到了 hooks,对此充满了探知的欲望。联想到以前见过的一篇关于 Code Review 的帖子。
关于
git diff
命令知之甚少啊。在 kindle 上对此进行了标注,抽空看。切换和检出:
git checkout branch_name
和git checkout -- file_name
,双横杠的就是为了万一有文件名和分支名相同的情况,使用双横杠保证检出文件,而非切换分支。在比较旧的系统上使用 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 log
、git diff
命令时出现ESC[33
和ESC[m
乱码的解决办法、让 git输出颜色变成彩色的方法如何列出已经跟踪的文件?
git ls-files
git merge –squash
合并分支时需要手动提交,给你修改 commit message 的机会(有时候开发分支上提交时非常随意)git merge –squash介绍
GitHub
Git@OSC
在实际生产中碰到的问题:
- “Git@OSC 禁止推送大于 100M 文件”
- commit 关联 issue,其中关闭 issue、评论 issue,无论我怎么尝试都毫无反应。真尼玛坑爹!
想用 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 之间的五个基本区别》:
- GIT 是分布式的,SVN 不是;
- GIT 把内容按元数据方式存储,而 SVN 是按文件;
- GIT 分支和 SVN 的分支不同;
- GIT 没有一个全局的版本号,而 SVN 有;
- 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 不易。
- 从 svn 迁出到 git 仓库,git svn 命令相对容易上手
- 将 git 仓库提交到 svn,Pushing an existing Git repository to SVN
over